summaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/00_org.gnome.shell.gschema.override6
-rw-r--r--data/50-gnome-shell-launchers.xml45
-rw-r--r--data/50-gnome-shell-screenshots.xml20
-rw-r--r--data/50-gnome-shell-system.xml24
-rw-r--r--data/README.osk-layouts75
-rw-r--r--data/cldr2json/README.md40
-rwxr-xr-xdata/cldr2json/cldr2json.py212
-rw-r--r--data/cldr2json/test/__init__.py0
-rw-r--r--data/cldr2json/test/data/fr-t-k0-android.xml138
-rw-r--r--data/cldr2json/test/data/fr.json614
-rwxr-xr-xdata/cldr2json/test/test_cldr2json.py212
-rw-r--r--data/dbus-interfaces/meson.build10
-rw-r--r--data/dbus-interfaces/net.hadess.PowerProfiles.xml76
-rw-r--r--data/dbus-interfaces/net.hadess.SensorProxy.xml5
-rw-r--r--data/dbus-interfaces/net.hadess.SwitcherooControl.xml46
-rw-r--r--data/dbus-interfaces/net.reactivated.Fprint.Device.xml78
-rw-r--r--data/dbus-interfaces/net.reactivated.Fprint.Manager.xml18
-rw-r--r--data/dbus-interfaces/org.Gtk.MountOperationHandler.xml32
-rw-r--r--data/dbus-interfaces/org.freedesktop.Application.xml12
-rw-r--r--data/dbus-interfaces/org.freedesktop.DBus.xml16
-rw-r--r--data/dbus-interfaces/org.freedesktop.GeoClue2.Agent.xml11
-rw-r--r--data/dbus-interfaces/org.freedesktop.GeoClue2.Manager.xml9
-rw-r--r--data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Cdma.xml13
-rw-r--r--data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Gsm.Network.xml19
-rw-r--r--data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml6
-rw-r--r--data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.ModemCdma.xml5
-rw-r--r--data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.xml5
-rw-r--r--data/dbus-interfaces/org.freedesktop.Notifications.xml35
-rw-r--r--data/dbus-interfaces/org.freedesktop.PackageKit.Offline.xml13
-rw-r--r--data/dbus-interfaces/org.freedesktop.UPower.Device.xml11
-rw-r--r--data/dbus-interfaces/org.freedesktop.UPower.xml5
-rw-r--r--data/dbus-interfaces/org.freedesktop.bolt1.Device.xml18
-rw-r--r--data/dbus-interfaces/org.freedesktop.bolt1.Manager.xml15
-rw-r--r--data/dbus-interfaces/org.freedesktop.impl.portal.Access.xml15
-rw-r--r--data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml31
-rw-r--r--data/dbus-interfaces/org.freedesktop.impl.portal.Request.xml5
-rw-r--r--data/dbus-interfaces/org.freedesktop.login1.Manager.xml33
-rw-r--r--data/dbus-interfaces/org.freedesktop.login1.Session.xml15
-rw-r--r--data/dbus-interfaces/org.freedesktop.login1.User.xml6
-rw-r--r--data/dbus-interfaces/org.freedesktop.realmd.Provider.xml13
-rw-r--r--data/dbus-interfaces/org.freedesktop.realmd.Realm.xml20
-rw-r--r--data/dbus-interfaces/org.freedesktop.realmd.Service.xml15
-rw-r--r--data/dbus-interfaces/org.gnome.Mutter.ScreenCast.xml191
-rw-r--r--data/dbus-interfaces/org.gnome.ScreenSaver.xml18
-rw-r--r--data/dbus-interfaces/org.gnome.SessionManager.EndSessionDialog.xml16
-rw-r--r--data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml13
-rw-r--r--data/dbus-interfaces/org.gnome.SessionManager.Presence.xml11
-rw-r--r--data/dbus-interfaces/org.gnome.SessionManager.xml23
-rw-r--r--data/dbus-interfaces/org.gnome.SettingsDaemon.Color.xml6
-rw-r--r--data/dbus-interfaces/org.gnome.SettingsDaemon.Power.Screen.xml5
-rw-r--r--data/dbus-interfaces/org.gnome.SettingsDaemon.Rfkill.xml11
-rw-r--r--data/dbus-interfaces/org.gnome.SettingsDaemon.Wacom.xml13
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.AudioDeviceSelection.xml12
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.CalendarServer.xml19
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.ClocksIntegration.xml15
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.Extensions.xml267
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.HotplugSniffer.xml8
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.Introspect.xml89
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.PadOsd.xml28
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.PerfHelper.xml13
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.PortalHelper.xml19
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.Screencast.xml96
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.Screenshot.xml145
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.Wacom.PadOsd.xml8
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.WeatherIntegration.xml16
-rw-r--r--data/dbus-interfaces/org.gnome.Shell.xml47
-rw-r--r--data/dbus-interfaces/org.gnome.ShellSearchProvider.xml73
-rw-r--r--data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml87
-rw-r--r--data/dbus-interfaces/org.gtk.Notifications.xml13
-rw-r--r--data/dbus-interfaces/org.mpris.MediaPlayer2.Player.xml12
-rw-r--r--data/dbus-interfaces/org.mpris.MediaPlayer2.xml7
-rw-r--r--data/emoji.json15740
-rw-r--r--data/gnome-shell-dbus-interfaces.gresource.xml60
-rw-r--r--data/gnome-shell-icons.gresource.xml33
-rw-r--r--data/gnome-shell-osk-layouts.gresource.xml65
-rw-r--r--data/gnome-shell-overrides-migration.desktop.in5
-rw-r--r--data/gnome-shell-theme.gresource.xml25
-rw-r--r--data/gnome-shell.portal4
-rw-r--r--data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg1
-rw-r--r--data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg1
-rw-r--r--data/icons/meson.build1
-rw-r--r--data/icons/scalable/actions/carousel-arrow-next-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/color-pick.svg94
-rw-r--r--data/icons/scalable/actions/dark-mode-symbolic.svg2
-rw-r--r--data/icons/scalable/actions/pointer-double-click-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/pointer-drag-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/pointer-primary-click-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/pointer-secondary-click-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/preview-close-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/record-screen-symbolic.svg9
-rw-r--r--data/icons/scalable/actions/screencast-recorded-symbolic.svg8
-rw-r--r--data/icons/scalable/actions/screenshot-recorded-symbolic.svg8
-rw-r--r--data/icons/scalable/actions/screenshot-ui-area-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/screenshot-ui-display-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg4
-rw-r--r--data/icons/scalable/actions/screenshot-ui-window-symbolic.svg4
-rw-r--r--data/icons/scalable/status/keyboard-caps-lock-symbolic.svg4
-rw-r--r--data/icons/scalable/status/keyboard-enter-symbolic.svg4
-rw-r--r--data/icons/scalable/status/keyboard-hide-symbolic.svg5
-rw-r--r--data/icons/scalable/status/keyboard-layout-symbolic.svg4
-rw-r--r--data/icons/scalable/status/keyboard-shift-symbolic.svg4
-rw-r--r--data/icons/scalable/status/message-indicator-symbolic.svg4
-rw-r--r--data/icons/scalable/status/no-events-symbolic.svg7
-rw-r--r--data/icons/scalable/status/no-notifications-symbolic.svg4
-rw-r--r--data/icons/scalable/status/screen-privacy-disabled-symbolic.svg4
-rw-r--r--data/icons/scalable/status/screen-privacy-symbolic.svg4
-rw-r--r--data/icons/scalable/status/stop-symbolic.svg2
-rw-r--r--data/meson.build138
-rw-r--r--data/org.gnome.Shell-disable-extensions.service15
-rw-r--r--data/org.gnome.Shell-symbolic.Source.svg511
-rw-r--r--data/org.gnome.Shell.Extensions.desktop.in.in10
-rw-r--r--data/org.gnome.Shell.PortalHelper.desktop.in.in10
-rw-r--r--data/org.gnome.Shell.PortalHelper.service.in3
-rw-r--r--data/org.gnome.Shell.desktop.in.in13
-rw-r--r--data/org.gnome.Shell.target10
-rw-r--r--data/org.gnome.Shell@wayland.service.in37
-rw-r--r--data/org.gnome.Shell@x11.service.in42
-rw-r--r--data/org.gnome.shell.gschema.xml.in364
-rw-r--r--data/osk-layouts/am.json1051
-rw-r--r--data/osk-layouts/ara.json793
-rw-r--r--data/osk-layouts/at.json978
-rw-r--r--data/osk-layouts/be.json1021
-rw-r--r--data/osk-layouts/bg.json955
-rw-r--r--data/osk-layouts/by.json965
-rw-r--r--data/osk-layouts/ca.json1007
-rw-r--r--data/osk-layouts/ch+fr.json978
-rw-r--r--data/osk-layouts/ch.json978
-rw-r--r--data/osk-layouts/cz.json1021
-rw-r--r--data/osk-layouts/de.json978
-rw-r--r--data/osk-layouts/dk.json1012
-rw-r--r--data/osk-layouts/ee.json1088
-rw-r--r--data/osk-layouts/epo.json1123
-rw-r--r--data/osk-layouts/es+cat.json1014
-rw-r--r--data/osk-layouts/es.json1016
-rw-r--r--data/osk-layouts/fi.json992
-rw-r--r--data/osk-layouts/fr.json1026
-rw-r--r--data/osk-layouts/ge.json705
-rw-r--r--data/osk-layouts/gr.json940
-rw-r--r--data/osk-layouts/hr.json939
-rw-r--r--data/osk-layouts/hu.json987
-rw-r--r--data/osk-layouts/id.json915
-rw-r--r--data/osk-layouts/il.json718
-rw-r--r--data/osk-layouts/in+bolnagri.json745
-rw-r--r--data/osk-layouts/in+mal.json986
-rw-r--r--data/osk-layouts/ir.json797
-rw-r--r--data/osk-layouts/is.json991
-rw-r--r--data/osk-layouts/it.json988
-rw-r--r--data/osk-layouts/ke.json985
-rw-r--r--data/osk-layouts/kg.json971
-rw-r--r--data/osk-layouts/kh.json817
-rw-r--r--data/osk-layouts/kr.json720
-rw-r--r--data/osk-layouts/la.json808
-rw-r--r--data/osk-layouts/latam.json1015
-rw-r--r--data/osk-layouts/lt.json1055
-rw-r--r--data/osk-layouts/lv.json1053
-rw-r--r--data/osk-layouts/mk.json965
-rw-r--r--data/osk-layouts/mn.json971
-rw-r--r--data/osk-layouts/my.json915
-rw-r--r--data/osk-layouts/nl.json992
-rw-r--r--data/osk-layouts/no.json1012
-rw-r--r--data/osk-layouts/ph.json915
-rw-r--r--data/osk-layouts/pl.json987
-rw-r--r--data/osk-layouts/pt.json992
-rw-r--r--data/osk-layouts/ro.json955
-rw-r--r--data/osk-layouts/rs.json965
-rw-r--r--data/osk-layouts/ru.json965
-rw-r--r--data/osk-layouts/se.json1046
-rw-r--r--data/osk-layouts/si.json926
-rw-r--r--data/osk-layouts/sk.json1056
-rw-r--r--data/osk-layouts/th.json1135
-rw-r--r--data/osk-layouts/tr.json974
-rw-r--r--data/osk-layouts/ua.json969
-rw-r--r--data/osk-layouts/uk.json984
-rw-r--r--data/osk-layouts/us-extended.json1043
-rw-r--r--data/osk-layouts/us.json983
-rw-r--r--data/osk-layouts/vn.json1051
-rw-r--r--data/osk-layouts/za.json997
-rw-r--r--data/perf-background.xml.in31
-rw-r--r--data/theme/README.md32
-rw-r--r--data/theme/calendar-today-light.svg1
-rw-r--r--data/theme/calendar-today.svg1
-rw-r--r--data/theme/checkbox-focused.svg1
-rw-r--r--data/theme/checkbox-off-focused-light.svg220
-rw-r--r--data/theme/checkbox-off-focused.svg1
-rw-r--r--data/theme/checkbox-off-light.svg211
-rw-r--r--data/theme/checkbox-off.svg1
-rw-r--r--data/theme/checkbox.svg1
-rw-r--r--data/theme/dash-placeholder.svg84
-rw-r--r--data/theme/gnome-shell-high-contrast.css2883
-rw-r--r--data/theme/gnome-shell-high-contrast.scss38
-rw-r--r--data/theme/gnome-shell-sass/COPYING339
-rw-r--r--data/theme/gnome-shell-sass/NEWS0
-rw-r--r--data/theme/gnome-shell-sass/README.md16
-rw-r--r--data/theme/gnome-shell-sass/_colors.scss75
-rw-r--r--data/theme/gnome-shell-sass/_common.scss222
-rw-r--r--data/theme/gnome-shell-sass/_drawing.scss336
-rw-r--r--data/theme/gnome-shell-sass/_high-contrast-colors.scss72
-rw-r--r--data/theme/gnome-shell-sass/_palette.scss46
-rw-r--r--data/theme/gnome-shell-sass/_widgets.scss51
-rw-r--r--data/theme/gnome-shell-sass/gnome-shell-sass.doap37
-rw-r--r--data/theme/gnome-shell-sass/widgets/_a11y.scss24
-rw-r--r--data/theme/gnome-shell-sass/widgets/_app-grid.scss161
-rw-r--r--data/theme/gnome-shell-sass/widgets/_base.scss18
-rw-r--r--data/theme/gnome-shell-sass/widgets/_buttons.scss19
-rw-r--r--data/theme/gnome-shell-sass/widgets/_calendar.scss257
-rw-r--r--data/theme/gnome-shell-sass/widgets/_check-box.scss18
-rw-r--r--data/theme/gnome-shell-sass/widgets/_corner-ripple.scss15
-rw-r--r--data/theme/gnome-shell-sass/widgets/_dash.scss75
-rw-r--r--data/theme/gnome-shell-sass/widgets/_dialogs.scss172
-rw-r--r--data/theme/gnome-shell-sass/widgets/_entries.scss31
-rw-r--r--data/theme/gnome-shell-sass/widgets/_hotplug.scss10
-rw-r--r--data/theme/gnome-shell-sass/widgets/_ibus-popup.scss39
-rw-r--r--data/theme/gnome-shell-sass/widgets/_keyboard.scss159
-rw-r--r--data/theme/gnome-shell-sass/widgets/_login-dialog.scss201
-rw-r--r--data/theme/gnome-shell-sass/widgets/_looking-glass.scss144
-rw-r--r--data/theme/gnome-shell-sass/widgets/_message-list.scss180
-rw-r--r--data/theme/gnome-shell-sass/widgets/_misc.scss65
-rw-r--r--data/theme/gnome-shell-sass/widgets/_notifications.scss61
-rw-r--r--data/theme/gnome-shell-sass/widgets/_osd.scss64
-rw-r--r--data/theme/gnome-shell-sass/widgets/_overview.scss13
-rw-r--r--data/theme/gnome-shell-sass/widgets/_panel.scss233
-rw-r--r--data/theme/gnome-shell-sass/widgets/_popovers.scss182
-rw-r--r--data/theme/gnome-shell-sass/widgets/_quick-settings.scss118
-rw-r--r--data/theme/gnome-shell-sass/widgets/_screen-shield.scss78
-rw-r--r--data/theme/gnome-shell-sass/widgets/_screenshot.scss204
-rw-r--r--data/theme/gnome-shell-sass/widgets/_scrollbars.scss29
-rw-r--r--data/theme/gnome-shell-sass/widgets/_search-entry.scss26
-rw-r--r--data/theme/gnome-shell-sass/widgets/_search-results.scss96
-rw-r--r--data/theme/gnome-shell-sass/widgets/_slider.scss22
-rw-r--r--data/theme/gnome-shell-sass/widgets/_switcher-popup.scss72
-rw-r--r--data/theme/gnome-shell-sass/widgets/_switches.scss16
-rw-r--r--data/theme/gnome-shell-sass/widgets/_window-picker.scss53
-rw-r--r--data/theme/gnome-shell-sass/widgets/_workspace-switcher.scss25
-rw-r--r--data/theme/gnome-shell-sass/widgets/_workspace-thumbnails.scss28
-rw-r--r--data/theme/gnome-shell-start.svg343
-rw-r--r--data/theme/gnome-shell.css2784
-rw-r--r--data/theme/gnome-shell.scss6
-rw-r--r--data/theme/meson.build62
-rw-r--r--data/theme/pad-osd.css29
-rw-r--r--data/theme/process-working.svg3084
-rw-r--r--data/theme/running-indicator.svg130
-rw-r--r--data/theme/toggle-off-hc.svg1
-rw-r--r--data/theme/toggle-off-light.svg1
-rw-r--r--data/theme/toggle-off.svg1
-rw-r--r--data/theme/toggle-on-hc.svg1
-rw-r--r--data/theme/toggle-on-light.svg1
-rw-r--r--data/theme/toggle-on.svg1
-rw-r--r--data/theme/workspace-placeholder.svg119
-rwxr-xr-xdata/update-osk-layouts.sh47
250 files changed, 91723 insertions, 0 deletions
diff --git a/data/00_org.gnome.shell.gschema.override b/data/00_org.gnome.shell.gschema.override
new file mode 100644
index 0000000..ac732e6
--- /dev/null
+++ b/data/00_org.gnome.shell.gschema.override
@@ -0,0 +1,6 @@
+[org.gnome.mutter:GNOME]
+attach-modal-dialogs=true
+edge-tiling=true
+dynamic-workspaces=true
+workspaces-only-on-primary=true
+focus-change-on-pointer-rest=true
diff --git a/data/50-gnome-shell-launchers.xml b/data/50-gnome-shell-launchers.xml
new file mode 100644
index 0000000..ca57ee6
--- /dev/null
+++ b/data/50-gnome-shell-launchers.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<KeyListEntries schema="org.gnome.shell.keybindings"
+ group="system"
+ name="Launchers"
+ wm_name="GNOME Shell"
+ package="gnome-shell">
+
+ <KeyListEntry name="switch-to-application-1"
+ description="Activate favorite application 1"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-2"
+ description="Activate favorite application 2"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-3"
+ description="Activate favorite application 3"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-4"
+ description="Activate favorite application 4"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-5"
+ description="Activate favorite application 5"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-6"
+ description="Activate favorite application 6"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-7"
+ description="Activate favorite application 7"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-8"
+ description="Activate favorite application 8"
+ hidden="true"/>
+
+ <KeyListEntry name="switch-to-application-9"
+ description="Activate favorite application 9"
+ hidden="true"/>
+
+</KeyListEntries>
+
diff --git a/data/50-gnome-shell-screenshots.xml b/data/50-gnome-shell-screenshots.xml
new file mode 100644
index 0000000..c82f1a3
--- /dev/null
+++ b/data/50-gnome-shell-screenshots.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<KeyListEntries schema="org.gnome.shell.keybindings"
+ group="system"
+ name="Screenshots"
+ wm_name="GNOME Shell"
+ package="gnome-shell">
+
+ <KeyListEntry name="show-screenshot-ui"
+ description="Take a screenshot interactively"/>
+
+ <KeyListEntry name="screenshot"
+ description="Take a screenshot"/>
+
+ <KeyListEntry name="screenshot-window"
+ description="Take a screenshot of a window"/>
+
+ <KeyListEntry name="show-screen-recording-ui"
+ description="Record a screencast interactively"/>
+
+</KeyListEntries> \ No newline at end of file
diff --git a/data/50-gnome-shell-system.xml b/data/50-gnome-shell-system.xml
new file mode 100644
index 0000000..33e5ba5
--- /dev/null
+++ b/data/50-gnome-shell-system.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<KeyListEntries schema="org.gnome.shell.keybindings"
+ group="system"
+ name="System"
+ wm_name="GNOME Shell"
+ package="gnome-shell">
+
+ <KeyListEntry name="toggle-message-tray"
+ description="Show the notification list"/>
+
+ <KeyListEntry name="focus-active-notification"
+ description="Focus the active notification"/>
+
+ <KeyListEntry name="toggle-overview"
+ description="Show the overview"/>
+
+ <KeyListEntry name="toggle-application-view"
+ description="Show all applications"/>
+
+ <KeyListEntry name="open-application-menu"
+ description="Open the application menu"/>
+
+</KeyListEntries>
+
diff --git a/data/README.osk-layouts b/data/README.osk-layouts
new file mode 100644
index 0000000..a0a0dbe
--- /dev/null
+++ b/data/README.osk-layouts
@@ -0,0 +1,75 @@
+Gnome-shell OSK layouts are extracted from CLDR layout definitions:
+https://www.unicode.org/cldr/charts/latest/keyboards/layouts/index.html
+
+To add new layouts from CLDR:
+
+1) Run update-osk-layouts.sh
+
+2) Modify JSON files to add extra keys, tweak appearance...
+
+2) Do git add and git commit
+
+JSON file format
+================
+
+Each JSON file describes a keymap for a certain language and layout,
+it has the following structure:
+
+- Root (Object)
+
+ Root object of a layout, has the following properties:
+
+ - levels (Array of Level): Levels in the keymap
+ - locale (String): Locale name for this keymap
+ - name (String): Human readable name for this keymap
+
+- Level (Object)
+
+ A level defines the keys available on a keyboard level,
+ these are the key panels visible at a time. E.g. to type
+ uppercase levels or symbols.
+
+ Levels have the following properties:
+
+ - level (String): Name of the level, common names are
+ "", "shift", "opt" and "opt+shift".
+ - mode (String): Mode for this level, common modes are
+ "default", "latched" and "locked".
+ - rows (Array of Row): Array of rows of keys.
+
+- Row (Array)
+
+ A row is an Array of Key.
+
+- Key (Object)
+
+ A keyboard key. Keys have the following properties:
+
+ - iconName (String): Icon name to show on the key.
+ Keys with an icon name do not have a label.
+ - label (String): Label to show on the key.
+ - strings (Array of String): Strings to commit. If
+ label property does not exist, the first element
+ will be also the label. Extra elements are shown
+ in the extra keys popover.
+ - keyval (String): Hexadecimal keyval to emit as
+ emulated key presses. Committed strings are
+ preferred.
+ - width (Double): Relative width of the key in the
+ row. 1 is for a square key. Multiples of 0.5 are
+ accepted.
+ - level (Integer): Level that the key switches to.
+ See the levelSwitch action.
+ - action (string): Action performed by the key,
+ accepted actions are:
+
+ - hide: Hides the OSK
+ - languageMenu: Pops up the language selection
+ menu
+ - emoji: Switches to the emoji selection panel
+ - modifier: Handles the keyval as a modifier
+ key. This handles e.g. Ctrl+A as a sequence
+ of Ctrl press, A press, A release, Ctrl
+ release.
+ - delete: Deletes text backwards
+ - levelSwitch: Switches OSK to a different level
diff --git a/data/cldr2json/README.md b/data/cldr2json/README.md
new file mode 100644
index 0000000..0eb54bc
--- /dev/null
+++ b/data/cldr2json/README.md
@@ -0,0 +1,40 @@
+cldr2json
+=========
+
+This script converts Unicode CLDR android keyboard layouts to JSON usable by
+GNOME Shell.
+
+CLDR keyboard layouts can be found at
+<http://www.unicode.org/Public/cldr/latest/keyboards.zip>
+
+
+Usage
+=====
+
+ ./cldr2json <input file or directory> <output directory>
+
+example:
+
+ ./cldr2json cldr/keyboards/android/ json_layouts/
+
+
+Keyboard layout mapping
+=======================
+
+Unicode CLDR layout identifiers are language codes, while XKB layout
+identifiers are... something else. The mapping between the two currently uses
+heuristic based on the layout descriptions, in this order:
+
+- if the CLDR layout description matches an XKB layout description, chose its
+ XKB identifier
+- if one word of the CLDR layout description matches an XKB layout
+ description, chose its XKB identifier
+- if the CLDR layout description matches one word of an XKB layout description,
+ chose its XKB identifier
+
+That doesn't always work. For instance it fails for "en" language, that should
+match "us" XKB identifier. For such cases, there is a mapping in
+LOCALE_TO_XKB_OVERRIDES at the top of the script. If you discover a weird
+mapping of if you get a "failed to find XKB mapping for <locale>" warning then
+please consider adding an override there.
+
diff --git a/data/cldr2json/cldr2json.py b/data/cldr2json/cldr2json.py
new file mode 100755
index 0000000..e5eb3cb
--- /dev/null
+++ b/data/cldr2json/cldr2json.py
@@ -0,0 +1,212 @@
+#!/usr/bin/python3
+#
+# Copyright 2015 Daiki Ueno <dueno@src.gnome.org>
+# 2016 Parag Nemade <pnemade@redhat.com>
+# 2017 Alan <alan@boum.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see
+# <http://www.gnu.org/licenses/>.
+
+import glob
+import json
+import locale
+import logging
+import os
+import re
+import sys
+import xml.etree.ElementTree
+
+import gi
+gi.require_version('GnomeDesktop', '3.0') # NOQA: E402
+from gi.repository import GnomeDesktop
+
+ESCAPE_PATTERN = re.compile(r'\\u\{([0-9A-Fa-f]+?)\}')
+ISO_PATTERN = re.compile(r'[A-E]([0-9]+)')
+
+LOCALE_TO_XKB_OVERRIDES = {
+ 'af': 'za',
+ 'en': 'us',
+ 'en-GB': 'uk',
+ 'es-US': 'latam',
+ 'fr-CA': 'ca',
+ 'hi': 'in+bolnagri',
+ 'ky': 'kg',
+ 'nl-BE': 'be',
+ 'zu': None
+}
+
+
+def parse_single_key(value):
+ def unescape(m):
+ return chr(int(m.group(1), 16))
+ value = ESCAPE_PATTERN.sub(unescape, value)
+ return value
+
+
+def parse_rows(keymap):
+ unsorted_rows = {}
+ for _map in keymap.iter('map'):
+ value = _map.get('to')
+ key = [parse_single_key(value)]
+ iso = _map.get('iso')
+ if not ISO_PATTERN.match(iso):
+ sys.stderr.write('invalid ISO key name: %s\n' % iso)
+ continue
+ if not iso[0] in unsorted_rows:
+ unsorted_rows[iso[0]] = []
+ unsorted_rows[iso[0]].append((int(iso[1:]), key))
+ # add subkeys
+ longPress = _map.get('longPress')
+ if longPress:
+ for value in longPress.split(' '):
+ subkey = parse_single_key(value)
+ key.append(subkey)
+
+ rows = []
+ for k, v in sorted(list(unsorted_rows.items()),
+ key=lambda x: x[0],
+ reverse=True):
+ row = []
+ for key in sorted(v, key=lambda x: x):
+ row.append({ 'strings': key[1] })
+ rows.append(row)
+
+ return rows
+
+
+def convert_xml(tree):
+ root = {}
+ for xml_keyboard in tree.iter("keyboard"):
+ locale_full = xml_keyboard.get("locale")
+ locale, sep, end = locale_full.partition("-t-")
+ root["locale"] = locale
+ for xml_name in tree.iter("name"):
+ name = xml_name.get("value")
+ root["name"] = name
+ root["levels"] = []
+ # parse levels
+ for index, keymap in enumerate(tree.iter('keyMap')):
+ # FIXME: heuristics here
+ modifiers = keymap.get('modifiers')
+ if not modifiers:
+ mode = 'default'
+ modifiers = ''
+ elif 'shift' in modifiers.split(' '):
+ mode = 'latched'
+ modifiers = 'shift'
+ else:
+ mode = 'locked'
+ level = {}
+ level["level"] = modifiers
+ level["mode"] = mode
+ level["rows"] = parse_rows(keymap)
+ root["levels"].append(level)
+ return root
+
+
+def locale_to_xkb(locale, name):
+ if locale in sorted(LOCALE_TO_XKB_OVERRIDES.keys()):
+ xkb = LOCALE_TO_XKB_OVERRIDES[locale]
+ logging.debug("override for %s → %s",
+ locale, xkb)
+ if xkb:
+ return xkb
+ else:
+ raise KeyError("layout %s explicitly disabled in overrides"
+ % locale)
+ xkb_names = sorted(name_to_xkb.keys())
+ if name in xkb_names:
+ return name_to_xkb[name]
+ else:
+ logging.debug("name %s failed" % name)
+ for sub_name in name.split(' '):
+ if sub_name in xkb_names:
+ xkb = name_to_xkb[sub_name]
+ logging.debug("dumb mapping failed but match with locale word: "
+ "%s (%s) → %s (%s)",
+ locale, name, xkb, sub_name)
+ return xkb
+ else:
+ logging.debug("sub_name failed")
+ for xkb_name in xkb_names:
+ for xkb_sub_name in xkb_name.split(' '):
+ if xkb_sub_name.strip('()') == name:
+ xkb = name_to_xkb[xkb_name]
+ logging.debug("dumb mapping failed but match with xkb word: "
+ "%s (%s) → %s (%s)",
+ locale, name, xkb, xkb_name)
+ return xkb
+ raise KeyError("failed to find XKB mapping for %s" % locale)
+
+
+def convert_file(source_file, destination_path):
+ logging.info("Parsing %s", source_file)
+
+ itree = xml.etree.ElementTree.ElementTree()
+ itree.parse(source_file)
+
+ root = convert_xml(itree)
+
+ try:
+ xkb_name = locale_to_xkb(root["locale"], root["name"])
+ except KeyError as e:
+ logging.warning(e)
+ return False
+ destination_file = os.path.join(destination_path, xkb_name + ".json")
+
+ try:
+ with open(destination_file, 'x', encoding="utf-8") as dest_fd:
+ json.dump(root, dest_fd, ensure_ascii=False, indent=2, sort_keys=True)
+ except FileExistsError as e:
+ logging.info("File %s exists, not updating", destination_file)
+ return False
+
+ logging.debug("written %s", destination_file)
+
+
+def load_xkb_mappings():
+ xkb = GnomeDesktop.XkbInfo()
+ layouts = xkb.get_all_layouts()
+ name_to_xkb = {}
+
+ for layout in layouts:
+ name = xkb.get_layout_info(layout).display_name
+ name_to_xkb[name] = layout
+
+ return name_to_xkb
+
+
+locale.setlocale(locale.LC_ALL, "C")
+name_to_xkb = load_xkb_mappings()
+
+
+if __name__ == "__main__":
+ if "DEBUG" in os.environ:
+ logging.basicConfig(level=logging.DEBUG)
+
+ if len(sys.argv) < 2:
+ print("supply a CLDR keyboard file")
+ sys.exit(1)
+
+ if len(sys.argv) < 3:
+ print("supply an output directory")
+ sys.exit(1)
+
+ source = sys.argv[1]
+ destination = sys.argv[2]
+ if os.path.isfile(source):
+ convert_file(source, destination)
+ elif os.path.isdir(source):
+ for path in glob.glob(source + "/*-t-k0-android.xml"):
+ convert_file(path, destination)
diff --git a/data/cldr2json/test/__init__.py b/data/cldr2json/test/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/data/cldr2json/test/__init__.py
diff --git a/data/cldr2json/test/data/fr-t-k0-android.xml b/data/cldr2json/test/data/fr-t-k0-android.xml
new file mode 100644
index 0000000..1e76b81
--- /dev/null
+++ b/data/cldr2json/test/data/fr-t-k0-android.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE keyboard SYSTEM "../dtd/ldmlKeyboard.dtd">
+<keyboard locale="fr-t-k0-android">
+ <version platform="4.4" number="$Revision: 11914 $"/>
+ <names>
+ <name value="French"/>
+ </names>
+ <keyMap>
+ <map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
+ <map iso="D02" to="z"/> <!-- W -->
+ <map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
+ <map iso="D04" to="r"/>
+ <map iso="D05" to="t"/>
+ <map iso="D06" to="y" longPress="% ÿ"/>
+ <map iso="D07" to="u" longPress="ù û % ü ú ū"/>
+ <map iso="D08" to="i" longPress="î % ï ì í į ī"/>
+ <map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
+ <map iso="D10" to="p"/>
+ <map iso="C01" to="q"/> <!-- A -->
+ <map iso="C02" to="s"/>
+ <map iso="C03" to="d"/>
+ <map iso="C04" to="f"/>
+ <map iso="C05" to="g"/>
+ <map iso="C06" to="h"/>
+ <map iso="C07" to="j"/>
+ <map iso="C08" to="k"/>
+ <map iso="C09" to="l"/>
+ <map iso="C10" to="m"/> <!-- ; -->
+ <map iso="B01" to="w"/> <!-- Z -->
+ <map iso="B02" to="x"/>
+ <map iso="B03" to="c" longPress="ç ć č"/>
+ <map iso="B04" to="v"/>
+ <map iso="B05" to="b"/>
+ <map iso="B06" to="n"/>
+ <map iso="B07" to="&apos;" longPress="‘ ’ ‹ ›"/> <!-- M -->
+ <map iso="A02" to=","/> <!-- (key to left of space) -->
+ <map iso="A03" to=" "/> <!-- space -->
+ <map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
+ </keyMap>
+ <keyMap modifiers="shift caps">
+ <map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
+ <map iso="D02" to="Z"/> <!-- W -->
+ <map iso="D03" to="E" longPress="É È Ê Ë % Ę Ė Ē"/>
+ <map iso="D04" to="R"/>
+ <map iso="D05" to="T"/>
+ <map iso="D06" to="Y" longPress="% Ÿ"/>
+ <map iso="D07" to="U" longPress="Ù Û % Ü Ú Ū"/>
+ <map iso="D08" to="I" longPress="Î % Ï Ì Í Į Ī"/>
+ <map iso="D09" to="O" longPress="Ô Œ % Ö Ò Ó Õ Ø Ō º"/>
+ <map iso="D10" to="P"/>
+ <map iso="C01" to="Q"/> <!-- A -->
+ <map iso="C02" to="S"/>
+ <map iso="C03" to="D"/>
+ <map iso="C04" to="F"/>
+ <map iso="C05" to="G"/>
+ <map iso="C06" to="H"/>
+ <map iso="C07" to="J"/>
+ <map iso="C08" to="K"/>
+ <map iso="C09" to="L"/>
+ <map iso="C10" to="M"/> <!-- ; -->
+ <map iso="B01" to="W"/> <!-- Z -->
+ <map iso="B02" to="X"/>
+ <map iso="B03" to="C" longPress="Ç Ć Č"/>
+ <map iso="B04" to="V"/>
+ <map iso="B05" to="B"/>
+ <map iso="B06" to="N"/>
+ <map iso="B07" to="&apos;" longPress="‘ ’ ‹ ›"/> <!-- M -->
+ <map iso="A02" to=","/> <!-- (key to left of space) -->
+ <map iso="A03" to=" "/> <!-- space -->
+ <map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
+ </keyMap>
+ <keyMap modifiers="opt">
+ <map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
+ <map iso="D02" to="2" longPress="² ⅔"/> <!-- W base=z -->
+ <map iso="D03" to="3" longPress="³ ¾ ⅜"/> <!-- E -->
+ <map iso="D04" to="4" longPress="⁴"/> <!-- R -->
+ <map iso="D05" to="5" longPress="⅝"/> <!-- T -->
+ <map iso="D06" to="6"/> <!-- Y -->
+ <map iso="D07" to="7" longPress="⅞"/> <!-- U -->
+ <map iso="D08" to="8"/> <!-- I -->
+ <map iso="D09" to="9"/> <!-- O -->
+ <map iso="D10" to="0" longPress="ⁿ ∅"/> <!-- P -->
+ <map iso="C01" to="@"/> <!-- A base=q -->
+ <map iso="C02" to="#"/> <!-- S -->
+ <map iso="C03" to="€" longPress="¢ £ $ ¥ ₱"/> <!-- D -->
+ <map iso="C04" to="%" longPress="‰"/> <!-- F -->
+ <map iso="C05" to="&amp;"/> <!-- G -->
+ <map iso="C06" to="-" longPress="_ – — ·"/> <!-- H -->
+ <map iso="C07" to="+" longPress="±"/> <!-- J -->
+ <map iso="C08" to="(" longPress="&lt; { ["/> <!-- K -->
+ <map iso="C09" to=")" longPress="&gt; } ]"/> <!-- L -->
+ <map iso="B01" to="*" longPress="† ‡ ★"/> <!-- Z base=w -->
+ <map iso="B02" to="\u{22}" longPress="“ ” « »"/> <!-- X to= " -->
+ <map iso="B03" to="&apos;" longPress="‘ ’ ‹ ›"/> <!-- C -->
+ <map iso="B04" to=":"/> <!-- V -->
+ <map iso="B05" to=";"/> <!-- B -->
+ <map iso="B06" to="!" longPress="¡"/> <!-- N -->
+ <map iso="B07" to="?" longPress="¿"/> <!-- M base=' -->
+ <map iso="A00" to="_"/> <!-- (3 keys to left of space) -->
+ <map iso="A01" to="/"/> <!-- (2 keys to left of space) -->
+ <map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
+ <map iso="A03" to=","/> <!-- space -->
+ <map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
+ </keyMap>
+ <keyMap modifiers="opt+shift">
+ <map iso="D01" to="~"/> <!-- Q base=a -->
+ <map iso="D02" to="`"/> <!-- W base=z -->
+ <map iso="D03" to="|"/> <!-- E -->
+ <map iso="D04" to="•" longPress="♪ ♥ ♠ ♦ ♣"/> <!-- R -->
+ <map iso="D05" to="√"/> <!-- T -->
+ <map iso="D06" to="Π" longPress="π"/> <!-- Y -->
+ <map iso="D07" to="÷"/> <!-- U -->
+ <map iso="D08" to="×"/> <!-- I -->
+ <map iso="D09" to="¶" longPress="§"/> <!-- O -->
+ <map iso="D10" to="∆"/> <!-- P -->
+ <map iso="C01" to="£"/> <!-- A base=q -->
+ <map iso="C02" to="¥"/> <!-- S -->
+ <map iso="C03" to="$" longPress="¢"/> <!-- D -->
+ <map iso="C04" to="¢"/> <!-- F -->
+ <map iso="C05" to="^" longPress="↑ ↓ ← →"/> <!-- G -->
+ <map iso="C06" to="°" longPress="′ ″"/> <!-- H -->
+ <map iso="C07" to="=" longPress="≠ ≈ ∞"/> <!-- J -->
+ <map iso="C08" to="{"/> <!-- K -->
+ <map iso="C09" to="}"/> <!-- L -->
+ <map iso="B01" to="\"/> <!-- Z base=w -->
+ <map iso="B02" to="©"/> <!-- X -->
+ <map iso="B03" to="®"/> <!-- C -->
+ <map iso="B04" to="™"/> <!-- V -->
+ <map iso="B05" to="℅"/> <!-- B -->
+ <map iso="B06" to="["/> <!-- N -->
+ <map iso="B07" to="]"/> <!-- M base=' -->
+ <map iso="A00" to="&lt;" longPress="‹ ≤ «"/> <!-- (3 keys to left of space) -->
+ <map iso="A01" to="&gt;" longPress="› ≥ »"/> <!-- (2 keys to left of space) -->
+ <map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
+ <map iso="A03" to=","/> <!-- space -->
+ <map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
+ </keyMap>
+</keyboard>
diff --git a/data/cldr2json/test/data/fr.json b/data/cldr2json/test/data/fr.json
new file mode 100644
index 0000000..3a8949f
--- /dev/null
+++ b/data/cldr2json/test/data/fr.json
@@ -0,0 +1,614 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ [
+ "a",
+ "à",
+ "â",
+ "%",
+ "æ",
+ "á",
+ "ä",
+ "ã",
+ "å",
+ "ā",
+ "ª"
+ ],
+ [
+ "z"
+ ],
+ [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "%",
+ "ę",
+ "ė",
+ "ē"
+ ],
+ [
+ "r"
+ ],
+ [
+ "t"
+ ],
+ [
+ "y",
+ "%",
+ "ÿ"
+ ],
+ [
+ "u",
+ "ù",
+ "û",
+ "%",
+ "ü",
+ "ú",
+ "ū"
+ ],
+ [
+ "i",
+ "î",
+ "%",
+ "ï",
+ "ì",
+ "í",
+ "į",
+ "ī"
+ ],
+ [
+ "o",
+ "ô",
+ "œ",
+ "%",
+ "ö",
+ "ò",
+ "ó",
+ "õ",
+ "ø",
+ "ō",
+ "º"
+ ],
+ [
+ "p"
+ ]
+ ],
+ [
+ [
+ "q"
+ ],
+ [
+ "s"
+ ],
+ [
+ "d"
+ ],
+ [
+ "f"
+ ],
+ [
+ "g"
+ ],
+ [
+ "h"
+ ],
+ [
+ "j"
+ ],
+ [
+ "k"
+ ],
+ [
+ "l"
+ ],
+ [
+ "m"
+ ]
+ ],
+ [
+ [
+ "w"
+ ],
+ [
+ "x"
+ ],
+ [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ],
+ [
+ "v"
+ ],
+ [
+ "b"
+ ],
+ [
+ "n"
+ ],
+ [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ ],
+ [
+ [
+ ","
+ ],
+ [
+ " "
+ ],
+ [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ [
+ "A",
+ "À",
+ "Â",
+ "%",
+ "Æ",
+ "Á",
+ "Ä",
+ "Ã",
+ "Å",
+ "Ā",
+ "ª"
+ ],
+ [
+ "Z"
+ ],
+ [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "%",
+ "Ę",
+ "Ė",
+ "Ē"
+ ],
+ [
+ "R"
+ ],
+ [
+ "T"
+ ],
+ [
+ "Y",
+ "%",
+ "Ÿ"
+ ],
+ [
+ "U",
+ "Ù",
+ "Û",
+ "%",
+ "Ü",
+ "Ú",
+ "Ū"
+ ],
+ [
+ "I",
+ "Î",
+ "%",
+ "Ï",
+ "Ì",
+ "Í",
+ "Į",
+ "Ī"
+ ],
+ [
+ "O",
+ "Ô",
+ "Œ",
+ "%",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Ø",
+ "Ō",
+ "º"
+ ],
+ [
+ "P"
+ ]
+ ],
+ [
+ [
+ "Q"
+ ],
+ [
+ "S"
+ ],
+ [
+ "D"
+ ],
+ [
+ "F"
+ ],
+ [
+ "G"
+ ],
+ [
+ "H"
+ ],
+ [
+ "J"
+ ],
+ [
+ "K"
+ ],
+ [
+ "L"
+ ],
+ [
+ "M"
+ ]
+ ],
+ [
+ [
+ "W"
+ ],
+ [
+ "X"
+ ],
+ [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ],
+ [
+ "V"
+ ],
+ [
+ "B"
+ ],
+ [
+ "N"
+ ],
+ [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ ],
+ [
+ [
+ ","
+ ],
+ [
+ " "
+ ],
+ [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ],
+ [
+ "2",
+ "²",
+ "⅔"
+ ],
+ [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ],
+ [
+ "4",
+ "⁴"
+ ],
+ [
+ "5",
+ "⅝"
+ ],
+ [
+ "6"
+ ],
+ [
+ "7",
+ "⅞"
+ ],
+ [
+ "8"
+ ],
+ [
+ "9"
+ ],
+ [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ ],
+ [
+ [
+ "@"
+ ],
+ [
+ "#"
+ ],
+ [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ],
+ [
+ "%",
+ "‰"
+ ],
+ [
+ "&"
+ ],
+ [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ],
+ [
+ "+",
+ "±"
+ ],
+ [
+ "(",
+ "<",
+ "{",
+ "["
+ ],
+ [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ ],
+ [
+ [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ],
+ [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ],
+ [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ],
+ [
+ ":"
+ ],
+ [
+ ";"
+ ],
+ [
+ "!",
+ "¡"
+ ],
+ [
+ "?",
+ "¿"
+ ]
+ ],
+ [
+ [
+ "_"
+ ],
+ [
+ "/"
+ ],
+ [
+ " "
+ ],
+ [
+ ","
+ ],
+ [
+ ".",
+ "…"
+ ]
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ [
+ "~"
+ ],
+ [
+ "`"
+ ],
+ [
+ "|"
+ ],
+ [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ],
+ [
+ "√"
+ ],
+ [
+ "Π",
+ "π"
+ ],
+ [
+ "÷"
+ ],
+ [
+ "×"
+ ],
+ [
+ "¶",
+ "§"
+ ],
+ [
+ "∆"
+ ]
+ ],
+ [
+ [
+ "£"
+ ],
+ [
+ "¥"
+ ],
+ [
+ "$",
+ "¢"
+ ],
+ [
+ "¢"
+ ],
+ [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ],
+ [
+ "°",
+ "′",
+ "″"
+ ],
+ [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ],
+ [
+ "{"
+ ],
+ [
+ "}"
+ ]
+ ],
+ [
+ [
+ "\\"
+ ],
+ [
+ "©"
+ ],
+ [
+ "®"
+ ],
+ [
+ "™"
+ ],
+ [
+ "℅"
+ ],
+ [
+ "["
+ ],
+ [
+ "]"
+ ]
+ ],
+ [
+ [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ],
+ [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ],
+ [
+ " "
+ ],
+ [
+ ","
+ ],
+ [
+ ".",
+ "…"
+ ]
+ ]
+ ]
+ }
+ ],
+ "locale": "fr",
+ "name": "French"
+}
diff --git a/data/cldr2json/test/test_cldr2json.py b/data/cldr2json/test/test_cldr2json.py
new file mode 100755
index 0000000..78a6aa0
--- /dev/null
+++ b/data/cldr2json/test/test_cldr2json.py
@@ -0,0 +1,212 @@
+#!/usr/bin/python3
+
+import json
+import tempfile
+import unittest
+import xml.etree.ElementTree
+
+import cldr2json
+
+
+class TestParseSingleKey(unittest.TestCase):
+ def test_ascii(self):
+ self.assertEqual(cldr2json.parse_single_key("a"), "a")
+
+ def test_nonascii(self):
+ self.assertEqual(cldr2json.parse_single_key("Æ"), "Æ")
+
+ def test_twochars(self):
+ self.assertEqual(cldr2json.parse_single_key("ԵՒ"), "ԵՒ")
+
+ def test_decode(self):
+ self.assertEqual(cldr2json.parse_single_key("\\u{200D}"), "\u200d")
+
+ def test_decode_threechars(self):
+ self.assertEqual(cldr2json.parse_single_key("ज\\u{94D}ञ"), "ज\u094Dञ")
+
+
+class TestParseRow(unittest.TestCase):
+ def test_parse_row(self):
+ xml_string = """
+ <keyMap>
+ <map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
+ <map iso="D02" to="z"/> <!-- W -->
+ <map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
+ <map iso="D04" to="r"/>
+ <map iso="D05" to="t"/>
+ <map iso="D06" to="y" longPress="% ÿ"/>
+ <map iso="D07" to="u" longPress="ù û % ü ú ū"/>
+ <map iso="D08" to="i" longPress="î % ï ì í į ī"/>
+ <map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
+ <map iso="D10" to="p"/>
+ <map iso="C01" to="q"/> <!-- A -->
+ <map iso="C02" to="s"/>
+ <map iso="C03" to="d"/>
+ <map iso="C04" to="f"/>
+ <map iso="C05" to="g"/>
+ <map iso="C06" to="h"/>
+ <map iso="C07" to="j"/>
+ <map iso="C08" to="k"/>
+ <map iso="C09" to="l"/>
+ <map iso="C10" to="m"/> <!-- ; -->
+ <map iso="B01" to="w"/> <!-- Z -->
+ <map iso="B02" to="x"/>
+ <map iso="B03" to="c" longPress="ç ć č"/>
+ <map iso="B04" to="v"/>
+ <map iso="B05" to="b"/>
+ <map iso="B06" to="n"/>
+ <map iso="B07" to="&apos;" longPress="‘ ’ ‹ ›"/> <!-- M -->
+ <map iso="A02" to=","/> <!-- (key to left of space) -->
+ <map iso="A03" to=" "/> <!-- space -->
+ <map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
+ </keyMap>
+ """
+ xml_tree = xml.etree.ElementTree.XML(xml_string)
+ json = [[
+ ['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
+ ['z'],
+ ['e', 'é', 'è', 'ê', 'ë', '%', 'ę', 'ė', 'ē'],
+ ['r'],
+ ['t'],
+ ['y', '%', 'ÿ'],
+ ['u', 'ù', 'û', '%', 'ü', 'ú', 'ū'],
+ ['i', 'î', '%', 'ï', 'ì', 'í', 'į', 'ī'],
+ ['o', 'ô', 'œ', '%', 'ö', 'ò', 'ó', 'õ', 'ø', 'ō', 'º'],
+ ['p']
+ ], [
+ ['q'],
+ ['s'],
+ ['d'],
+ ['f'],
+ ['g'],
+ ['h'],
+ ['j'],
+ ['k'],
+ ['l'],
+ ['m']
+ ], [
+ ['w'],
+ ['x'],
+ ['c', 'ç', 'ć', 'č'],
+ ['v'],
+ ['b'],
+ ['n'],
+ ["'", '‘', '’', '‹', '›']
+ ], [
+ [','],
+ [' '],
+ ['.', '#', '!', ',', '?', '-', ':', "'", '@']
+ ]]
+ self.assertEqual(cldr2json.parse_rows(xml_tree), json)
+
+
+class TestConvertXml(unittest.TestCase):
+ def test_convert_xml(self):
+ xml_string = """<?xml version="1.0" encoding="UTF-8" ?>
+ <!DOCTYPE keyboard SYSTEM "../dtd/ldmlKeyboard.dtd">
+ <keyboard locale="fr-t-k0-android">
+ <version platform="4.4" number="$Revision: 11914 $"/>
+ <names>
+ <name value="French"/>
+ </names>
+ <keyMap>
+ <map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
+ </keyMap>
+ <keyMap modifiers="shift caps">
+ <map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
+ </keyMap>
+ <keyMap modifiers="opt">
+ <map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
+ </keyMap>
+ <keyMap modifiers="opt+shift">
+ <map iso="D01" to="~"/> <!-- Q base=a -->
+ </keyMap>
+ </keyboard>
+ """
+ xml_tree = xml.etree.ElementTree.XML(xml_string)
+ json = {
+ "locale": "fr",
+ "name": "French",
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ ['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ ['A', 'À', 'Â', '%', 'Æ', 'Á', 'Ä', 'Ã', 'Å', 'Ā', 'ª'],
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ ["1", "¹", "½", "⅓", "¼", "⅛"],
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ ["~"],
+ ]
+ ]
+ }
+ ]
+ }
+ self.assertEqual(cldr2json.convert_xml(xml_tree), json)
+
+
+class TestConvertFile(unittest.TestCase):
+ def test_fr(self):
+ outdir = tempfile.mkdtemp()
+ cldr2json.convert_file("test/data/fr-t-k0-android.xml", outdir)
+ with open("test/data/fr.json", encoding="utf-8") as expected_json_fd:
+ expected_json = json.load(expected_json_fd)
+ with open(outdir + "/fr.json", encoding="utf-8") as actual_json_fd:
+ actual_json = json.load(actual_json_fd)
+ self.assertEqual(expected_json, actual_json)
+
+
+class TestLocaleToXKB(unittest.TestCase):
+ def test_simple(self):
+ self.assertEqual(cldr2json.locale_to_xkb("fr", "French"),
+ "fr")
+
+ def test_fallback(self):
+ self.assertEqual(cldr2json.locale_to_xkb("nb", "Norwegian Bokmål"),
+ "no")
+
+ def test_fallback2(self):
+ self.assertEqual(cldr2json.locale_to_xkb("km", "Khmer"),
+ "kh")
+
+ def test_override(self):
+ self.assertEqual(cldr2json.locale_to_xkb("en-GB",
+ "English Great Britain"),
+ "uk")
+
+
+class LoadXKBMapplings(unittest.TestCase):
+ def test_dictionnary(self):
+ self.assertIsInstance(cldr2json.load_xkb_mappings(), dict)
+
+ def test_mapping(self):
+ mapping = cldr2json.load_xkb_mappings()
+ self.assertEqual(mapping["French"], "fr")
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/data/dbus-interfaces/meson.build b/data/dbus-interfaces/meson.build
new file mode 100644
index 0000000..c96bbbb
--- /dev/null
+++ b/data/dbus-interfaces/meson.build
@@ -0,0 +1,10 @@
+dbus_interfaces = [
+ 'org.gnome.Shell.Extensions.xml',
+ 'org.gnome.Shell.Introspect.xml',
+ 'org.gnome.Shell.PadOsd.xml',
+ 'org.gnome.Shell.Screencast.xml',
+ 'org.gnome.Shell.Screenshot.xml',
+ 'org.gnome.ShellSearchProvider.xml',
+ 'org.gnome.ShellSearchProvider2.xml'
+]
+install_data(dbus_interfaces, install_dir: ifacedir)
diff --git a/data/dbus-interfaces/net.hadess.PowerProfiles.xml b/data/dbus-interfaces/net.hadess.PowerProfiles.xml
new file mode 100644
index 0000000..fce04a8
--- /dev/null
+++ b/data/dbus-interfaces/net.hadess.PowerProfiles.xml
@@ -0,0 +1,76 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<node>
+
+ <!--
+ net.hadess.PowerProfiles:
+ @short_description: Power Profiles daemon
+
+ The power-profiles-daemon API is meant to be used by parts of the OS or
+ desktop environment to switch system power profiles based on user choice,
+ or user intent.
+
+ OS components would typically use the "Profiles" property to construct
+ their UI (2 or 3 profiles available), and monitor the "ActiveProfile"
+ and the "PerformanceInhibited" properties to update that UI. The UI
+ would try to set the "ActiveProfile" property if the user selected
+ a different one.
+
+ Note that the reason why the project exists and how it is different from
+ existing projects is explained <ulink href=" https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/blob/master/README.md">
+ in the project's README file</ulink>.
+
+ The object path will be "/net/hadess/PowerProfiles".
+ -->
+ <interface name="net.hadess.PowerProfiles">
+ <!--
+ ActiveProfile:
+
+ The type of the currently active profile. It might change automatically
+ if the "performance" profile was selected but it got inhibited, in which
+ case the "PerformanceInhibited" property will reflect the reason.
+ -->
+ <property name="ActiveProfile" type="s" access="readwrite"/>
+
+ <!--
+ PerformanceInhibited:
+
+ This will be set if the performance power profile is unavailable, with
+ the value being used to identify the reason for unavailability. As new
+ reasons can be added, it is recommended that front-ends show a generic
+ reason if they do not recognise the value. Possible values are:
+ - "lap-detected" (the computer is sitting on the user's lap)
+ - "high-operating-temperature" (the computer is close to overheating)
+ - "" (the empty string, if not inhibited)
+ -->
+ <property name="PerformanceInhibited" type="s" access="read"/>
+
+ <!--
+ Profiles:
+
+ An array of key-pair values representing each profile. The key named
+ "Driver" (s) identifies the power-profiles-daemon backend code used to
+ implement the profile.
+
+ The key named "Profile" (s) will be one of:
+ - "power-saver" (battery saving profile)
+ - "balanced" (the default profile)
+ - "performance" (a profile that does not care about noise or battery consumption)
+
+ Only one of each type of profile will be listed, with the daemon choosing the
+ more appropriate "driver" for each profile type.
+ -->
+ <property name="Profiles" type="aa{sv}" access="read"/>
+
+ <!--
+ Actions:
+
+ An array of strings listing each one of the "actions" implemented in
+ the running daemon. This is used by API users to figure out whether
+ particular functionality is available in a version of the daemon.
+ -->
+ <property name="Actions" type="as" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/net.hadess.SensorProxy.xml b/data/dbus-interfaces/net.hadess.SensorProxy.xml
new file mode 100644
index 0000000..2bf8ffa
--- /dev/null
+++ b/data/dbus-interfaces/net.hadess.SensorProxy.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="net.hadess.SensorProxy">
+ <property name="HasAccelerometer" type="b" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/net.hadess.SwitcherooControl.xml b/data/dbus-interfaces/net.hadess.SwitcherooControl.xml
new file mode 100644
index 0000000..e52bc1a
--- /dev/null
+++ b/data/dbus-interfaces/net.hadess.SwitcherooControl.xml
@@ -0,0 +1,46 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<node>
+
+ <!--
+ net.hadess.SwitcherooControl:
+ @short_description: D-Bus proxy to access dual-GPU controls.
+
+ After checking the availability of two switchable GPUs in the machine,
+ check the value of net.hadess.SwitcherooControl.HasDualGpu to see
+ if running applications on the discrete GPU should be offered.
+
+ The object path will be "/net/hadess/SwitcherooControl".
+ -->
+ <interface name="net.hadess.SwitcherooControl">
+ <!--
+ HasDualGpu:
+
+ Whether two switchable GPUs are present on the system. This property
+ has been obsoleted in favour of the "NumGPUs" property.
+ -->
+ <property name="HasDualGpu" type="b" access="read"/>
+
+ <!--
+ NumGPUs:
+
+ The number of GPUs available on the system. Note that while having no
+ GPUs is unlikely, consumers of this API should probably not throw errors
+ if that were the case.
+ -->
+ <property name="NumGPUs" type="u" access="read"/>
+
+ <!--
+ GPUs:
+
+ An array of key-pair values representing each GPU. The key named "Name" (s)
+ will contain a user-facing name for the GPU, the "Environment" (as) key will
+ contain an array of even number of strings, each being an environment
+ variable to set to use the GPU, followed by its value, the "Default" (b) key
+ will tag the default (usually integrated) GPU.
+ -->
+ <property name="GPUs" type="aa{sv}" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/net.reactivated.Fprint.Device.xml b/data/dbus-interfaces/net.reactivated.Fprint.Device.xml
new file mode 100644
index 0000000..b3d143c
--- /dev/null
+++ b/data/dbus-interfaces/net.reactivated.Fprint.Device.xml
@@ -0,0 +1,78 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+
+<node>
+ <interface name="net.reactivated.Fprint.Device">
+ <method name="ListEnrolledFingers">
+ <arg type="s" name="username" direction="in">
+ </arg>
+ <arg type="as" name="enrolled_fingers" direction="out">
+ </arg>
+ </method>
+
+ <method name="DeleteEnrolledFingers">
+ <arg type="s" name="username" direction="in">
+ </arg>
+ </method>
+
+ <method name="DeleteEnrolledFingers2">
+ </method>
+
+ <method name="Claim">
+ <arg type="s" name="username" direction="in">
+ </arg>
+ </method>
+
+ <method name="Release">
+ </method>
+
+ <method name="VerifyStart">
+ <arg type="s" name="finger_name" direction="in">
+ </arg>
+ </method>
+
+ <method name="VerifyStop">
+ </method>
+
+ <signal name="VerifyFingerSelected">
+ <arg type="s" name="finger_name">
+ </arg>
+ </signal>
+
+ <signal name="VerifyStatus">
+ <arg type="s" name="result">
+ </arg>
+
+ <arg type="b" name="done">
+ </arg>
+
+ </signal>
+
+ <method name="EnrollStart">
+ <arg type="s" name="finger_name" direction="in">
+ </arg>
+ </method>
+
+ <method name="EnrollStop">
+ </method>
+
+ <signal name="EnrollStatus">
+ <arg type="s" name="result">
+ </arg>
+
+ <arg type="b" name="done">
+ </arg>
+ </signal>
+
+ <property name="name" type="s" access="read">
+ </property>
+
+ <property name="num-enroll-stages" type="i" access="read">
+ </property>
+
+ <property name="scan-type" type="s" access="read">
+ </property>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/net.reactivated.Fprint.Manager.xml b/data/dbus-interfaces/net.reactivated.Fprint.Manager.xml
new file mode 100644
index 0000000..21e03f2
--- /dev/null
+++ b/data/dbus-interfaces/net.reactivated.Fprint.Manager.xml
@@ -0,0 +1,18 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="net.reactivated.Fprint.Manager">
+
+ <method name="GetDevices">
+ <arg type="ao" name="devices" direction="out">
+ </arg>
+ </method>
+
+ <method name="GetDefaultDevice">
+ <arg type="o" name="device" direction="out">
+ </arg>
+ </method>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.Gtk.MountOperationHandler.xml b/data/dbus-interfaces/org.Gtk.MountOperationHandler.xml
new file mode 100644
index 0000000..8b03a2e
--- /dev/null
+++ b/data/dbus-interfaces/org.Gtk.MountOperationHandler.xml
@@ -0,0 +1,32 @@
+<node>
+ <interface name="org.Gtk.MountOperationHandler">
+ <method name="AskPassword">
+ <arg type="s" direction="in" name="object_id"/>
+ <arg type="s" direction="in" name="message"/>
+ <arg type="s" direction="in" name="icon_name"/>
+ <arg type="s" direction="in" name="default_user"/>
+ <arg type="s" direction="in" name="default_domain"/>
+ <arg type="u" direction="in" name="flags"/>
+ <arg type="u" direction="out" name="response"/>
+ <arg type="a{sv}" direction="out" name="response_details"/>
+ </method>
+ <method name="AskQuestion">
+ <arg type="s" direction="in" name="object_id"/>
+ <arg type="s" direction="in" name="message"/>
+ <arg type="s" direction="in" name="icon_name"/>
+ <arg type="as" direction="in" name="choices"/>
+ <arg type="u" direction="out" name="response"/>
+ <arg type="a{sv}" direction="out" name="response_details"/>
+ </method>
+ <method name="ShowProcesses">
+ <arg type="s" direction="in" name="object_id"/>
+ <arg type="s" direction="in" name="message"/>
+ <arg type="s" direction="in" name="icon_name"/>
+ <arg type="ai" direction="in" name="application_pids"/>
+ <arg type="as" direction="in" name="choices"/>
+ <arg type="u" direction="out" name="response"/>
+ <arg type="a{sv}" direction="out" name="response_details"/>
+ </method>
+ <method name="Close"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.Application.xml b/data/dbus-interfaces/org.freedesktop.Application.xml
new file mode 100644
index 0000000..55be7d7
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.Application.xml
@@ -0,0 +1,12 @@
+<node>
+ <interface name="org.freedesktop.Application">
+ <method name="ActivateAction">
+ <arg type="s" direction="in"/>
+ <arg type="av" direction="in"/>
+ <arg type="a{sv}" direction="in"/>
+ </method>
+ <method name="Activate">
+ <arg type="a{sv}" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.DBus.xml b/data/dbus-interfaces/org.freedesktop.DBus.xml
new file mode 100644
index 0000000..18ff2aa
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.DBus.xml
@@ -0,0 +1,16 @@
+<node>
+ <interface name="org.freedesktop.DBus">
+ <method name="ListNames">
+ <arg type="as" direction="out" name="names"/>
+ </method>
+ <method name="GetConnectionUnixProcessID">
+ <arg type="s" direction="in"/>
+ <arg type="u" direction="out"/>
+ </method>
+ <signal name="NameOwnerChanged">
+ <arg type="s" direction="out" name="name"/>
+ <arg type="s" direction="out" name="oldOwner"/>
+ <arg type="s" direction="out" name="newOwner"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.GeoClue2.Agent.xml b/data/dbus-interfaces/org.freedesktop.GeoClue2.Agent.xml
new file mode 100644
index 0000000..2773601
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.GeoClue2.Agent.xml
@@ -0,0 +1,11 @@
+<node>
+ <interface name="org.freedesktop.GeoClue2.Agent">
+ <property name="MaxAccuracyLevel" type="u" access="read"/>
+ <method name="AuthorizeApp">
+ <arg name="desktop_id" type="s" direction="in"/>
+ <arg name="req_accuracy_level" type="u" direction="in"/>
+ <arg name="authorized" type="b" direction="out"/>
+ <arg name="allowed_accuracy_level" type="u" direction="out"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.GeoClue2.Manager.xml b/data/dbus-interfaces/org.freedesktop.GeoClue2.Manager.xml
new file mode 100644
index 0000000..28db3c6
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.GeoClue2.Manager.xml
@@ -0,0 +1,9 @@
+<node>
+ <interface name="org.freedesktop.GeoClue2.Manager">
+ <property name="InUse" type="b" access="read"/>
+ <property name="AvailableAccuracyLevel" type="u" access="read"/>
+ <method name="AddAgent">
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Cdma.xml b/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Cdma.xml
new file mode 100644
index 0000000..12a85e0
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Cdma.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.freedesktop.ModemManager.Modem.Cdma">
+ <method name="GetSignalQuality">
+ <arg type="u" direction="out"/>
+ </method>
+ <method name="GetServingSystem">
+ <arg type="(usu)" direction="out"/>
+ </method>
+ <signal name="SignalQuality">
+ <arg type="u" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Gsm.Network.xml b/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Gsm.Network.xml
new file mode 100644
index 0000000..7d8c25a
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Gsm.Network.xml
@@ -0,0 +1,19 @@
+<node>
+ <interface name="org.freedesktop.ModemManager.Modem.Gsm.Network">
+ <method name="GetRegistrationInfo">
+ <arg type="(uss)" direction="out"/>
+ </method>
+ <method name="GetSignalQuality">
+ <arg type="u" direction="out"/>
+ </method>
+ <property name="AccessTechnology" type="u" access="read"/>
+ <signal name="SignalQuality">
+ <arg type="u" direction="out"/>
+ </signal>
+ <signal name="RegistrationInfo">
+ <arg type="u" direction="out"/>
+ <arg type="s" direction="out"/>
+ <arg type="s" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
new file mode 100644
index 0000000..41e6601
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml
@@ -0,0 +1,6 @@
+<node>
+ <interface name="org.freedesktop.ModemManager1.Modem.Modem3gpp">
+ <property name="OperatorCode" type="s" access="read"/>
+ <property name="OperatorName" type="s" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.ModemCdma.xml b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.ModemCdma.xml
new file mode 100644
index 0000000..d029252
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.ModemCdma.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="org.freedesktop.ModemManager1.Modem.ModemCdma">
+ <property name="Sid" type="u" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.xml b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.xml
new file mode 100644
index 0000000..204426b
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="org.freedesktop.ModemManager1.Modem">
+ <property name="SignalQuality" type="(ub)" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.Notifications.xml b/data/dbus-interfaces/org.freedesktop.Notifications.xml
new file mode 100644
index 0000000..0ed8657
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.Notifications.xml
@@ -0,0 +1,35 @@
+<node>
+ <interface name="org.freedesktop.Notifications">
+ <method name="Notify">
+ <arg type="s" direction="in"/>
+ <arg type="u" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="as" direction="in"/>
+ <arg type="a{sv}" direction="in"/>
+ <arg type="i" direction="in"/>
+ <arg type="u" direction="out"/>
+ </method>
+ <method name="CloseNotification">
+ <arg type="u" direction="in"/>
+ </method>
+ <method name="GetCapabilities">
+ <arg type="as" direction="out"/>
+ </method>
+ <method name="GetServerInformation">
+ <arg type="s" direction="out"/>
+ <arg type="s" direction="out"/>
+ <arg type="s" direction="out"/>
+ <arg type="s" direction="out"/>
+ </method>
+ <signal name="NotificationClosed">
+ <arg type="u"/>
+ <arg type="u"/>
+ </signal>
+ <signal name="ActionInvoked">
+ <arg type="u"/>
+ <arg type="s"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.PackageKit.Offline.xml b/data/dbus-interfaces/org.freedesktop.PackageKit.Offline.xml
new file mode 100644
index 0000000..ff61166
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.PackageKit.Offline.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.freedesktop.PackageKit.Offline">
+ <property name="UpdatePrepared" type="b" access="read"/>
+ <property name="UpdateTriggered" type="b" access="read"/>
+ <property name="UpgradePrepared" type="b" access="read"/>
+ <property name="UpgradeTriggered" type="b" access="read"/>
+ <property name="PreparedUpgrade" type="a{sv}" access="read"/>
+ <method name="Trigger">
+ <arg type="s" name="action" direction="in"/>
+ </method>
+ <method name="Cancel"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.UPower.Device.xml b/data/dbus-interfaces/org.freedesktop.UPower.Device.xml
new file mode 100644
index 0000000..4882285
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.UPower.Device.xml
@@ -0,0 +1,11 @@
+<node>
+ <interface name="org.freedesktop.UPower.Device">
+ <property name="Type" type="u" access="read"/>
+ <property name="State" type="u" access="read"/>
+ <property name="Percentage" type="d" access="read"/>
+ <property name="TimeToEmpty" type="x" access="read"/>
+ <property name="TimeToFull" type="x" access="read"/>
+ <property name="IsPresent" type="b" access="read"/>
+ <property name="IconName" type="s" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.UPower.xml b/data/dbus-interfaces/org.freedesktop.UPower.xml
new file mode 100644
index 0000000..a0fba20
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.UPower.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="org.freedesktop.UPower">
+ <property name="OnBattery" type="b" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.bolt1.Device.xml b/data/dbus-interfaces/org.freedesktop.bolt1.Device.xml
new file mode 100644
index 0000000..44b40dc
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.bolt1.Device.xml
@@ -0,0 +1,18 @@
+<node>
+ <interface name="org.freedesktop.bolt1.Device">
+ <property name="Uid" type="s" access="read"></property>
+ <property name="Name" type="s" access="read"></property>
+ <property name="Vendor" type="s" access="read"></property>
+ <property name="Type" type="s" access="read"></property>
+ <property name="Status" type="s" access="read"></property>
+ <property name="Parent" type="s" access="read"></property>
+ <property name="SysfsPath" type="s" access="read"></property>
+ <property name="Stored" type="b" access="read"></property>
+ <property name="Policy" type="s" access="read"></property>
+ <property name="Key" type="s" access="read"></property>
+ <property name="Label" type="s" access="read"></property>
+ <property name="ConnectTime" type="t" access="read"></property>
+ <property name="AuthorizeTime" type="t" access="read"></property>
+ <property name="StoreTime" type="t" access="read"></property>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.bolt1.Manager.xml b/data/dbus-interfaces/org.freedesktop.bolt1.Manager.xml
new file mode 100644
index 0000000..c98a94f
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.bolt1.Manager.xml
@@ -0,0 +1,15 @@
+<node>
+ <interface name="org.freedesktop.bolt1.Manager">
+ <property name="Probing" type="b" access="read"></property>
+ <property name="AuthMode" type="s" access="readwrite"></property>
+ <method name="EnrollDevice">
+ <arg type="s" name="uid" direction="in"/>
+ <arg type="s" name="policy" direction="in"/>
+ <arg type="s" name="flags" direction="in"/>
+ <arg name="device" direction="out" type="o"/>
+ </method>
+ <signal name="DeviceAdded">
+ <arg name="device" type="o"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.Access.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.Access.xml
new file mode 100644
index 0000000..802a2c1
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.impl.portal.Access.xml
@@ -0,0 +1,15 @@
+<node>
+ <interface name="org.freedesktop.impl.portal.Access">
+ <method name="AccessDialog">
+ <arg type="o" name="handle" direction="in"/>
+ <arg type="s" name="app_id" direction="in"/>
+ <arg type="s" name="parent_window" direction="in"/>
+ <arg type="s" name="title" direction="in"/>
+ <arg type="s" name="subtitle" direction="in"/>
+ <arg type="s" name="body" direction="in"/>
+ <arg type="a{sv}" name="options" direction="in"/>
+ <arg type="u" name="response" direction="out"/>
+ <arg type="a{sv}" name="results" direction="out"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
new file mode 100644
index 0000000..55d3fc3
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
@@ -0,0 +1,31 @@
+<node>
+ <interface name="org.freedesktop.impl.portal.PermissionStore">
+ <method name="Lookup">
+ <arg name="table" type="s" direction="in"/>
+ <arg name="id" type="s" direction="in"/>
+ <arg name="permissions" type="a{sas}" direction="out"/>
+ <arg name="data" type="v" direction="out"/>
+ </method>
+ <method name="Set">
+ <arg name="table" type="s" direction="in"/>
+ <arg name="create" type="b" direction="in"/>
+ <arg name="id" type="s" direction="in"/>
+ <arg name="app_permissions" type="a{sas}" direction="in"/>
+ <arg name="data" type="v" direction="in"/>
+ </method>
+ <method name="SetPermission">
+ <arg name='table' type='s' direction='in'/>
+ <arg name='create' type='b' direction='in'/>
+ <arg name='id' type='s' direction='in'/>
+ <arg name='app' type='s' direction='in'/>
+ <arg name='permissions' type='as' direction='in'/>
+ </method>
+ <signal name="Changed">
+ <arg name="table" type="s" direction="out"/>
+ <arg name="id" type="s" direction="out"/>
+ <arg name="deleted" type="b" direction="out"/>
+ <arg name="data" type="v" direction="out"/>
+ <arg name="permissions" type="a{sas}" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.Request.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.Request.xml
new file mode 100644
index 0000000..a9d03eb
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.impl.portal.Request.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="org.freedesktop.impl.portal.Request">
+ <method name="Close"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.login1.Manager.xml b/data/dbus-interfaces/org.freedesktop.login1.Manager.xml
new file mode 100644
index 0000000..f40d498
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.login1.Manager.xml
@@ -0,0 +1,33 @@
+<node>
+ <interface name="org.freedesktop.login1.Manager">
+ <method name="Suspend">
+ <arg type="b" direction="in"/>
+ </method>
+ <method name="CanSuspend">
+ <arg type="s" direction="out"/>
+ </method>
+ <method name="Inhibit">
+ <arg type="s" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="s" direction="in"/>
+ <arg type="h" direction="out"/>
+ </method>
+ <method name="GetSession">
+ <arg type="s" direction="in"/>
+ <arg type="o" direction="out"/>
+ </method>
+ <method name="ListSessions">
+ <arg name="sessions" type="a(susso)" direction="out"/>
+ </method>
+ <method name="CanRebootToBootLoaderMenu">
+ <arg type="s" direction="out"/>
+ </method>
+ <method name="SetRebootToBootLoaderMenu">
+ <arg type="t" direction="in"/>
+ </method>
+ <signal name="PrepareForSleep">
+ <arg type="b" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.login1.Session.xml b/data/dbus-interfaces/org.freedesktop.login1.Session.xml
new file mode 100644
index 0000000..6fab817
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.login1.Session.xml
@@ -0,0 +1,15 @@
+<node>
+ <interface name="org.freedesktop.login1.Session">
+ <signal name="Lock"/>
+ <signal name="Unlock"/>
+ <property name="Active" type="b" access="read"/>
+ <property name="Class" type="s" access="read"/>
+ <property name="Id" type="s" access="read"/>
+ <property name="Remote" type="b" access="read"/>
+ <property name="Type" type="s" access="read"/>
+ <property name="State" type="s" access="read"/>
+ <method name="SetLockedHint">
+ <arg type="b" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.login1.User.xml b/data/dbus-interfaces/org.freedesktop.login1.User.xml
new file mode 100644
index 0000000..d6f10b0
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.login1.User.xml
@@ -0,0 +1,6 @@
+<node>
+ <interface name="org.freedesktop.login1.User">
+ <property name="Display" type="(so)" access="read"/>
+ <property name="Sessions" type="a(so)" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.realmd.Provider.xml b/data/dbus-interfaces/org.freedesktop.realmd.Provider.xml
new file mode 100644
index 0000000..2fdb045
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.realmd.Provider.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.freedesktop.realmd.Provider">
+ <property name="Name" type="s" access="read"/>
+ <property name="Version" type="s" access="read"/>
+ <property name="Realms" type="ao" access="read"/>
+ <method name="Discover">
+ <arg name="string" type="s" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ <arg name="relevance" type="i" direction="out"/>
+ <arg name="realm" type="ao" direction="out"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.realmd.Realm.xml b/data/dbus-interfaces/org.freedesktop.realmd.Realm.xml
new file mode 100644
index 0000000..351066d
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.realmd.Realm.xml
@@ -0,0 +1,20 @@
+<node>
+ <interface name="org.freedesktop.realmd.Realm">
+ <property name="Name" type="s" access="read"/>
+ <property name="Configured" type="s" access="read"/>
+ <property name="Details" type="a(ss)" access="read"/>
+ <property name="LoginFormats" type="as" access="read"/>
+ <property name="LoginPolicy" type="s" access="read"/>
+ <property name="PermittedLogins" type="as" access="read"/>
+ <property name="SupportedInterfaces" type="as" access="read"/>
+ <method name="ChangeLoginPolicy">
+ <arg name="login_policy" type="s" direction="in"/>
+ <arg name="permitted_add" type="as" direction="in"/>
+ <arg name="permitted_remove" type="as" direction="in"/>
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+ <method name="Deconfigure">
+ <arg name="options" type="a{sv}" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.freedesktop.realmd.Service.xml b/data/dbus-interfaces/org.freedesktop.realmd.Service.xml
new file mode 100644
index 0000000..4ffb7e7
--- /dev/null
+++ b/data/dbus-interfaces/org.freedesktop.realmd.Service.xml
@@ -0,0 +1,15 @@
+<node>
+ <interface name="org.freedesktop.realmd.Service">
+ <method name="Cancel">
+ <arg name="operation" type="s" direction="in"/>
+ </method>
+ <method name="Release"/>
+ <method name="SetLocale">
+ <arg name="locale" type="s" direction="in"/>
+ </method>
+ <signal name="Diagnostics">
+ <arg name="data" type="s"/>
+ <arg name="operation" type="s"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Mutter.ScreenCast.xml b/data/dbus-interfaces/org.gnome.Mutter.ScreenCast.xml
new file mode 100644
index 0000000..a8ff3cc
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Mutter.ScreenCast.xml
@@ -0,0 +1,191 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Mutter.ScreenCast:
+ @short_description: Screen cast interface
+
+ This API is private and not intended to be used outside of the integrated
+ system that uses libmutter. No compatibility between versions are
+ promised.
+ -->
+ <interface name="org.gnome.Mutter.ScreenCast">
+
+ <!--
+ CreateSession:
+ @properties: Properties
+ @session_path: Path to the new session object
+
+ * "remote-desktop-session-id" (s): The ID of a remote desktop session.
+ Remote desktop driven screen casts
+ are started and stopped by the remote
+ desktop session.
+ * "disable-animations" (b): Set to "true" if the screen cast application
+ would prefer animations to be globally
+ disabled, while the session is running. Default
+ is "false". Available since version 3.
+ -->
+ <method name="CreateSession">
+ <arg name="properties" type="a{sv}" direction="in" />
+ <arg name="session_path" type="o" direction="out" />
+ </method>
+
+ <!--
+ Version:
+ @short_description: API version
+ -->
+ <property name="Version" type="i" access="read" />
+
+ </interface>
+
+ <!--
+ org.gnome.Mutter.ScreenCast.Session:
+ @short_description: Screen cast session
+ -->
+ <interface name="org.gnome.Mutter.ScreenCast.Session">
+
+ <!--
+ Start:
+
+ Start the screen cast session
+ -->
+ <method name="Start" />
+
+ <!--
+ Stop:
+
+ Stop the screen cast session
+ -->
+ <method name="Stop" />
+
+ <!--
+ Closed:
+
+ The session has closed.
+ -->
+ <signal name="Closed" />
+
+ <!--
+ RecordMonitor:
+ @connector: Connector of the monitor to record
+ @properties: Properties
+ @stream_path: Path to the new stream object
+
+ Record a single monitor.
+
+ Available @properties include:
+
+ * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
+ Available since API version 2.
+ * "is-recording" (b): Whether this is a screen recording. May be
+ be used for choosing panel icon.
+ Default: false. Available since API version 4.
+
+ Available cursor mode values:
+
+ 0: hidden - cursor is not included in the stream
+ 1: embedded - cursor is included in the framebuffer
+ 2: metadata - cursor is included as metadata in the PipeWire stream
+ -->
+ <method name="RecordMonitor">
+ <arg name="connector" type="s" direction="in" />
+ <arg name="properties" type="a{sv}" direction="in" />
+ <arg name="stream_path" type="o" direction="out" />
+ </method>
+
+ <!--
+ RecordWindow:
+ @properties: Properties used determining what window to select
+ @stream_path: Path to the new stream object
+
+ Supported since API version 2.
+
+ Record a single window. The cursor will not be included.
+
+ Available @properties include:
+
+ * "window-id" (t): Id of the window to record.
+ * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see RecordMonitor).
+ * "is-recording" (b): Whether this is a screen recording. May be
+ be used for choosing panel icon.
+ Default: false. Available since API version 4.
+
+ -->
+ <method name="RecordWindow">
+ <arg name="properties" type="a{sv}" direction="in" />
+ <arg name="stream_path" type="o" direction="out" />
+ </method>
+
+ <!--
+ RecordArea:
+ @x: X position of the recorded area
+ @y: Y position of the recorded area
+ @width: width of the recorded area
+ @height: height of the recorded area
+ @properties: Properties
+ @stream_path: Path to the new stream object
+
+ Record an area of the stage. The coordinates are in stage coordinates.
+ The size of the stream does not necessarily match the size of the
+ recorded area, and will depend on DPI scale of the affected monitors.
+
+ Available @properties include:
+
+ * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
+ Available since API version 2.
+ * "is-recording" (b): Whether this is a screen recording. May be
+ be used for choosing panel icon.
+ Default: false. Available since API version 4.
+
+ Available cursor mode values:
+
+ 0: hidden - cursor is not included in the stream
+ 1: embedded - cursor is included in the framebuffer
+ 2: metadata - cursor is included as metadata in the PipeWire stream
+ -->
+ <method name="RecordArea">
+ <arg name="x" type="i" direction="in" />
+ <arg name="y" type="i" direction="in" />
+ <arg name="width" type="i" direction="in" />
+ <arg name="height" type="i" direction="in" />
+ <arg name="properties" type="a{sv}" direction="in" />
+ <arg name="stream_path" type="o" direction="out" />
+ </method>
+ </interface>
+
+ <!--
+ org.gnome.Mutter.ScreenCast.Stream:
+ @short_description: Screen cast stream
+ -->
+ <interface name="org.gnome.Mutter.ScreenCast.Stream">
+
+ <!--
+ PipeWireStreamAdded:
+ @short_description: Pipewire stream added
+
+ A signal emitted when PipeWire stream for the screen cast stream has
+ been created. The @node_id corresponds to the PipeWire stream node.
+ -->
+ <signal name="PipeWireStreamAdded">
+ <annotation name="org.gtk.GDBus.C.Name" value="pipewire-stream-added"/>
+ <arg name="node_id" type="u" direction="out" />
+ </signal>
+
+ <!--
+ Parameters:
+ @short_description: Optional stream parameters
+
+ Available parameters include:
+
+ * "position" (ii): Position of the source of the stream in the
+ compositor coordinate space.
+ * "size" (ii): Size of the source of the stream in the compositor
+ coordinate space.
+ -->
+ <property name="Parameters" type="a{sv}" access="read" />
+
+ </interface>
+
+</node>
diff --git a/data/dbus-interfaces/org.gnome.ScreenSaver.xml b/data/dbus-interfaces/org.gnome.ScreenSaver.xml
new file mode 100644
index 0000000..5a2ca98
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.ScreenSaver.xml
@@ -0,0 +1,18 @@
+<node>
+ <interface name="org.gnome.ScreenSaver">
+ <method name="Lock"/>
+ <method name="GetActive">
+ <arg type="b" direction="out" name="active"/>
+ </method>
+ <method name="SetActive">
+ <arg type="b" direction="in" name="value"/>
+ </method>
+ <method name="GetActiveTime">
+ <arg type="u" direction="out" name="value"/>
+ </method>
+ <signal name="ActiveChanged">
+ <arg name="new_value" type="b"/>
+ </signal>
+ <signal name="WakeUpScreen"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SessionManager.EndSessionDialog.xml b/data/dbus-interfaces/org.gnome.SessionManager.EndSessionDialog.xml
new file mode 100644
index 0000000..3a57aa4
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SessionManager.EndSessionDialog.xml
@@ -0,0 +1,16 @@
+<node>
+ <interface name="org.gnome.SessionManager.EndSessionDialog">
+ <method name="Open">
+ <arg type="u" direction="in"/>
+ <arg type="u" direction="in"/>
+ <arg type="u" direction="in"/>
+ <arg type="ao" direction="in"/>
+ </method>
+ <method name="Close"/>
+ <signal name="ConfirmedLogout"/>
+ <signal name="ConfirmedReboot"/>
+ <signal name="ConfirmedShutdown"/>
+ <signal name="Canceled"/>
+ <signal name="Closed"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml b/data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml
new file mode 100644
index 0000000..aa6a23b
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.gnome.SessionManager.Inhibitor">
+ <method name="GetAppId">
+ <arg type="s" direction="out"/>
+ </method>
+ <method name="GetFlags">
+ <arg type="u" direction="out"/>
+ </method>
+ <method name="GetReason">
+ <arg type="s" direction="out"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SessionManager.Presence.xml b/data/dbus-interfaces/org.gnome.SessionManager.Presence.xml
new file mode 100644
index 0000000..78bc604
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SessionManager.Presence.xml
@@ -0,0 +1,11 @@
+<node>
+ <interface name="org.gnome.SessionManager.Presence">
+ <method name="SetStatus">
+ <arg type="u" direction="in"/>
+ </method>
+ <property name="status" type="u" access="readwrite"/>
+ <signal name="StatusChanged">
+ <arg type="u" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SessionManager.xml b/data/dbus-interfaces/org.gnome.SessionManager.xml
new file mode 100644
index 0000000..c81c90f
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SessionManager.xml
@@ -0,0 +1,23 @@
+<node>
+ <interface name="org.gnome.SessionManager">
+ <method name="Logout">
+ <arg type="u" direction="in"/>
+ </method>
+ <method name="Shutdown"/>
+ <method name="Reboot"/>
+ <method name="CanShutdown">
+ <arg type="b" direction="out"/>
+ </method>
+ <method name="IsInhibited">
+ <arg type="u" direction="in"/>
+ <arg type="b" direction="out"/>
+ </method>
+ <property name="SessionIsActive" type="b" access="read"/>
+ <signal name="InhibitorAdded">
+ <arg type="o" direction="out"/>
+ </signal>
+ <signal name="InhibitorRemoved">
+ <arg type="o" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SettingsDaemon.Color.xml b/data/dbus-interfaces/org.gnome.SettingsDaemon.Color.xml
new file mode 100644
index 0000000..1528f90
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SettingsDaemon.Color.xml
@@ -0,0 +1,6 @@
+<node>
+ <interface name="org.gnome.SettingsDaemon.Color">
+ <property name="DisabledUntilTomorrow" type="b" access="readwrite"/>
+ <property name="NightLightActive" type="b" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SettingsDaemon.Power.Screen.xml b/data/dbus-interfaces/org.gnome.SettingsDaemon.Power.Screen.xml
new file mode 100644
index 0000000..05e4b8d
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SettingsDaemon.Power.Screen.xml
@@ -0,0 +1,5 @@
+<node>
+ <interface name="org.gnome.SettingsDaemon.Power.Screen">
+ <property name="Brightness" type="i" access="readwrite"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SettingsDaemon.Rfkill.xml b/data/dbus-interfaces/org.gnome.SettingsDaemon.Rfkill.xml
new file mode 100644
index 0000000..bde65f9
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SettingsDaemon.Rfkill.xml
@@ -0,0 +1,11 @@
+<node>
+ <interface name="org.gnome.SettingsDaemon.Rfkill">
+ <property name="AirplaneMode" type="b" access="readwrite"/>
+ <property name="HasAirplaneMode" type="b" access="read"/>
+ <property name="HardwareAirplaneMode" type="b" access="read"/>
+ <property name="BluetoothAirplaneMode" type="b" access="readwrite"/>
+ <property name="BluetoothHasAirplaneMode" type="b" access="read"/>
+ <property name="BluetoothHardwareAirplaneMode" type="b" access="readwrite"/>
+ <property name="ShouldShowAirplaneMode" type="b" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.SettingsDaemon.Wacom.xml b/data/dbus-interfaces/org.gnome.SettingsDaemon.Wacom.xml
new file mode 100644
index 0000000..1370214
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.SettingsDaemon.Wacom.xml
@@ -0,0 +1,13 @@
+<node>
+<interface name="org.gnome.SettingsDaemon.Wacom">
+ <method name="SetGroupModeLED">
+ <arg name="device_path" direction="in" type="s"/>
+ <arg name="group" direction="in" type="u"/>
+ <arg name="mode" direction="in" type="u"/>
+ </method>
+ <method name="SetOLEDLabels">
+ <arg name="device_path" direction="in" type="s"/>
+ <arg name="labels" direction="in" type="as"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.AudioDeviceSelection.xml b/data/dbus-interfaces/org.gnome.Shell.AudioDeviceSelection.xml
new file mode 100644
index 0000000..28cc6da
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.AudioDeviceSelection.xml
@@ -0,0 +1,12 @@
+<node>
+ <interface name="org.gnome.Shell.AudioDeviceSelection">
+ <method name="Open">
+ <arg name="devices" direction="in" type="as"/>
+ </method>
+ <method name="Close">
+ </method>
+ <signal name="DeviceSelected">
+ <arg name="device" type="s"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.CalendarServer.xml b/data/dbus-interfaces/org.gnome.Shell.CalendarServer.xml
new file mode 100644
index 0000000..5814710
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.CalendarServer.xml
@@ -0,0 +1,19 @@
+<node>
+ <interface name="org.gnome.Shell.CalendarServer">
+ <method name="SetTimeRange">
+ <arg type="x" name="since" direction="in"/>
+ <arg type="x" name="until" direction="in"/>
+ <arg type="b" name="force_reload" direction="in"/>
+ </method>
+ <signal name="EventsAddedOrUpdated">
+ <arg type="a(ssxxa{sv})" name="events" direction="out"/>
+ </signal>
+ <signal name="EventsRemoved">
+ <arg type="as" name="ids" direction="out"/>
+ </signal>
+ <signal name="ClientDisappeared">
+ <arg type="s" name="source_uid" direction="out"/>
+ </signal>
+ <property name="HasCalendars" type="b" access="read" />
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.ClocksIntegration.xml b/data/dbus-interfaces/org.gnome.Shell.ClocksIntegration.xml
new file mode 100644
index 0000000..0cbb132
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.ClocksIntegration.xml
@@ -0,0 +1,15 @@
+<node>
+
+ <!--
+ org.gnome.Shell.ClocksIntegration:
+ @short_description: Clocks integration interface
+
+ The interface used for exporting location settings to GNOME Shell's
+ world clocks integration.
+ -->
+ <interface name="org.gnome.Shell.ClocksIntegration">
+
+ <property name="Locations" type="av" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.Extensions.xml b/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
new file mode 100644
index 0000000..51448dc
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.Extensions.xml
@@ -0,0 +1,267 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.Extensions:
+ @short_description: Extensions interface
+
+ The interface used to query and manage extensions.
+ -->
+ <interface name="org.gnome.Shell.Extensions">
+
+ <!--
+ ListExtensions:
+ @extensions: A dictionary of extension infos
+
+ Get a list of installed extensions. The returned @extensions
+ dictionary maps extension UUIDs to info vardicts. See
+ GetExtensionInfo() for documentation on possible keys.
+ -->
+ <method name="ListExtensions">
+ <arg type="a{sa{sv}}" direction="out" name="extensions"/>
+ </method>
+
+ <!--
+ GetExtensionInfo:
+ @uuid: The UUID of the extension
+ @info: The returned extension info
+
+ The information returned in the @info vardict depends on the
+ metadata the extension provides, however it is guaranteed to
+ contain the following keys:
+
+ <variablelist>
+ <varlistentry>
+ <term>uuid s</term>
+ <listitem><para>The UUID of the extension</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>name s</term>
+ <listitem><para>The name of the extension</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>description s</term>
+ <listitem><para>
+ A short summary that describes what the extension does
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>shell-version as</term>
+ <listitem><para>An array of support shell versions</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>type d</term>
+ <listitem><para>
+ The type of extension:
+ <simplelist>
+ <member>1: SYSTEM</member>
+ <member>2: PER_USER</member>
+ </simplelist>
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>state d</term>
+ <listitem><para>
+ The state the extension is in:
+ <simplelist>
+ <member>1: ENABLED</member>
+ <member>2: DISABLED</member>
+ <member>3: ERROR</member>
+ <member>4: OUT_OF_DATE</member>
+ <member>5: DOWNLOADING</member>
+ <member>6: INITIALIZED</member>
+ <member>99: UNINSTALLED</member>
+ </simplelist>
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>path s</term>
+ <listitem><para>The extension directory</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>error s</term>
+ <listitem><para>The most recent error caught in init(), enable() or disable()</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>hasPrefs b</term>
+ <listitem><para>Whether the extension includes preference UI</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ By convention, many extensions will also include the following keys:
+ <variablelist>
+ <varlistentry>
+ <term>version d</term>
+ <listitem><para>The extension version</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>url s</term>
+ <listitem><para>The URL to the extension homepage or repository</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>settings-schema s</term>
+ <listitem><para>The ID of a bundled GSettings schema</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>gettext-domain s</term>
+ <listitem><para>The domain used for translations</para></listitem>
+ </varlistentry>
+ </variablelist>
+ -->
+ <method name="GetExtensionInfo">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="a{sv}" direction="out" name="info"/>
+ </method>
+
+ <!--
+ GetExtensionErrors:
+ @uuid: The UUID of the extension
+ @errors: The returned errors
+
+ Get the list of errors that caused the extension
+ to be in ERROR state.
+ -->
+ <method name="GetExtensionErrors">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="as" direction="out" name="errors"/>
+ </method>
+
+ <!--
+ InstallRemoteExtension:
+ @uuid: The UUID of the extension
+ @result: The result of the operation
+
+ Download and install an extension.
+ -->
+ <method name="InstallRemoteExtension">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="s" direction="out" name="result"/>
+ </method>
+
+ <!--
+ UninstallExtension:
+ @uuid: The UUID of the extension
+ @success: Whether the operation was successful
+
+ Uninstall an extension.
+ -->
+ <method name="UninstallExtension">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="b" direction="out" name="success"/>
+ </method>
+
+ <!--
+ ReloadExtension:
+ @uuid: The UUID of the extension
+
+ Reload an extension.
+ -->
+ <method name="ReloadExtension">
+ <arg type="s" direction="in" name="uuid"/>
+ </method>
+
+ <!--
+ EnableExtension:
+ @uuid: The UUID of the extension
+ @success: Whether the operation was successful
+
+ Enable an extension.
+ -->
+ <method name="EnableExtension">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="b" direction="out" name="success"/>
+ </method>
+
+ <!--
+ DisableExtension:
+ @uuid: The UUID of the extension
+ @success: Whether the operation was successful
+
+ Disable an extension.
+ -->
+ <method name="DisableExtension">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="b" direction="out" name="success"/>
+ </method>
+
+ <!--
+ LaunchExtensionPrefs:
+ Deprecated for OpenExtensionPrefs
+ -->
+ <method name="LaunchExtensionPrefs">
+ <arg type="s" direction="in" name="uuid"/>
+ </method>
+
+ <!--
+ OpenExtensionPrefs:
+ @uuid: The UUID of the extension
+ @parent_window: Identifier for the application window
+ @options: Vardict with further options
+
+ Opens the prefs dialog of extension @uuid.
+
+ The following @options are recognized:
+
+ <variablelist>
+ <varlistentry>
+ <term>modal b</term>
+ <listitem>
+ <para>Whether the prefs window should be modal, default: false</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ -->
+ <method name="OpenExtensionPrefs">
+ <arg type="s" direction="in" name="uuid"/>
+ <arg type="s" direction="in" name="parent_window"/>
+ <arg type="a{sv}" direction="in" name="options"/>
+ </method>
+
+ <!--
+ CheckForUpdates:
+ Update all extensions for which updates are available
+ -->
+ <method name="CheckForUpdates"/>
+
+ <signal name="ExtensionStateChanged">
+ <arg type="s" name="uuid"/>
+ <arg type="a{sv}" name="state"/>
+ </signal>
+
+ <!--
+ ExtensionStatusChanged:
+ Deprecated for ExtensionStateChanged
+ -->
+ <signal name="ExtensionStatusChanged">
+ <arg type="s" name="uuid"/>
+ <arg type="i" name="state"/>
+ <arg type="s" name="error"/>
+ </signal>
+
+ <!--
+ ShellVersion:
+ The GNOME Shell version
+ -->
+ <property name="ShellVersion" type="s" access="read"/>
+
+ <!--
+ UserExtensionsEnabled:
+ Whether user extensions are enabled
+ -->
+ <property name="UserExtensionsEnabled" type="b" access="readwrite"/>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.HotplugSniffer.xml b/data/dbus-interfaces/org.gnome.Shell.HotplugSniffer.xml
new file mode 100644
index 0000000..b4373cc
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.HotplugSniffer.xml
@@ -0,0 +1,8 @@
+<node>
+ <interface name="org.gnome.Shell.HotplugSniffer">
+ <method name="SniffURI">
+ <arg type="s" direction="in"/>
+ <arg type="as" direction="out"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.Introspect.xml b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
new file mode 100644
index 0000000..cb19cfe
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.Introspect.xml
@@ -0,0 +1,89 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.Introspect:
+ @short_description: Introspection interface
+
+ The interface used to introspect the state of Shell, such as running
+ applications, currently active application, etc.
+ -->
+ <interface name="org.gnome.Shell.Introspect">
+
+ <!--
+ RunningApplicationsChanged:
+ @short_description: Notifies when the running applications changes
+ -->
+ <signal name="RunningApplicationsChanged" />
+
+ <!--
+ WindowsChanged:
+ @short_description: Notifies when any window opens or closes
+ -->
+ <signal name="WindowsChanged" />
+
+ <!--
+ GetRunningApplications:
+ @short_description: Retrieves the description of all running applications
+
+ Each application is associated by an application ID. The details of
+ each application consists of a varlist of keys and values. Available
+ keys are listed below.
+
+ 'active-on-seats' - (as) list of seats the application is active on
+ (a seat only has at most one active
+ application)
+ -->
+ <method name="GetRunningApplications">
+ <arg name="apps" direction="out" type="a{sa{sv}}" />
+ </method>
+
+ <!--
+ GetWindows:
+ @short_description: Retrieves the current list of windows and their properties
+
+ A window is exposed as:
+ * t ID: unique ID of the window
+ * a{sv} properties: high-level properties
+
+ Known properties:
+
+ - "title" (s): (readonly) title of the window
+ - "app-id" (s): (readonly) application ID of the window
+ - "wm-class" (s): (readonly) class of the window
+ - "client-type" (u): (readonly) 0 for Wayland, 1 for X11
+ - "is-hidden" (b): (readonly) if the window is currently hidden
+ - "has-focus" (b): (readonly) if the window currently have
+ keyboard focus
+ - "width" (u): (readonly) width of the window
+ - "height" (u): (readonly) height of the window
+ -->
+ <method name="GetWindows">
+ <arg name="windows" direction="out" type="a{ta{sv}}" />
+ </method>
+
+ <!--
+ AnimationsEnabled:
+ @short_description: Whether the shell animations are enabled
+
+ By default determined by the org.gnome.desktop.interface enable-animations
+ gsetting, but may be overridden, e.g. if there is an active screen cast or
+ remote desktop session that asked for animations to be disabled.
+
+ Since: 2
+ -->
+ <property name="AnimationsEnabled" type="b" access="read"/>
+
+ <!--
+ ScreenSize:
+ @short_description: The size of the screen
+
+ Since: 3
+ -->
+ <property name="ScreenSize" type="(ii)" access="read"/>
+
+ <property name="version" type="u" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.PadOsd.xml b/data/dbus-interfaces/org.gnome.Shell.PadOsd.xml
new file mode 100644
index 0000000..765973c
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.PadOsd.xml
@@ -0,0 +1,28 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.PadOSD:
+ @short_description: Pad OSD interface
+
+ The interface used to show button map OSD on pad devices.
+ -->
+ <interface name='org.gnome.Shell.Wacom.PadOsd'>
+
+ <!--
+ Show:
+ @device_node: device node file, usually in /dev/input/...
+ @edition_mode: whether toggling edition mode on when showing
+
+ Shows the pad button map OSD for the requested device, the OSD
+ will be shown according the current device settings (output
+ mapping, left handed mode, ...)
+ -->
+ <method name='Show'>
+ <arg name='device_node' direction='in' type='o'/>
+ <arg name='edition_mode' direction='in' type='b'/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.PerfHelper.xml b/data/dbus-interfaces/org.gnome.Shell.PerfHelper.xml
new file mode 100644
index 0000000..98fea27
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.PerfHelper.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.gnome.Shell.PerfHelper">
+ <method name="CreateWindow">
+ <arg type="i" direction="in"/>
+ <arg type="i" direction="in"/>
+ <arg type="b" direction="in"/>
+ <arg type="b" direction="in"/>
+ <arg type="b" direction="in"/>
+ </method>
+ <method name="WaitWindows"/>
+ <method name="DestroyWindows"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.PortalHelper.xml b/data/dbus-interfaces/org.gnome.Shell.PortalHelper.xml
new file mode 100644
index 0000000..8c6a13e
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.PortalHelper.xml
@@ -0,0 +1,19 @@
+<node>
+ <interface name="org.gnome.Shell.PortalHelper">
+ <method name="Authenticate">
+ <arg name="connection" type="o" direction="in"/>
+ <arg name="url" type="s" direction="in"/>
+ <arg name="timestamp" type="u" direction="in"/>
+ </method>
+ <method name="Close">
+ <arg name="connection" type="o" direction="in"/>
+ </method>
+ <method name="Refresh">
+ <arg name="connection" type="o" direction="in"/>
+ </method>
+ <signal name="Done">
+ <arg type="o" name="connection"/>
+ <arg type="u" name="result"/>
+ </signal>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.Screencast.xml b/data/dbus-interfaces/org.gnome.Shell.Screencast.xml
new file mode 100644
index 0000000..b4cd592
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.Screencast.xml
@@ -0,0 +1,96 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.Screencast:
+ @short_description: Screencast interface
+
+ The interface used to record screen contents.
+ -->
+ <interface name="org.gnome.Shell.Screencast">
+ <property name="ScreencastSupported" type="b" access="read"/>
+
+ <!--
+ Screencast:
+ @file_template: the template for the filename to use
+ @options: a dictionary of optional parameters
+ @success: whether the screencast was started successfully
+ @filename_used: the file where the screencast is being saved
+
+ Records a screencast of the whole screen and saves it
+ (by default) as webm video under a filename derived from
+ @file_template. The template is either a relative or absolute
+ filename which may contain some escape sequences - %d and %t
+ will be replaced by the start date and time of the recording.
+ If a relative name is used, the screencast will be saved in the
+ $XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
+ The actual filename of the saved video is returned in @filename_used.
+ The set of optional parameters in @options currently consists of:
+ 'draw-cursor'(b): whether the cursor should be included in the
+ recording (true)
+ 'framerate'(i): the number of frames per second that should be
+ recorded if possible (30)
+ 'pipeline'(s): the GStreamer pipeline used to encode recordings
+ in gst-launch format; if not specified, the
+ recorder will produce vp8 (webm) video (unset)
+ -->
+ <method name="Screencast">
+ <arg type="s" direction="in" name="file_template"/>
+ <arg type="a{sv}" direction="in" name="options"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="filename_used"/>
+ </method>
+
+ <!--
+ ScreencastArea:
+ @x: the X coordinate of the area to capture
+ @y: the Y coordinate of the area to capture
+ @width: the width of the area to capture
+ @height: the height of the area to capture
+ @file_template: the template for the filename to use
+ @options: a dictionary of optional parameters
+ @success: whether the screencast was started successfully
+ @filename_used: the file where the screencast is being saved
+
+ Records a screencast of the passed in area and saves it
+ (by default) as webm video under a filename derived from
+ @file_template. The template is either a relative or absolute
+ filename which may contain some escape sequences - %d and %t
+ will be replaced by the start date and time of the recording.
+ If a relative name is used, the screencast will be saved in the
+ $XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
+ The actual filename of the saved video is returned in @filename_used.
+ The set of optional parameters in @options currently consists of:
+ 'draw-cursor'(b): whether the cursor should be included in the
+ recording (true)
+ 'framerate'(i): the number of frames per second that should be
+ recorded if possible (30)
+ 'pipeline'(s): the GStreamer pipeline used to encode recordings
+ in gst-launch format; if not specified, the
+ recorder will produce vp8 (webm) video (unset)
+ -->
+ <method name="ScreencastArea">
+ <arg type="i" direction="in" name="x"/>
+ <arg type="i" direction="in" name="y"/>
+ <arg type="i" direction="in" name="width"/>
+ <arg type="i" direction="in" name="height"/>
+ <arg type="s" direction="in" name="file_template"/>
+ <arg type="a{sv}" direction="in" name="options"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="filename_used"/>
+ </method>
+
+ <!--
+ StopScreencast:
+ @success: whether stopping the recording was successful
+
+ Stop the recording started by either Screencast or ScreencastArea.
+ -->
+ <method name="StopScreencast">
+ <arg type="b" direction="out" name="success"/>
+ </method>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.Screenshot.xml b/data/dbus-interfaces/org.gnome.Shell.Screenshot.xml
new file mode 100644
index 0000000..528b01e
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.Screenshot.xml
@@ -0,0 +1,145 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.Screenshot:
+ @short_description: Screenshot interface
+
+ The interface used to capture pictures of the screen contents.
+ -->
+ <interface name="org.gnome.Shell.Screenshot">
+
+ <!--
+ Screenshot:
+ @filename: The filename for the screenshot
+ @include_cursor: Whether to include the cursor image or not
+ @flash: Whether to flash the screen or not
+ @success: whether the screenshot was captured
+ @filename_used: the file where the screenshot was saved
+
+ Takes a screenshot of the whole screen and saves it
+ in @filename as png image, it returns a boolean
+ indicating whether the operation was successful or not.
+ @filename can either be an absolute path or a basename, in
+ which case the screenshot will be saved in the $XDG_PICTURES_DIR
+ or the home directory if it doesn't exist. The filename used
+ to save the screenshot will be returned in @filename_used.
+ -->
+ <method name="Screenshot">
+ <arg type="b" direction="in" name="include_cursor"/>
+ <arg type="b" direction="in" name="flash"/>
+ <arg type="s" direction="in" name="filename"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="filename_used"/>
+ </method>
+
+ <!--
+ ScreenshotWindow:
+ @include_frame: Whether to include the frame or not
+ @include_cursor: Whether to include the cursor image or not
+ @flash: Whether to flash the window area or not
+ @filename: The filename for the screenshot
+ @success: whether the screenshot was captured
+ @filename_used: the file where the screenshot was saved
+
+ Takes a screenshot of the focused window (optionally omitting the frame)
+ and saves it in @filename as png image, it returns a boolean
+ indicating whether the operation was successful or not.
+ @filename can either be an absolute path or a basename, in
+ which case the screenshot will be saved in the $XDG_PICTURES_DIR
+ or the home directory if it doesn't exist. The filename used
+ to save the screenshot will be returned in @filename_used.
+ -->
+ <method name="ScreenshotWindow">
+ <arg type="b" direction="in" name="include_frame"/>
+ <arg type="b" direction="in" name="include_cursor"/>
+ <arg type="b" direction="in" name="flash"/>
+ <arg type="s" direction="in" name="filename"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="filename_used"/>
+ </method>
+
+ <!--
+ ScreenshotArea:
+ @x: the X coordinate of the area to capture
+ @y: the Y coordinate of the area to capture
+ @width: the width of the area to capture
+ @height: the height of the area to capture
+ @flash: whether to flash the area or not
+ @filename: the filename for the screenshot
+ @success: whether the screenshot was captured
+ @filename_used: the file where the screenshot was saved
+
+ Takes a screenshot of the passed in area and saves it
+ in @filename as png image, it returns a boolean
+ indicating whether the operation was successful or not.
+ @filename can either be an absolute path or a basename, in
+ which case the screenshot will be saved in the $XDG_PICTURES_DIR
+ or the home directory if it doesn't exist. The filename used
+ to save the screenshot will be returned in @filename_used.
+ -->
+ <method name="ScreenshotArea">
+ <arg type="i" direction="in" name="x"/>
+ <arg type="i" direction="in" name="y"/>
+ <arg type="i" direction="in" name="width"/>
+ <arg type="i" direction="in" name="height"/>
+ <arg type="b" direction="in" name="flash"/>
+ <arg type="s" direction="in" name="filename"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="filename_used"/>
+ </method>
+
+ <!--
+ PickColor:
+
+ Picks a color and returns the result.
+
+ The @result vardict contains:
+ <variablelist>
+ <varlistentry>
+ <term>color (ddd)</term>
+ <listitem><para>The color, RGB values in the range [0,1].</para></listitem>
+ </varlistentry>
+ </variablelist>
+ -->
+ <method name="PickColor">
+ <arg type="a{sv}" direction="out" name="result"/>
+ </method>
+
+ <!--
+ FlashArea:
+ @x: the X coordinate of the area to flash
+ @y: the Y coordinate of the area to flash
+ @width: the width of the area to flash
+ @height: the height of the area to flash
+
+ Renders a flash spot effect in the specified rectangle of the screen.
+ -->
+ <method name="FlashArea">
+ <arg type="i" direction="in" name="x"/>
+ <arg type="i" direction="in" name="y"/>
+ <arg type="i" direction="in" name="width"/>
+ <arg type="i" direction="in" name="height"/>
+ </method>
+
+ <!--
+ SelectArea:
+ @x: the X coordinate of the selected area
+ @y: the Y coordinate of the selected area
+ @width: the width of the selected area
+ @height: the height of the selected area
+
+ Interactively allows the user to select a rectangular area of
+ the screen, and returns its coordinates.
+ -->
+ <method name="SelectArea">
+ <arg type="i" direction="out" name="x"/>
+ <arg type="i" direction="out" name="y"/>
+ <arg type="i" direction="out" name="width"/>
+ <arg type="i" direction="out" name="height"/>
+ </method>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.Wacom.PadOsd.xml b/data/dbus-interfaces/org.gnome.Shell.Wacom.PadOsd.xml
new file mode 100644
index 0000000..5e046c7
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.Wacom.PadOsd.xml
@@ -0,0 +1,8 @@
+<node>
+ <interface name="org.gnome.Shell.Wacom.PadOsd">
+ <method name="Show">
+ <arg name="device_node" direction="in" type="o"/>
+ <arg name="edition_mode" direction="in" type="b"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.WeatherIntegration.xml b/data/dbus-interfaces/org.gnome.Shell.WeatherIntegration.xml
new file mode 100644
index 0000000..1e89bbe
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.WeatherIntegration.xml
@@ -0,0 +1,16 @@
+<node>
+
+ <!--
+ org.gnome.Shell.WeatherIntegration:
+ @short_description: Weather integration interface
+
+ The interface used for exporting location settings to GNOME Shell's
+ weather integration.
+ -->
+ <interface name="org.gnome.Shell.WeatherIntegration">
+
+ <property name="AutomaticLocation" type="b" access="read"/>
+ <property name="Locations" type="av" access="read"/>
+
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.Shell.xml b/data/dbus-interfaces/org.gnome.Shell.xml
new file mode 100644
index 0000000..3ffb5c3
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.Shell.xml
@@ -0,0 +1,47 @@
+<node>
+ <interface name="org.gnome.Shell">
+ <method name="Eval">
+ <arg type="s" direction="in" name="script"/>
+ <arg type="b" direction="out" name="success"/>
+ <arg type="s" direction="out" name="result"/>
+ </method>
+ <method name="FocusSearch"/>
+ <method name="ShowOSD">
+ <arg type="a{sv}" direction="in" name="params"/>
+ </method>
+ <method name="ShowMonitorLabels">
+ <arg type="a{sv}" direction="in" name="params"/>
+ </method>
+ <method name="HideMonitorLabels"/>
+ <method name="FocusApp">
+ <arg type="s" direction="in" name="id"/>
+ </method>
+ <method name="ShowApplications"/>
+ <method name="GrabAccelerator">
+ <arg type="s" direction="in" name="accelerator"/>
+ <arg type="u" direction="in" name="modeFlags"/>
+ <arg type="u" direction="in" name="grabFlags"/>
+ <arg type="u" direction="out" name="action"/>
+ </method>
+ <method name="GrabAccelerators">
+ <arg type="a(suu)" direction="in" name="accelerators"/>
+ <arg type="au" direction="out" name="actions"/>
+ </method>
+ <method name="UngrabAccelerator">
+ <arg type="u" direction="in" name="action"/>
+ <arg type="b" direction="out" name="success"/>
+ </method>
+ <method name="UngrabAccelerators">
+ <arg type="au" direction="in" name="action"/>
+ <arg type="b" direction="out" name="success"/>
+ </method>
+ <method name="ScreenTransition"/>
+ <signal name="AcceleratorActivated">
+ <arg name="action" type="u"/>
+ <arg name="parameters" type="a{sv}"/>
+ </signal>
+ <property name="Mode" type="s" access="read"/>
+ <property name="OverviewActive" type="b" access="readwrite"/>
+ <property name="ShellVersion" type="s" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml b/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml
new file mode 100644
index 0000000..78ad305
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.ShellSearchProvider.xml
@@ -0,0 +1,73 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.SearchProvider:
+ @short_description: Search provider interface
+
+ The interface used for integrating into GNOME Shell's search
+ interface. This interface is deprecated, and org.gnome.Shell.SearchProvider2 should be used instead.
+ -->
+ <interface name="org.gnome.Shell.SearchProvider">
+
+ <!--
+ GetInitialResultSet:
+ @terms: Array of search terms, which the provider should treat as logical AND.
+ @results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
+
+ Called when the user first begins a search.
+ -->
+ <method name="GetInitialResultSet">
+ <arg type="as" name="terms" direction="in" />
+ <arg type="as" name="results" direction="out" />
+ </method>
+
+ <!--
+ GetSubsearchResultSet:
+ @previous_results: Array of results previously returned by GetInitialResultSet().
+ @terms: Array of updated search terms, which the provider should treat as logical AND.
+ @results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
+
+ Called when a search is performed which is a "subsearch" of
+ the previous search, e.g. the method may return less results, but
+ not more or different results.
+
+ This allows search providers to only search through the previous
+ result set, rather than possibly performing a full re-query.
+ -->
+ <method name="GetSubsearchResultSet">
+ <arg type="as" name="previous_results" direction="in" />
+ <arg type="as" name="terms" direction="in" />
+ <arg type="as" name="results" direction="out" />
+ </method>
+
+ <!--
+ GetResultMetas:
+ @identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet()
+ @metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, either 'gicon' (a serialized GIcon) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) can be specified if the result can be better served with a thumbnail of the content (such as with images). A 'description' field (string) may also be specified if more context would help the user find the desired result.
+
+ Return an array of meta data used to display each given result
+ -->
+ <method name="GetResultMetas">
+ <arg type="as" name="identifiers" direction="in" />
+ <arg type="aa{sv}" name="metas" direction="out" />
+ </method>
+
+ <!--
+ ActivateResult:
+ @identifier: A result identifier as returned by GetInitialResultSet() or GetSubsearchResultSet()
+
+ Called when the users chooses a given result. The result should
+ be displayed in the application associated with the corresponding
+ provider.
+
+ This method is deprecated, and providers should implement ActivateResult2()
+ instead.
+ -->
+ <method name="ActivateResult">
+ <arg type="s" name="identifier" direction="in" />
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml b/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml
new file mode 100644
index 0000000..9502340
--- /dev/null
+++ b/data/dbus-interfaces/org.gnome.ShellSearchProvider2.xml
@@ -0,0 +1,87 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+
+ <!--
+ org.gnome.Shell.SearchProvider2:
+ @short_description: Search provider interface
+
+ The interface used for integrating into GNOME Shell's search
+ interface (version 2).
+ -->
+ <interface name="org.gnome.Shell.SearchProvider2">
+
+ <!--
+ GetInitialResultSet:
+ @terms: Array of search terms, which the provider should treat as logical AND.
+ @results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
+
+ Called when the user first begins a search.
+ -->
+ <method name="GetInitialResultSet">
+ <arg type="as" name="terms" direction="in" />
+ <arg type="as" name="results" direction="out" />
+ </method>
+
+ <!--
+ GetSubsearchResultSet:
+ @previous_results: Array of results previously returned by GetInitialResultSet().
+ @terms: Array of updated search terms, which the provider should treat as logical AND.
+ @results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
+
+ Called when a search is performed which is a "subsearch" of
+ the previous search, e.g. the method may return less results, but
+ not more or different results.
+
+ This allows search providers to only search through the previous
+ result set, rather than possibly performing a full re-query.
+ -->
+ <method name="GetSubsearchResultSet">
+ <arg type="as" name="previous_results" direction="in" />
+ <arg type="as" name="terms" direction="in" />
+ <arg type="as" name="results" direction="out" />
+ </method>
+
+ <!--
+ GetResultMetas:
+ @identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet()
+ @metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, 'icon' (a serialized GIcon as obtained by g_icon_serialize) can be specified if the result can be better served with a thumbnail of the content (such as with images). 'gicon' (a serialized GIcon as obtained by g_icon_to_string) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) are deprecated values that can also be used for that purpose. A 'description' field (string) may also be specified if more context would help the user find the desired result.
+
+ Return an array of meta data used to display each given result
+ -->
+ <method name="GetResultMetas">
+ <arg type="as" name="identifiers" direction="in" />
+ <arg type="aa{sv}" name="metas" direction="out" />
+ </method>
+
+ <!--
+ ActivateResult:
+ @identifier: A result identifier as returned by GetInitialResultSet() or GetSubsearchResultSet()
+ @terms: Array of search terms, which the provider should treat as logical AND.
+ @timestamp: A timestamp of the user interaction that triggered this call
+
+ Called when the users chooses a given result. The result should
+ be displayed in the application associated with the corresponding
+ provider. The provided search terms can be used to allow launching a full search in
+ the application.
+ -->
+ <method name="ActivateResult">
+ <arg type="s" name="identifier" direction="in" />
+ <arg type="as" name="terms" direction="in" />
+ <arg type="u" name="timestamp" direction="in" />
+ </method>
+
+ <!--
+ LaunchSearch:
+ @terms: Array of search terms, which the provider should treat as logical AND.
+ @timestamp: A timestamp of the user interaction that triggered this call
+
+ Asks the search provider to launch a full search in the application for the provided terms.
+ -->
+ <method name="LaunchSearch">
+ <arg type="as" name="terms" direction="in" />
+ <arg type="u" name="timestamp" direction="in" />
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.gtk.Notifications.xml b/data/dbus-interfaces/org.gtk.Notifications.xml
new file mode 100644
index 0000000..56a6cec
--- /dev/null
+++ b/data/dbus-interfaces/org.gtk.Notifications.xml
@@ -0,0 +1,13 @@
+<node>
+ <interface name="org.gtk.Notifications">
+ <method name="AddNotification">
+ <arg name="app_id" type="s" direction="in"/>
+ <arg name="id" type="s" direction="in"/>
+ <arg name="notification" type="a{sv}" direction="in"/>
+ </method>
+ <method name="RemoveNotification">
+ <arg name="app_id" type="s" direction="in"/>
+ <arg name="id" type="s" direction="in"/>
+ </method>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.mpris.MediaPlayer2.Player.xml b/data/dbus-interfaces/org.mpris.MediaPlayer2.Player.xml
new file mode 100644
index 0000000..550cb4c
--- /dev/null
+++ b/data/dbus-interfaces/org.mpris.MediaPlayer2.Player.xml
@@ -0,0 +1,12 @@
+<node>
+ <interface name="org.mpris.MediaPlayer2.Player">
+ <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="Metadata" type="a{sv}" access="read"/>
+ <property name="PlaybackStatus" type="s" access="read"/>
+ </interface>
+</node>
diff --git a/data/dbus-interfaces/org.mpris.MediaPlayer2.xml b/data/dbus-interfaces/org.mpris.MediaPlayer2.xml
new file mode 100644
index 0000000..5febaf9
--- /dev/null
+++ b/data/dbus-interfaces/org.mpris.MediaPlayer2.xml
@@ -0,0 +1,7 @@
+<node>
+ <interface name="org.mpris.MediaPlayer2">
+ <method name="Raise"/>
+ <property name="CanRaise" type="b" access="read"/>
+ <property name="DesktopEntry" type="s" access="read"/>
+ </interface>
+</node>
diff --git a/data/emoji.json b/data/emoji.json
new file mode 100644
index 0000000..72144df
--- /dev/null
+++ b/data/emoji.json
@@ -0,0 +1,15740 @@
+[
+ {
+ "no": 1,
+ "code": "1F600",
+ "char": "😀",
+ "name": "grinning face"
+ },
+ {
+ "no": 2,
+ "code": "1F601",
+ "char": "😁",
+ "name": "beaming face with smiling eyes"
+ },
+ {
+ "no": 3,
+ "code": "1F602",
+ "char": "😂",
+ "name": "face with tears of joy"
+ },
+ {
+ "no": 4,
+ "code": "1F923",
+ "char": "🤣",
+ "name": "rolling on the floor laughing"
+ },
+ {
+ "no": 5,
+ "code": "1F603",
+ "char": "😃",
+ "name": "grinning face with big eyes"
+ },
+ {
+ "no": 6,
+ "code": "1F604",
+ "char": "😄",
+ "name": "grinning face with smiling eyes"
+ },
+ {
+ "no": 7,
+ "code": "1F605",
+ "char": "😅",
+ "name": "grinning face with sweat"
+ },
+ {
+ "no": 8,
+ "code": "1F606",
+ "char": "😆",
+ "name": "grinning squinting face"
+ },
+ {
+ "no": 9,
+ "code": "1F609",
+ "char": "😉",
+ "name": "winking face"
+ },
+ {
+ "no": 10,
+ "code": "1F60A",
+ "char": "😊",
+ "name": "smiling face with smiling eyes"
+ },
+ {
+ "no": 11,
+ "code": "1F60B",
+ "char": "😋",
+ "name": "face savoring food"
+ },
+ {
+ "no": 12,
+ "code": "1F60E",
+ "char": "😎",
+ "name": "smiling face with sunglasses"
+ },
+ {
+ "no": 13,
+ "code": "1F60D",
+ "char": "😍",
+ "name": "smiling face with heart-eyes"
+ },
+ {
+ "no": 14,
+ "code": "1F618",
+ "char": "😘",
+ "name": "face blowing a kiss"
+ },
+ {
+ "no": 15,
+ "code": "1F617",
+ "char": "😗",
+ "name": "kissing face"
+ },
+ {
+ "no": 16,
+ "code": "1F619",
+ "char": "😙",
+ "name": "kissing face with smiling eyes"
+ },
+ {
+ "no": 17,
+ "code": "1F61A",
+ "char": "😚",
+ "name": "kissing face with closed eyes"
+ },
+ {
+ "no": 18,
+ "code": "263A",
+ "char": "☺",
+ "name": "smiling face"
+ },
+ {
+ "no": 19,
+ "code": "1F642",
+ "char": "🙂",
+ "name": "slightly smiling face"
+ },
+ {
+ "no": 20,
+ "code": "1F917",
+ "char": "🤗",
+ "name": "hugging face"
+ },
+ {
+ "no": 21,
+ "code": "1F929",
+ "char": "🤩",
+ "name": "⊛ star-struck"
+ },
+ {
+ "no": 22,
+ "code": "1F914",
+ "char": "🤔",
+ "name": "thinking face"
+ },
+ {
+ "no": 23,
+ "code": "1F928",
+ "char": "🤨",
+ "name": "⊛ face with raised eyebrow"
+ },
+ {
+ "no": 24,
+ "code": "1F610",
+ "char": "😐",
+ "name": "neutral face"
+ },
+ {
+ "no": 25,
+ "code": "1F611",
+ "char": "😑",
+ "name": "expressionless face"
+ },
+ {
+ "no": 26,
+ "code": "1F636",
+ "char": "😶",
+ "name": "face without mouth"
+ },
+ {
+ "no": 27,
+ "code": "1F644",
+ "char": "🙄",
+ "name": "face with rolling eyes"
+ },
+ {
+ "no": 28,
+ "code": "1F60F",
+ "char": "😏",
+ "name": "smirking face"
+ },
+ {
+ "no": 29,
+ "code": "1F623",
+ "char": "😣",
+ "name": "persevering face"
+ },
+ {
+ "no": 30,
+ "code": "1F625",
+ "char": "😥",
+ "name": "sad but relieved face"
+ },
+ {
+ "no": 31,
+ "code": "1F62E",
+ "char": "😮",
+ "name": "face with open mouth"
+ },
+ {
+ "no": 32,
+ "code": "1F910",
+ "char": "🤐",
+ "name": "zipper-mouth face"
+ },
+ {
+ "no": 33,
+ "code": "1F62F",
+ "char": "😯",
+ "name": "hushed face"
+ },
+ {
+ "no": 34,
+ "code": "1F62A",
+ "char": "😪",
+ "name": "sleepy face"
+ },
+ {
+ "no": 35,
+ "code": "1F62B",
+ "char": "😫",
+ "name": "tired face"
+ },
+ {
+ "no": 36,
+ "code": "1F634",
+ "char": "😴",
+ "name": "sleeping face"
+ },
+ {
+ "no": 37,
+ "code": "1F60C",
+ "char": "😌",
+ "name": "relieved face"
+ },
+ {
+ "no": 38,
+ "code": "1F61B",
+ "char": "😛",
+ "name": "face with tongue"
+ },
+ {
+ "no": 39,
+ "code": "1F61C",
+ "char": "😜",
+ "name": "winking face with tongue"
+ },
+ {
+ "no": 40,
+ "code": "1F61D",
+ "char": "😝",
+ "name": "squinting face with tongue"
+ },
+ {
+ "no": 41,
+ "code": "1F924",
+ "char": "🤤",
+ "name": "drooling face"
+ },
+ {
+ "no": 42,
+ "code": "1F612",
+ "char": "😒",
+ "name": "unamused face"
+ },
+ {
+ "no": 43,
+ "code": "1F613",
+ "char": "😓",
+ "name": "downcast face with sweat"
+ },
+ {
+ "no": 44,
+ "code": "1F614",
+ "char": "😔",
+ "name": "pensive face"
+ },
+ {
+ "no": 45,
+ "code": "1F615",
+ "char": "😕",
+ "name": "confused face"
+ },
+ {
+ "no": 46,
+ "code": "1F643",
+ "char": "🙃",
+ "name": "upside-down face"
+ },
+ {
+ "no": 47,
+ "code": "1F911",
+ "char": "🤑",
+ "name": "money-mouth face"
+ },
+ {
+ "no": 48,
+ "code": "1F632",
+ "char": "😲",
+ "name": "astonished face"
+ },
+ {
+ "no": 49,
+ "code": "2639",
+ "char": "☹",
+ "name": "frowning face"
+ },
+ {
+ "no": 50,
+ "code": "1F641",
+ "char": "🙁",
+ "name": "slightly frowning face"
+ },
+ {
+ "no": 51,
+ "code": "1F616",
+ "char": "😖",
+ "name": "confounded face"
+ },
+ {
+ "no": 52,
+ "code": "1F61E",
+ "char": "😞",
+ "name": "disappointed face"
+ },
+ {
+ "no": 53,
+ "code": "1F61F",
+ "char": "😟",
+ "name": "worried face"
+ },
+ {
+ "no": 54,
+ "code": "1F624",
+ "char": "😤",
+ "name": "face with steam from nose"
+ },
+ {
+ "no": 55,
+ "code": "1F622",
+ "char": "😢",
+ "name": "crying face"
+ },
+ {
+ "no": 56,
+ "code": "1F62D",
+ "char": "😭",
+ "name": "loudly crying face"
+ },
+ {
+ "no": 57,
+ "code": "1F626",
+ "char": "😦",
+ "name": "frowning face with open mouth"
+ },
+ {
+ "no": 58,
+ "code": "1F627",
+ "char": "😧",
+ "name": "anguished face"
+ },
+ {
+ "no": 59,
+ "code": "1F628",
+ "char": "😨",
+ "name": "fearful face"
+ },
+ {
+ "no": 60,
+ "code": "1F629",
+ "char": "😩",
+ "name": "weary face"
+ },
+ {
+ "no": 61,
+ "code": "1F92F",
+ "char": "🤯",
+ "name": "⊛ exploding head"
+ },
+ {
+ "no": 62,
+ "code": "1F62C",
+ "char": "😬",
+ "name": "grimacing face"
+ },
+ {
+ "no": 63,
+ "code": "1F630",
+ "char": "😰",
+ "name": "anxious face with sweat"
+ },
+ {
+ "no": 64,
+ "code": "1F631",
+ "char": "😱",
+ "name": "face screaming in fear"
+ },
+ {
+ "no": 65,
+ "code": "1F633",
+ "char": "😳",
+ "name": "flushed face"
+ },
+ {
+ "no": 66,
+ "code": "1F92A",
+ "char": "🤪",
+ "name": "⊛ crazy face"
+ },
+ {
+ "no": 67,
+ "code": "1F635",
+ "char": "😵",
+ "name": "dizzy face"
+ },
+ {
+ "no": 68,
+ "code": "1F621",
+ "char": "😡",
+ "name": "pouting face"
+ },
+ {
+ "no": 69,
+ "code": "1F620",
+ "char": "😠",
+ "name": "angry face"
+ },
+ {
+ "no": 70,
+ "code": "1F92C",
+ "char": "🤬",
+ "name": "⊛ face with symbols on mouth"
+ },
+ {
+ "no": 71,
+ "code": "1F637",
+ "char": "😷",
+ "name": "face with medical mask"
+ },
+ {
+ "no": 72,
+ "code": "1F912",
+ "char": "🤒",
+ "name": "face with thermometer"
+ },
+ {
+ "no": 73,
+ "code": "1F915",
+ "char": "🤕",
+ "name": "face with head-bandage"
+ },
+ {
+ "no": 74,
+ "code": "1F922",
+ "char": "🤢",
+ "name": "nauseated face"
+ },
+ {
+ "no": 75,
+ "code": "1F92E",
+ "char": "🤮",
+ "name": "⊛ face vomiting"
+ },
+ {
+ "no": 76,
+ "code": "1F927",
+ "char": "🤧",
+ "name": "sneezing face"
+ },
+ {
+ "no": 77,
+ "code": "1F607",
+ "char": "😇",
+ "name": "smiling face with halo"
+ },
+ {
+ "no": 78,
+ "code": "1F920",
+ "char": "🤠",
+ "name": "cowboy hat face"
+ },
+ {
+ "no": 79,
+ "code": "1F921",
+ "char": "🤡",
+ "name": "clown face"
+ },
+ {
+ "no": 80,
+ "code": "1F925",
+ "char": "🤥",
+ "name": "lying face"
+ },
+ {
+ "no": 81,
+ "code": "1F92B",
+ "char": "🤫",
+ "name": "⊛ shushing face"
+ },
+ {
+ "no": 82,
+ "code": "1F92D",
+ "char": "🤭",
+ "name": "⊛ face with hand over mouth"
+ },
+ {
+ "no": 83,
+ "code": "1F9D0",
+ "char": "🧐",
+ "name": "⊛ face with monocle"
+ },
+ {
+ "no": 84,
+ "code": "1F913",
+ "char": "🤓",
+ "name": "nerd face"
+ },
+ {
+ "no": 85,
+ "code": "1F608",
+ "char": "😈",
+ "name": "smiling face with horns"
+ },
+ {
+ "no": 86,
+ "code": "1F47F",
+ "char": "👿",
+ "name": "angry face with horns"
+ },
+ {
+ "no": 87,
+ "code": "1F479",
+ "char": "👹",
+ "name": "ogre"
+ },
+ {
+ "no": 88,
+ "code": "1F47A",
+ "char": "👺",
+ "name": "goblin"
+ },
+ {
+ "no": 89,
+ "code": "1F480",
+ "char": "💀",
+ "name": "skull"
+ },
+ {
+ "no": 90,
+ "code": "2620",
+ "char": "☠",
+ "name": "skull and crossbones"
+ },
+ {
+ "no": 91,
+ "code": "1F47B",
+ "char": "👻",
+ "name": "ghost"
+ },
+ {
+ "no": 92,
+ "code": "1F47D",
+ "char": "👽",
+ "name": "alien"
+ },
+ {
+ "no": 93,
+ "code": "1F47E",
+ "char": "👾",
+ "name": "alien monster"
+ },
+ {
+ "no": 94,
+ "code": "1F916",
+ "char": "🤖",
+ "name": "robot face"
+ },
+ {
+ "no": 95,
+ "code": "1F4A9",
+ "char": "💩",
+ "name": "pile of poo"
+ },
+ {
+ "no": 96,
+ "code": "1F63A",
+ "char": "😺",
+ "name": "grinning cat face"
+ },
+ {
+ "no": 97,
+ "code": "1F638",
+ "char": "😸",
+ "name": "grinning cat face with smiling eyes"
+ },
+ {
+ "no": 98,
+ "code": "1F639",
+ "char": "😹",
+ "name": "cat face with tears of joy"
+ },
+ {
+ "no": 99,
+ "code": "1F63B",
+ "char": "😻",
+ "name": "smiling cat face with heart-eyes"
+ },
+ {
+ "no": 100,
+ "code": "1F63C",
+ "char": "😼",
+ "name": "cat face with wry smile"
+ },
+ {
+ "no": 101,
+ "code": "1F63D",
+ "char": "😽",
+ "name": "kissing cat face"
+ },
+ {
+ "no": 102,
+ "code": "1F640",
+ "char": "🙀",
+ "name": "weary cat face"
+ },
+ {
+ "no": 103,
+ "code": "1F63F",
+ "char": "😿",
+ "name": "crying cat face"
+ },
+ {
+ "no": 104,
+ "code": "1F63E",
+ "char": "😾",
+ "name": "pouting cat face"
+ },
+ {
+ "no": 105,
+ "code": "1F648",
+ "char": "🙈",
+ "name": "see-no-evil monkey"
+ },
+ {
+ "no": 106,
+ "code": "1F649",
+ "char": "🙉",
+ "name": "hear-no-evil monkey"
+ },
+ {
+ "no": 107,
+ "code": "1F64A",
+ "char": "🙊",
+ "name": "speak-no-evil monkey"
+ },
+ {
+ "no": 108,
+ "code": "1F476",
+ "char": "👶",
+ "name": "baby"
+ },
+ {
+ "no": 109,
+ "code": "1F476 1F3FB",
+ "char": "👶🏻",
+ "name": "baby: light skin tone"
+ },
+ {
+ "no": 110,
+ "code": "1F476 1F3FC",
+ "char": "👶🏼",
+ "name": "baby: medium-light skin tone"
+ },
+ {
+ "no": 111,
+ "code": "1F476 1F3FD",
+ "char": "👶🏽",
+ "name": "baby: medium skin tone"
+ },
+ {
+ "no": 112,
+ "code": "1F476 1F3FE",
+ "char": "👶🏾",
+ "name": "baby: medium-dark skin tone"
+ },
+ {
+ "no": 113,
+ "code": "1F476 1F3FF",
+ "char": "👶🏿",
+ "name": "baby: dark skin tone"
+ },
+ {
+ "no": 114,
+ "code": "1F9D2",
+ "char": "🧒",
+ "name": "⊛ child"
+ },
+ {
+ "no": 115,
+ "code": "1F9D2 1F3FB",
+ "char": "🧒🏻",
+ "name": "⊛ child: light skin tone"
+ },
+ {
+ "no": 116,
+ "code": "1F9D2 1F3FC",
+ "char": "🧒🏼",
+ "name": "⊛ child: medium-light skin tone"
+ },
+ {
+ "no": 117,
+ "code": "1F9D2 1F3FD",
+ "char": "🧒🏽",
+ "name": "⊛ child: medium skin tone"
+ },
+ {
+ "no": 118,
+ "code": "1F9D2 1F3FE",
+ "char": "🧒🏾",
+ "name": "⊛ child: medium-dark skin tone"
+ },
+ {
+ "no": 119,
+ "code": "1F9D2 1F3FF",
+ "char": "🧒🏿",
+ "name": "⊛ child: dark skin tone"
+ },
+ {
+ "no": 120,
+ "code": "1F466",
+ "char": "👦",
+ "name": "boy"
+ },
+ {
+ "no": 121,
+ "code": "1F466 1F3FB",
+ "char": "👦🏻",
+ "name": "boy: light skin tone"
+ },
+ {
+ "no": 122,
+ "code": "1F466 1F3FC",
+ "char": "👦🏼",
+ "name": "boy: medium-light skin tone"
+ },
+ {
+ "no": 123,
+ "code": "1F466 1F3FD",
+ "char": "👦🏽",
+ "name": "boy: medium skin tone"
+ },
+ {
+ "no": 124,
+ "code": "1F466 1F3FE",
+ "char": "👦🏾",
+ "name": "boy: medium-dark skin tone"
+ },
+ {
+ "no": 125,
+ "code": "1F466 1F3FF",
+ "char": "👦🏿",
+ "name": "boy: dark skin tone"
+ },
+ {
+ "no": 126,
+ "code": "1F467",
+ "char": "👧",
+ "name": "girl"
+ },
+ {
+ "no": 127,
+ "code": "1F467 1F3FB",
+ "char": "👧🏻",
+ "name": "girl: light skin tone"
+ },
+ {
+ "no": 128,
+ "code": "1F467 1F3FC",
+ "char": "👧🏼",
+ "name": "girl: medium-light skin tone"
+ },
+ {
+ "no": 129,
+ "code": "1F467 1F3FD",
+ "char": "👧🏽",
+ "name": "girl: medium skin tone"
+ },
+ {
+ "no": 130,
+ "code": "1F467 1F3FE",
+ "char": "👧🏾",
+ "name": "girl: medium-dark skin tone"
+ },
+ {
+ "no": 131,
+ "code": "1F467 1F3FF",
+ "char": "👧🏿",
+ "name": "girl: dark skin tone"
+ },
+ {
+ "no": 132,
+ "code": "1F9D1",
+ "char": "🧑",
+ "name": "⊛ adult"
+ },
+ {
+ "no": 133,
+ "code": "1F9D1 1F3FB",
+ "char": "🧑🏻",
+ "name": "⊛ adult: light skin tone"
+ },
+ {
+ "no": 134,
+ "code": "1F9D1 1F3FC",
+ "char": "🧑🏼",
+ "name": "⊛ adult: medium-light skin tone"
+ },
+ {
+ "no": 135,
+ "code": "1F9D1 1F3FD",
+ "char": "🧑🏽",
+ "name": "⊛ adult: medium skin tone"
+ },
+ {
+ "no": 136,
+ "code": "1F9D1 1F3FE",
+ "char": "🧑🏾",
+ "name": "⊛ adult: medium-dark skin tone"
+ },
+ {
+ "no": 137,
+ "code": "1F9D1 1F3FF",
+ "char": "🧑🏿",
+ "name": "⊛ adult: dark skin tone"
+ },
+ {
+ "no": 138,
+ "code": "1F468",
+ "char": "👨",
+ "name": "man"
+ },
+ {
+ "no": 139,
+ "code": "1F468 1F3FB",
+ "char": "👨🏻",
+ "name": "man: light skin tone"
+ },
+ {
+ "no": 140,
+ "code": "1F468 1F3FC",
+ "char": "👨🏼",
+ "name": "man: medium-light skin tone"
+ },
+ {
+ "no": 141,
+ "code": "1F468 1F3FD",
+ "char": "👨🏽",
+ "name": "man: medium skin tone"
+ },
+ {
+ "no": 142,
+ "code": "1F468 1F3FE",
+ "char": "👨🏾",
+ "name": "man: medium-dark skin tone"
+ },
+ {
+ "no": 143,
+ "code": "1F468 1F3FF",
+ "char": "👨🏿",
+ "name": "man: dark skin tone"
+ },
+ {
+ "no": 144,
+ "code": "1F469",
+ "char": "👩",
+ "name": "woman"
+ },
+ {
+ "no": 145,
+ "code": "1F469 1F3FB",
+ "char": "👩🏻",
+ "name": "woman: light skin tone"
+ },
+ {
+ "no": 146,
+ "code": "1F469 1F3FC",
+ "char": "👩🏼",
+ "name": "woman: medium-light skin tone"
+ },
+ {
+ "no": 147,
+ "code": "1F469 1F3FD",
+ "char": "👩🏽",
+ "name": "woman: medium skin tone"
+ },
+ {
+ "no": 148,
+ "code": "1F469 1F3FE",
+ "char": "👩🏾",
+ "name": "woman: medium-dark skin tone"
+ },
+ {
+ "no": 149,
+ "code": "1F469 1F3FF",
+ "char": "👩🏿",
+ "name": "woman: dark skin tone"
+ },
+ {
+ "no": 150,
+ "code": "1F9D3",
+ "char": "🧓",
+ "name": "⊛ older adult"
+ },
+ {
+ "no": 151,
+ "code": "1F9D3 1F3FB",
+ "char": "🧓🏻",
+ "name": "⊛ older adult: light skin tone"
+ },
+ {
+ "no": 152,
+ "code": "1F9D3 1F3FC",
+ "char": "🧓🏼",
+ "name": "⊛ older adult: medium-light skin tone"
+ },
+ {
+ "no": 153,
+ "code": "1F9D3 1F3FD",
+ "char": "🧓🏽",
+ "name": "⊛ older adult: medium skin tone"
+ },
+ {
+ "no": 154,
+ "code": "1F9D3 1F3FE",
+ "char": "🧓🏾",
+ "name": "⊛ older adult: medium-dark skin tone"
+ },
+ {
+ "no": 155,
+ "code": "1F9D3 1F3FF",
+ "char": "🧓🏿",
+ "name": "⊛ older adult: dark skin tone"
+ },
+ {
+ "no": 156,
+ "code": "1F474",
+ "char": "👴",
+ "name": "old man"
+ },
+ {
+ "no": 157,
+ "code": "1F474 1F3FB",
+ "char": "👴🏻",
+ "name": "old man: light skin tone"
+ },
+ {
+ "no": 158,
+ "code": "1F474 1F3FC",
+ "char": "👴🏼",
+ "name": "old man: medium-light skin tone"
+ },
+ {
+ "no": 159,
+ "code": "1F474 1F3FD",
+ "char": "👴🏽",
+ "name": "old man: medium skin tone"
+ },
+ {
+ "no": 160,
+ "code": "1F474 1F3FE",
+ "char": "👴🏾",
+ "name": "old man: medium-dark skin tone"
+ },
+ {
+ "no": 161,
+ "code": "1F474 1F3FF",
+ "char": "👴🏿",
+ "name": "old man: dark skin tone"
+ },
+ {
+ "no": 162,
+ "code": "1F475",
+ "char": "👵",
+ "name": "old woman"
+ },
+ {
+ "no": 163,
+ "code": "1F475 1F3FB",
+ "char": "👵🏻",
+ "name": "old woman: light skin tone"
+ },
+ {
+ "no": 164,
+ "code": "1F475 1F3FC",
+ "char": "👵🏼",
+ "name": "old woman: medium-light skin tone"
+ },
+ {
+ "no": 165,
+ "code": "1F475 1F3FD",
+ "char": "👵🏽",
+ "name": "old woman: medium skin tone"
+ },
+ {
+ "no": 166,
+ "code": "1F475 1F3FE",
+ "char": "👵🏾",
+ "name": "old woman: medium-dark skin tone"
+ },
+ {
+ "no": 167,
+ "code": "1F475 1F3FF",
+ "char": "👵🏿",
+ "name": "old woman: dark skin tone"
+ },
+ {
+ "no": 168,
+ "code": "1F468 200D 2695 FE0F",
+ "char": "👨‍⚕️",
+ "name": "man health worker"
+ },
+ {
+ "no": 169,
+ "code": "1F468 1F3FB 200D 2695 FE0F",
+ "char": "👨🏻‍⚕️",
+ "name": "man health worker: light skin tone"
+ },
+ {
+ "no": 170,
+ "code": "1F468 1F3FC 200D 2695 FE0F",
+ "char": "👨🏼‍⚕️",
+ "name": "man health worker: medium-light skin tone"
+ },
+ {
+ "no": 171,
+ "code": "1F468 1F3FD 200D 2695 FE0F",
+ "char": "👨🏽‍⚕️",
+ "name": "man health worker: medium skin tone"
+ },
+ {
+ "no": 172,
+ "code": "1F468 1F3FE 200D 2695 FE0F",
+ "char": "👨🏾‍⚕️",
+ "name": "man health worker: medium-dark skin tone"
+ },
+ {
+ "no": 173,
+ "code": "1F468 1F3FF 200D 2695 FE0F",
+ "char": "👨🏿‍⚕️",
+ "name": "man health worker: dark skin tone"
+ },
+ {
+ "no": 174,
+ "code": "1F469 200D 2695 FE0F",
+ "char": "👩‍⚕️",
+ "name": "woman health worker"
+ },
+ {
+ "no": 175,
+ "code": "1F469 1F3FB 200D 2695 FE0F",
+ "char": "👩🏻‍⚕️",
+ "name": "woman health worker: light skin tone"
+ },
+ {
+ "no": 176,
+ "code": "1F469 1F3FC 200D 2695 FE0F",
+ "char": "👩🏼‍⚕️",
+ "name": "woman health worker: medium-light skin tone"
+ },
+ {
+ "no": 177,
+ "code": "1F469 1F3FD 200D 2695 FE0F",
+ "char": "👩🏽‍⚕️",
+ "name": "woman health worker: medium skin tone"
+ },
+ {
+ "no": 178,
+ "code": "1F469 1F3FE 200D 2695 FE0F",
+ "char": "👩🏾‍⚕️",
+ "name": "woman health worker: medium-dark skin tone"
+ },
+ {
+ "no": 179,
+ "code": "1F469 1F3FF 200D 2695 FE0F",
+ "char": "👩🏿‍⚕️",
+ "name": "woman health worker: dark skin tone"
+ },
+ {
+ "no": 180,
+ "code": "1F468 200D 1F393",
+ "char": "👨‍🎓",
+ "name": "man student"
+ },
+ {
+ "no": 181,
+ "code": "1F468 1F3FB 200D 1F393",
+ "char": "👨🏻‍🎓",
+ "name": "man student: light skin tone"
+ },
+ {
+ "no": 182,
+ "code": "1F468 1F3FC 200D 1F393",
+ "char": "👨🏼‍🎓",
+ "name": "man student: medium-light skin tone"
+ },
+ {
+ "no": 183,
+ "code": "1F468 1F3FD 200D 1F393",
+ "char": "👨🏽‍🎓",
+ "name": "man student: medium skin tone"
+ },
+ {
+ "no": 184,
+ "code": "1F468 1F3FE 200D 1F393",
+ "char": "👨🏾‍🎓",
+ "name": "man student: medium-dark skin tone"
+ },
+ {
+ "no": 185,
+ "code": "1F468 1F3FF 200D 1F393",
+ "char": "👨🏿‍🎓",
+ "name": "man student: dark skin tone"
+ },
+ {
+ "no": 186,
+ "code": "1F469 200D 1F393",
+ "char": "👩‍🎓",
+ "name": "woman student"
+ },
+ {
+ "no": 187,
+ "code": "1F469 1F3FB 200D 1F393",
+ "char": "👩🏻‍🎓",
+ "name": "woman student: light skin tone"
+ },
+ {
+ "no": 188,
+ "code": "1F469 1F3FC 200D 1F393",
+ "char": "👩🏼‍🎓",
+ "name": "woman student: medium-light skin tone"
+ },
+ {
+ "no": 189,
+ "code": "1F469 1F3FD 200D 1F393",
+ "char": "👩🏽‍🎓",
+ "name": "woman student: medium skin tone"
+ },
+ {
+ "no": 190,
+ "code": "1F469 1F3FE 200D 1F393",
+ "char": "👩🏾‍🎓",
+ "name": "woman student: medium-dark skin tone"
+ },
+ {
+ "no": 191,
+ "code": "1F469 1F3FF 200D 1F393",
+ "char": "👩🏿‍🎓",
+ "name": "woman student: dark skin tone"
+ },
+ {
+ "no": 192,
+ "code": "1F468 200D 1F3EB",
+ "char": "👨‍🏫",
+ "name": "man teacher"
+ },
+ {
+ "no": 193,
+ "code": "1F468 1F3FB 200D 1F3EB",
+ "char": "👨🏻‍🏫",
+ "name": "man teacher: light skin tone"
+ },
+ {
+ "no": 194,
+ "code": "1F468 1F3FC 200D 1F3EB",
+ "char": "👨🏼‍🏫",
+ "name": "man teacher: medium-light skin tone"
+ },
+ {
+ "no": 195,
+ "code": "1F468 1F3FD 200D 1F3EB",
+ "char": "👨🏽‍🏫",
+ "name": "man teacher: medium skin tone"
+ },
+ {
+ "no": 196,
+ "code": "1F468 1F3FE 200D 1F3EB",
+ "char": "👨🏾‍🏫",
+ "name": "man teacher: medium-dark skin tone"
+ },
+ {
+ "no": 197,
+ "code": "1F468 1F3FF 200D 1F3EB",
+ "char": "👨🏿‍🏫",
+ "name": "man teacher: dark skin tone"
+ },
+ {
+ "no": 198,
+ "code": "1F469 200D 1F3EB",
+ "char": "👩‍🏫",
+ "name": "woman teacher"
+ },
+ {
+ "no": 199,
+ "code": "1F469 1F3FB 200D 1F3EB",
+ "char": "👩🏻‍🏫",
+ "name": "woman teacher: light skin tone"
+ },
+ {
+ "no": 200,
+ "code": "1F469 1F3FC 200D 1F3EB",
+ "char": "👩🏼‍🏫",
+ "name": "woman teacher: medium-light skin tone"
+ },
+ {
+ "no": 201,
+ "code": "1F469 1F3FD 200D 1F3EB",
+ "char": "👩🏽‍🏫",
+ "name": "woman teacher: medium skin tone"
+ },
+ {
+ "no": 202,
+ "code": "1F469 1F3FE 200D 1F3EB",
+ "char": "👩🏾‍🏫",
+ "name": "woman teacher: medium-dark skin tone"
+ },
+ {
+ "no": 203,
+ "code": "1F469 1F3FF 200D 1F3EB",
+ "char": "👩🏿‍🏫",
+ "name": "woman teacher: dark skin tone"
+ },
+ {
+ "no": 204,
+ "code": "1F468 200D 2696 FE0F",
+ "char": "👨‍⚖️",
+ "name": "man judge"
+ },
+ {
+ "no": 205,
+ "code": "1F468 1F3FB 200D 2696 FE0F",
+ "char": "👨🏻‍⚖️",
+ "name": "man judge: light skin tone"
+ },
+ {
+ "no": 206,
+ "code": "1F468 1F3FC 200D 2696 FE0F",
+ "char": "👨🏼‍⚖️",
+ "name": "man judge: medium-light skin tone"
+ },
+ {
+ "no": 207,
+ "code": "1F468 1F3FD 200D 2696 FE0F",
+ "char": "👨🏽‍⚖️",
+ "name": "man judge: medium skin tone"
+ },
+ {
+ "no": 208,
+ "code": "1F468 1F3FE 200D 2696 FE0F",
+ "char": "👨🏾‍⚖️",
+ "name": "man judge: medium-dark skin tone"
+ },
+ {
+ "no": 209,
+ "code": "1F468 1F3FF 200D 2696 FE0F",
+ "char": "👨🏿‍⚖️",
+ "name": "man judge: dark skin tone"
+ },
+ {
+ "no": 210,
+ "code": "1F469 200D 2696 FE0F",
+ "char": "👩‍⚖️",
+ "name": "woman judge"
+ },
+ {
+ "no": 211,
+ "code": "1F469 1F3FB 200D 2696 FE0F",
+ "char": "👩🏻‍⚖️",
+ "name": "woman judge: light skin tone"
+ },
+ {
+ "no": 212,
+ "code": "1F469 1F3FC 200D 2696 FE0F",
+ "char": "👩🏼‍⚖️",
+ "name": "woman judge: medium-light skin tone"
+ },
+ {
+ "no": 213,
+ "code": "1F469 1F3FD 200D 2696 FE0F",
+ "char": "👩🏽‍⚖️",
+ "name": "woman judge: medium skin tone"
+ },
+ {
+ "no": 214,
+ "code": "1F469 1F3FE 200D 2696 FE0F",
+ "char": "👩🏾‍⚖️",
+ "name": "woman judge: medium-dark skin tone"
+ },
+ {
+ "no": 215,
+ "code": "1F469 1F3FF 200D 2696 FE0F",
+ "char": "👩🏿‍⚖️",
+ "name": "woman judge: dark skin tone"
+ },
+ {
+ "no": 216,
+ "code": "1F468 200D 1F33E",
+ "char": "👨‍🌾",
+ "name": "man farmer"
+ },
+ {
+ "no": 217,
+ "code": "1F468 1F3FB 200D 1F33E",
+ "char": "👨🏻‍🌾",
+ "name": "man farmer: light skin tone"
+ },
+ {
+ "no": 218,
+ "code": "1F468 1F3FC 200D 1F33E",
+ "char": "👨🏼‍🌾",
+ "name": "man farmer: medium-light skin tone"
+ },
+ {
+ "no": 219,
+ "code": "1F468 1F3FD 200D 1F33E",
+ "char": "👨🏽‍🌾",
+ "name": "man farmer: medium skin tone"
+ },
+ {
+ "no": 220,
+ "code": "1F468 1F3FE 200D 1F33E",
+ "char": "👨🏾‍🌾",
+ "name": "man farmer: medium-dark skin tone"
+ },
+ {
+ "no": 221,
+ "code": "1F468 1F3FF 200D 1F33E",
+ "char": "👨🏿‍🌾",
+ "name": "man farmer: dark skin tone"
+ },
+ {
+ "no": 222,
+ "code": "1F469 200D 1F33E",
+ "char": "👩‍🌾",
+ "name": "woman farmer"
+ },
+ {
+ "no": 223,
+ "code": "1F469 1F3FB 200D 1F33E",
+ "char": "👩🏻‍🌾",
+ "name": "woman farmer: light skin tone"
+ },
+ {
+ "no": 224,
+ "code": "1F469 1F3FC 200D 1F33E",
+ "char": "👩🏼‍🌾",
+ "name": "woman farmer: medium-light skin tone"
+ },
+ {
+ "no": 225,
+ "code": "1F469 1F3FD 200D 1F33E",
+ "char": "👩🏽‍🌾",
+ "name": "woman farmer: medium skin tone"
+ },
+ {
+ "no": 226,
+ "code": "1F469 1F3FE 200D 1F33E",
+ "char": "👩🏾‍🌾",
+ "name": "woman farmer: medium-dark skin tone"
+ },
+ {
+ "no": 227,
+ "code": "1F469 1F3FF 200D 1F33E",
+ "char": "👩🏿‍🌾",
+ "name": "woman farmer: dark skin tone"
+ },
+ {
+ "no": 228,
+ "code": "1F468 200D 1F373",
+ "char": "👨‍🍳",
+ "name": "man cook"
+ },
+ {
+ "no": 229,
+ "code": "1F468 1F3FB 200D 1F373",
+ "char": "👨🏻‍🍳",
+ "name": "man cook: light skin tone"
+ },
+ {
+ "no": 230,
+ "code": "1F468 1F3FC 200D 1F373",
+ "char": "👨🏼‍🍳",
+ "name": "man cook: medium-light skin tone"
+ },
+ {
+ "no": 231,
+ "code": "1F468 1F3FD 200D 1F373",
+ "char": "👨🏽‍🍳",
+ "name": "man cook: medium skin tone"
+ },
+ {
+ "no": 232,
+ "code": "1F468 1F3FE 200D 1F373",
+ "char": "👨🏾‍🍳",
+ "name": "man cook: medium-dark skin tone"
+ },
+ {
+ "no": 233,
+ "code": "1F468 1F3FF 200D 1F373",
+ "char": "👨🏿‍🍳",
+ "name": "man cook: dark skin tone"
+ },
+ {
+ "no": 234,
+ "code": "1F469 200D 1F373",
+ "char": "👩‍🍳",
+ "name": "woman cook"
+ },
+ {
+ "no": 235,
+ "code": "1F469 1F3FB 200D 1F373",
+ "char": "👩🏻‍🍳",
+ "name": "woman cook: light skin tone"
+ },
+ {
+ "no": 236,
+ "code": "1F469 1F3FC 200D 1F373",
+ "char": "👩🏼‍🍳",
+ "name": "woman cook: medium-light skin tone"
+ },
+ {
+ "no": 237,
+ "code": "1F469 1F3FD 200D 1F373",
+ "char": "👩🏽‍🍳",
+ "name": "woman cook: medium skin tone"
+ },
+ {
+ "no": 238,
+ "code": "1F469 1F3FE 200D 1F373",
+ "char": "👩🏾‍🍳",
+ "name": "woman cook: medium-dark skin tone"
+ },
+ {
+ "no": 239,
+ "code": "1F469 1F3FF 200D 1F373",
+ "char": "👩🏿‍🍳",
+ "name": "woman cook: dark skin tone"
+ },
+ {
+ "no": 240,
+ "code": "1F468 200D 1F527",
+ "char": "👨‍🔧",
+ "name": "man mechanic"
+ },
+ {
+ "no": 241,
+ "code": "1F468 1F3FB 200D 1F527",
+ "char": "👨🏻‍🔧",
+ "name": "man mechanic: light skin tone"
+ },
+ {
+ "no": 242,
+ "code": "1F468 1F3FC 200D 1F527",
+ "char": "👨🏼‍🔧",
+ "name": "man mechanic: medium-light skin tone"
+ },
+ {
+ "no": 243,
+ "code": "1F468 1F3FD 200D 1F527",
+ "char": "👨🏽‍🔧",
+ "name": "man mechanic: medium skin tone"
+ },
+ {
+ "no": 244,
+ "code": "1F468 1F3FE 200D 1F527",
+ "char": "👨🏾‍🔧",
+ "name": "man mechanic: medium-dark skin tone"
+ },
+ {
+ "no": 245,
+ "code": "1F468 1F3FF 200D 1F527",
+ "char": "👨🏿‍🔧",
+ "name": "man mechanic: dark skin tone"
+ },
+ {
+ "no": 246,
+ "code": "1F469 200D 1F527",
+ "char": "👩‍🔧",
+ "name": "woman mechanic"
+ },
+ {
+ "no": 247,
+ "code": "1F469 1F3FB 200D 1F527",
+ "char": "👩🏻‍🔧",
+ "name": "woman mechanic: light skin tone"
+ },
+ {
+ "no": 248,
+ "code": "1F469 1F3FC 200D 1F527",
+ "char": "👩🏼‍🔧",
+ "name": "woman mechanic: medium-light skin tone"
+ },
+ {
+ "no": 249,
+ "code": "1F469 1F3FD 200D 1F527",
+ "char": "👩🏽‍🔧",
+ "name": "woman mechanic: medium skin tone"
+ },
+ {
+ "no": 250,
+ "code": "1F469 1F3FE 200D 1F527",
+ "char": "👩🏾‍🔧",
+ "name": "woman mechanic: medium-dark skin tone"
+ },
+ {
+ "no": 251,
+ "code": "1F469 1F3FF 200D 1F527",
+ "char": "👩🏿‍🔧",
+ "name": "woman mechanic: dark skin tone"
+ },
+ {
+ "no": 252,
+ "code": "1F468 200D 1F3ED",
+ "char": "👨‍🏭",
+ "name": "man factory worker"
+ },
+ {
+ "no": 253,
+ "code": "1F468 1F3FB 200D 1F3ED",
+ "char": "👨🏻‍🏭",
+ "name": "man factory worker: light skin tone"
+ },
+ {
+ "no": 254,
+ "code": "1F468 1F3FC 200D 1F3ED",
+ "char": "👨🏼‍🏭",
+ "name": "man factory worker: medium-light skin tone"
+ },
+ {
+ "no": 255,
+ "code": "1F468 1F3FD 200D 1F3ED",
+ "char": "👨🏽‍🏭",
+ "name": "man factory worker: medium skin tone"
+ },
+ {
+ "no": 256,
+ "code": "1F468 1F3FE 200D 1F3ED",
+ "char": "👨🏾‍🏭",
+ "name": "man factory worker: medium-dark skin tone"
+ },
+ {
+ "no": 257,
+ "code": "1F468 1F3FF 200D 1F3ED",
+ "char": "👨🏿‍🏭",
+ "name": "man factory worker: dark skin tone"
+ },
+ {
+ "no": 258,
+ "code": "1F469 200D 1F3ED",
+ "char": "👩‍🏭",
+ "name": "woman factory worker"
+ },
+ {
+ "no": 259,
+ "code": "1F469 1F3FB 200D 1F3ED",
+ "char": "👩🏻‍🏭",
+ "name": "woman factory worker: light skin tone"
+ },
+ {
+ "no": 260,
+ "code": "1F469 1F3FC 200D 1F3ED",
+ "char": "👩🏼‍🏭",
+ "name": "woman factory worker: medium-light skin tone"
+ },
+ {
+ "no": 261,
+ "code": "1F469 1F3FD 200D 1F3ED",
+ "char": "👩🏽‍🏭",
+ "name": "woman factory worker: medium skin tone"
+ },
+ {
+ "no": 262,
+ "code": "1F469 1F3FE 200D 1F3ED",
+ "char": "👩🏾‍🏭",
+ "name": "woman factory worker: medium-dark skin tone"
+ },
+ {
+ "no": 263,
+ "code": "1F469 1F3FF 200D 1F3ED",
+ "char": "👩🏿‍🏭",
+ "name": "woman factory worker: dark skin tone"
+ },
+ {
+ "no": 264,
+ "code": "1F468 200D 1F4BC",
+ "char": "👨‍💼",
+ "name": "man office worker"
+ },
+ {
+ "no": 265,
+ "code": "1F468 1F3FB 200D 1F4BC",
+ "char": "👨🏻‍💼",
+ "name": "man office worker: light skin tone"
+ },
+ {
+ "no": 266,
+ "code": "1F468 1F3FC 200D 1F4BC",
+ "char": "👨🏼‍💼",
+ "name": "man office worker: medium-light skin tone"
+ },
+ {
+ "no": 267,
+ "code": "1F468 1F3FD 200D 1F4BC",
+ "char": "👨🏽‍💼",
+ "name": "man office worker: medium skin tone"
+ },
+ {
+ "no": 268,
+ "code": "1F468 1F3FE 200D 1F4BC",
+ "char": "👨🏾‍💼",
+ "name": "man office worker: medium-dark skin tone"
+ },
+ {
+ "no": 269,
+ "code": "1F468 1F3FF 200D 1F4BC",
+ "char": "👨🏿‍💼",
+ "name": "man office worker: dark skin tone"
+ },
+ {
+ "no": 270,
+ "code": "1F469 200D 1F4BC",
+ "char": "👩‍💼",
+ "name": "woman office worker"
+ },
+ {
+ "no": 271,
+ "code": "1F469 1F3FB 200D 1F4BC",
+ "char": "👩🏻‍💼",
+ "name": "woman office worker: light skin tone"
+ },
+ {
+ "no": 272,
+ "code": "1F469 1F3FC 200D 1F4BC",
+ "char": "👩🏼‍💼",
+ "name": "woman office worker: medium-light skin tone"
+ },
+ {
+ "no": 273,
+ "code": "1F469 1F3FD 200D 1F4BC",
+ "char": "👩🏽‍💼",
+ "name": "woman office worker: medium skin tone"
+ },
+ {
+ "no": 274,
+ "code": "1F469 1F3FE 200D 1F4BC",
+ "char": "👩🏾‍💼",
+ "name": "woman office worker: medium-dark skin tone"
+ },
+ {
+ "no": 275,
+ "code": "1F469 1F3FF 200D 1F4BC",
+ "char": "👩🏿‍💼",
+ "name": "woman office worker: dark skin tone"
+ },
+ {
+ "no": 276,
+ "code": "1F468 200D 1F52C",
+ "char": "👨‍🔬",
+ "name": "man scientist"
+ },
+ {
+ "no": 277,
+ "code": "1F468 1F3FB 200D 1F52C",
+ "char": "👨🏻‍🔬",
+ "name": "man scientist: light skin tone"
+ },
+ {
+ "no": 278,
+ "code": "1F468 1F3FC 200D 1F52C",
+ "char": "👨🏼‍🔬",
+ "name": "man scientist: medium-light skin tone"
+ },
+ {
+ "no": 279,
+ "code": "1F468 1F3FD 200D 1F52C",
+ "char": "👨🏽‍🔬",
+ "name": "man scientist: medium skin tone"
+ },
+ {
+ "no": 280,
+ "code": "1F468 1F3FE 200D 1F52C",
+ "char": "👨🏾‍🔬",
+ "name": "man scientist: medium-dark skin tone"
+ },
+ {
+ "no": 281,
+ "code": "1F468 1F3FF 200D 1F52C",
+ "char": "👨🏿‍🔬",
+ "name": "man scientist: dark skin tone"
+ },
+ {
+ "no": 282,
+ "code": "1F469 200D 1F52C",
+ "char": "👩‍🔬",
+ "name": "woman scientist"
+ },
+ {
+ "no": 283,
+ "code": "1F469 1F3FB 200D 1F52C",
+ "char": "👩🏻‍🔬",
+ "name": "woman scientist: light skin tone"
+ },
+ {
+ "no": 284,
+ "code": "1F469 1F3FC 200D 1F52C",
+ "char": "👩🏼‍🔬",
+ "name": "woman scientist: medium-light skin tone"
+ },
+ {
+ "no": 285,
+ "code": "1F469 1F3FD 200D 1F52C",
+ "char": "👩🏽‍🔬",
+ "name": "woman scientist: medium skin tone"
+ },
+ {
+ "no": 286,
+ "code": "1F469 1F3FE 200D 1F52C",
+ "char": "👩🏾‍🔬",
+ "name": "woman scientist: medium-dark skin tone"
+ },
+ {
+ "no": 287,
+ "code": "1F469 1F3FF 200D 1F52C",
+ "char": "👩🏿‍🔬",
+ "name": "woman scientist: dark skin tone"
+ },
+ {
+ "no": 288,
+ "code": "1F468 200D 1F4BB",
+ "char": "👨‍💻",
+ "name": "man technologist"
+ },
+ {
+ "no": 289,
+ "code": "1F468 1F3FB 200D 1F4BB",
+ "char": "👨🏻‍💻",
+ "name": "man technologist: light skin tone"
+ },
+ {
+ "no": 290,
+ "code": "1F468 1F3FC 200D 1F4BB",
+ "char": "👨🏼‍💻",
+ "name": "man technologist: medium-light skin tone"
+ },
+ {
+ "no": 291,
+ "code": "1F468 1F3FD 200D 1F4BB",
+ "char": "👨🏽‍💻",
+ "name": "man technologist: medium skin tone"
+ },
+ {
+ "no": 292,
+ "code": "1F468 1F3FE 200D 1F4BB",
+ "char": "👨🏾‍💻",
+ "name": "man technologist: medium-dark skin tone"
+ },
+ {
+ "no": 293,
+ "code": "1F468 1F3FF 200D 1F4BB",
+ "char": "👨🏿‍💻",
+ "name": "man technologist: dark skin tone"
+ },
+ {
+ "no": 294,
+ "code": "1F469 200D 1F4BB",
+ "char": "👩‍💻",
+ "name": "woman technologist"
+ },
+ {
+ "no": 295,
+ "code": "1F469 1F3FB 200D 1F4BB",
+ "char": "👩🏻‍💻",
+ "name": "woman technologist: light skin tone"
+ },
+ {
+ "no": 296,
+ "code": "1F469 1F3FC 200D 1F4BB",
+ "char": "👩🏼‍💻",
+ "name": "woman technologist: medium-light skin tone"
+ },
+ {
+ "no": 297,
+ "code": "1F469 1F3FD 200D 1F4BB",
+ "char": "👩🏽‍💻",
+ "name": "woman technologist: medium skin tone"
+ },
+ {
+ "no": 298,
+ "code": "1F469 1F3FE 200D 1F4BB",
+ "char": "👩🏾‍💻",
+ "name": "woman technologist: medium-dark skin tone"
+ },
+ {
+ "no": 299,
+ "code": "1F469 1F3FF 200D 1F4BB",
+ "char": "👩🏿‍💻",
+ "name": "woman technologist: dark skin tone"
+ },
+ {
+ "no": 300,
+ "code": "1F468 200D 1F3A4",
+ "char": "👨‍🎤",
+ "name": "man singer"
+ },
+ {
+ "no": 301,
+ "code": "1F468 1F3FB 200D 1F3A4",
+ "char": "👨🏻‍🎤",
+ "name": "man singer: light skin tone"
+ },
+ {
+ "no": 302,
+ "code": "1F468 1F3FC 200D 1F3A4",
+ "char": "👨🏼‍🎤",
+ "name": "man singer: medium-light skin tone"
+ },
+ {
+ "no": 303,
+ "code": "1F468 1F3FD 200D 1F3A4",
+ "char": "👨🏽‍🎤",
+ "name": "man singer: medium skin tone"
+ },
+ {
+ "no": 304,
+ "code": "1F468 1F3FE 200D 1F3A4",
+ "char": "👨🏾‍🎤",
+ "name": "man singer: medium-dark skin tone"
+ },
+ {
+ "no": 305,
+ "code": "1F468 1F3FF 200D 1F3A4",
+ "char": "👨🏿‍🎤",
+ "name": "man singer: dark skin tone"
+ },
+ {
+ "no": 306,
+ "code": "1F469 200D 1F3A4",
+ "char": "👩‍🎤",
+ "name": "woman singer"
+ },
+ {
+ "no": 307,
+ "code": "1F469 1F3FB 200D 1F3A4",
+ "char": "👩🏻‍🎤",
+ "name": "woman singer: light skin tone"
+ },
+ {
+ "no": 308,
+ "code": "1F469 1F3FC 200D 1F3A4",
+ "char": "👩🏼‍🎤",
+ "name": "woman singer: medium-light skin tone"
+ },
+ {
+ "no": 309,
+ "code": "1F469 1F3FD 200D 1F3A4",
+ "char": "👩🏽‍🎤",
+ "name": "woman singer: medium skin tone"
+ },
+ {
+ "no": 310,
+ "code": "1F469 1F3FE 200D 1F3A4",
+ "char": "👩🏾‍🎤",
+ "name": "woman singer: medium-dark skin tone"
+ },
+ {
+ "no": 311,
+ "code": "1F469 1F3FF 200D 1F3A4",
+ "char": "👩🏿‍🎤",
+ "name": "woman singer: dark skin tone"
+ },
+ {
+ "no": 312,
+ "code": "1F468 200D 1F3A8",
+ "char": "👨‍🎨",
+ "name": "man artist"
+ },
+ {
+ "no": 313,
+ "code": "1F468 1F3FB 200D 1F3A8",
+ "char": "👨🏻‍🎨",
+ "name": "man artist: light skin tone"
+ },
+ {
+ "no": 314,
+ "code": "1F468 1F3FC 200D 1F3A8",
+ "char": "👨🏼‍🎨",
+ "name": "man artist: medium-light skin tone"
+ },
+ {
+ "no": 315,
+ "code": "1F468 1F3FD 200D 1F3A8",
+ "char": "👨🏽‍🎨",
+ "name": "man artist: medium skin tone"
+ },
+ {
+ "no": 316,
+ "code": "1F468 1F3FE 200D 1F3A8",
+ "char": "👨🏾‍🎨",
+ "name": "man artist: medium-dark skin tone"
+ },
+ {
+ "no": 317,
+ "code": "1F468 1F3FF 200D 1F3A8",
+ "char": "👨🏿‍🎨",
+ "name": "man artist: dark skin tone"
+ },
+ {
+ "no": 318,
+ "code": "1F469 200D 1F3A8",
+ "char": "👩‍🎨",
+ "name": "woman artist"
+ },
+ {
+ "no": 319,
+ "code": "1F469 1F3FB 200D 1F3A8",
+ "char": "👩🏻‍🎨",
+ "name": "woman artist: light skin tone"
+ },
+ {
+ "no": 320,
+ "code": "1F469 1F3FC 200D 1F3A8",
+ "char": "👩🏼‍🎨",
+ "name": "woman artist: medium-light skin tone"
+ },
+ {
+ "no": 321,
+ "code": "1F469 1F3FD 200D 1F3A8",
+ "char": "👩🏽‍🎨",
+ "name": "woman artist: medium skin tone"
+ },
+ {
+ "no": 322,
+ "code": "1F469 1F3FE 200D 1F3A8",
+ "char": "👩🏾‍🎨",
+ "name": "woman artist: medium-dark skin tone"
+ },
+ {
+ "no": 323,
+ "code": "1F469 1F3FF 200D 1F3A8",
+ "char": "👩🏿‍🎨",
+ "name": "woman artist: dark skin tone"
+ },
+ {
+ "no": 324,
+ "code": "1F468 200D 2708 FE0F",
+ "char": "👨‍✈️",
+ "name": "man pilot"
+ },
+ {
+ "no": 325,
+ "code": "1F468 1F3FB 200D 2708 FE0F",
+ "char": "👨🏻‍✈️",
+ "name": "man pilot: light skin tone"
+ },
+ {
+ "no": 326,
+ "code": "1F468 1F3FC 200D 2708 FE0F",
+ "char": "👨🏼‍✈️",
+ "name": "man pilot: medium-light skin tone"
+ },
+ {
+ "no": 327,
+ "code": "1F468 1F3FD 200D 2708 FE0F",
+ "char": "👨🏽‍✈️",
+ "name": "man pilot: medium skin tone"
+ },
+ {
+ "no": 328,
+ "code": "1F468 1F3FE 200D 2708 FE0F",
+ "char": "👨🏾‍✈️",
+ "name": "man pilot: medium-dark skin tone"
+ },
+ {
+ "no": 329,
+ "code": "1F468 1F3FF 200D 2708 FE0F",
+ "char": "👨🏿‍✈️",
+ "name": "man pilot: dark skin tone"
+ },
+ {
+ "no": 330,
+ "code": "1F469 200D 2708 FE0F",
+ "char": "👩‍✈️",
+ "name": "woman pilot"
+ },
+ {
+ "no": 331,
+ "code": "1F469 1F3FB 200D 2708 FE0F",
+ "char": "👩🏻‍✈️",
+ "name": "woman pilot: light skin tone"
+ },
+ {
+ "no": 332,
+ "code": "1F469 1F3FC 200D 2708 FE0F",
+ "char": "👩🏼‍✈️",
+ "name": "woman pilot: medium-light skin tone"
+ },
+ {
+ "no": 333,
+ "code": "1F469 1F3FD 200D 2708 FE0F",
+ "char": "👩🏽‍✈️",
+ "name": "woman pilot: medium skin tone"
+ },
+ {
+ "no": 334,
+ "code": "1F469 1F3FE 200D 2708 FE0F",
+ "char": "👩🏾‍✈️",
+ "name": "woman pilot: medium-dark skin tone"
+ },
+ {
+ "no": 335,
+ "code": "1F469 1F3FF 200D 2708 FE0F",
+ "char": "👩🏿‍✈️",
+ "name": "woman pilot: dark skin tone"
+ },
+ {
+ "no": 336,
+ "code": "1F468 200D 1F680",
+ "char": "👨‍🚀",
+ "name": "man astronaut"
+ },
+ {
+ "no": 337,
+ "code": "1F468 1F3FB 200D 1F680",
+ "char": "👨🏻‍🚀",
+ "name": "man astronaut: light skin tone"
+ },
+ {
+ "no": 338,
+ "code": "1F468 1F3FC 200D 1F680",
+ "char": "👨🏼‍🚀",
+ "name": "man astronaut: medium-light skin tone"
+ },
+ {
+ "no": 339,
+ "code": "1F468 1F3FD 200D 1F680",
+ "char": "👨🏽‍🚀",
+ "name": "man astronaut: medium skin tone"
+ },
+ {
+ "no": 340,
+ "code": "1F468 1F3FE 200D 1F680",
+ "char": "👨🏾‍🚀",
+ "name": "man astronaut: medium-dark skin tone"
+ },
+ {
+ "no": 341,
+ "code": "1F468 1F3FF 200D 1F680",
+ "char": "👨🏿‍🚀",
+ "name": "man astronaut: dark skin tone"
+ },
+ {
+ "no": 342,
+ "code": "1F469 200D 1F680",
+ "char": "👩‍🚀",
+ "name": "woman astronaut"
+ },
+ {
+ "no": 343,
+ "code": "1F469 1F3FB 200D 1F680",
+ "char": "👩🏻‍🚀",
+ "name": "woman astronaut: light skin tone"
+ },
+ {
+ "no": 344,
+ "code": "1F469 1F3FC 200D 1F680",
+ "char": "👩🏼‍🚀",
+ "name": "woman astronaut: medium-light skin tone"
+ },
+ {
+ "no": 345,
+ "code": "1F469 1F3FD 200D 1F680",
+ "char": "👩🏽‍🚀",
+ "name": "woman astronaut: medium skin tone"
+ },
+ {
+ "no": 346,
+ "code": "1F469 1F3FE 200D 1F680",
+ "char": "👩🏾‍🚀",
+ "name": "woman astronaut: medium-dark skin tone"
+ },
+ {
+ "no": 347,
+ "code": "1F469 1F3FF 200D 1F680",
+ "char": "👩🏿‍🚀",
+ "name": "woman astronaut: dark skin tone"
+ },
+ {
+ "no": 348,
+ "code": "1F468 200D 1F692",
+ "char": "👨‍🚒",
+ "name": "man firefighter"
+ },
+ {
+ "no": 349,
+ "code": "1F468 1F3FB 200D 1F692",
+ "char": "👨🏻‍🚒",
+ "name": "man firefighter: light skin tone"
+ },
+ {
+ "no": 350,
+ "code": "1F468 1F3FC 200D 1F692",
+ "char": "👨🏼‍🚒",
+ "name": "man firefighter: medium-light skin tone"
+ },
+ {
+ "no": 351,
+ "code": "1F468 1F3FD 200D 1F692",
+ "char": "👨🏽‍🚒",
+ "name": "man firefighter: medium skin tone"
+ },
+ {
+ "no": 352,
+ "code": "1F468 1F3FE 200D 1F692",
+ "char": "👨🏾‍🚒",
+ "name": "man firefighter: medium-dark skin tone"
+ },
+ {
+ "no": 353,
+ "code": "1F468 1F3FF 200D 1F692",
+ "char": "👨🏿‍🚒",
+ "name": "man firefighter: dark skin tone"
+ },
+ {
+ "no": 354,
+ "code": "1F469 200D 1F692",
+ "char": "👩‍🚒",
+ "name": "woman firefighter"
+ },
+ {
+ "no": 355,
+ "code": "1F469 1F3FB 200D 1F692",
+ "char": "👩🏻‍🚒",
+ "name": "woman firefighter: light skin tone"
+ },
+ {
+ "no": 356,
+ "code": "1F469 1F3FC 200D 1F692",
+ "char": "👩🏼‍🚒",
+ "name": "woman firefighter: medium-light skin tone"
+ },
+ {
+ "no": 357,
+ "code": "1F469 1F3FD 200D 1F692",
+ "char": "👩🏽‍🚒",
+ "name": "woman firefighter: medium skin tone"
+ },
+ {
+ "no": 358,
+ "code": "1F469 1F3FE 200D 1F692",
+ "char": "👩🏾‍🚒",
+ "name": "woman firefighter: medium-dark skin tone"
+ },
+ {
+ "no": 359,
+ "code": "1F469 1F3FF 200D 1F692",
+ "char": "👩🏿‍🚒",
+ "name": "woman firefighter: dark skin tone"
+ },
+ {
+ "no": 360,
+ "code": "1F46E",
+ "char": "👮",
+ "name": "police officer"
+ },
+ {
+ "no": 361,
+ "code": "1F46E 1F3FB",
+ "char": "👮🏻",
+ "name": "police officer: light skin tone"
+ },
+ {
+ "no": 362,
+ "code": "1F46E 1F3FC",
+ "char": "👮🏼",
+ "name": "police officer: medium-light skin tone"
+ },
+ {
+ "no": 363,
+ "code": "1F46E 1F3FD",
+ "char": "👮🏽",
+ "name": "police officer: medium skin tone"
+ },
+ {
+ "no": 364,
+ "code": "1F46E 1F3FE",
+ "char": "👮🏾",
+ "name": "police officer: medium-dark skin tone"
+ },
+ {
+ "no": 365,
+ "code": "1F46E 1F3FF",
+ "char": "👮🏿",
+ "name": "police officer: dark skin tone"
+ },
+ {
+ "no": 366,
+ "code": "1F46E 200D 2642 FE0F",
+ "char": "👮‍♂️",
+ "name": "man police officer"
+ },
+ {
+ "no": 367,
+ "code": "1F46E 1F3FB 200D 2642 FE0F",
+ "char": "👮🏻‍♂️",
+ "name": "man police officer: light skin tone"
+ },
+ {
+ "no": 368,
+ "code": "1F46E 1F3FC 200D 2642 FE0F",
+ "char": "👮🏼‍♂️",
+ "name": "man police officer: medium-light skin tone"
+ },
+ {
+ "no": 369,
+ "code": "1F46E 1F3FD 200D 2642 FE0F",
+ "char": "👮🏽‍♂️",
+ "name": "man police officer: medium skin tone"
+ },
+ {
+ "no": 370,
+ "code": "1F46E 1F3FE 200D 2642 FE0F",
+ "char": "👮🏾‍♂️",
+ "name": "man police officer: medium-dark skin tone"
+ },
+ {
+ "no": 371,
+ "code": "1F46E 1F3FF 200D 2642 FE0F",
+ "char": "👮🏿‍♂️",
+ "name": "man police officer: dark skin tone"
+ },
+ {
+ "no": 372,
+ "code": "1F46E 200D 2640 FE0F",
+ "char": "👮‍♀️",
+ "name": "woman police officer"
+ },
+ {
+ "no": 373,
+ "code": "1F46E 1F3FB 200D 2640 FE0F",
+ "char": "👮🏻‍♀️",
+ "name": "woman police officer: light skin tone"
+ },
+ {
+ "no": 374,
+ "code": "1F46E 1F3FC 200D 2640 FE0F",
+ "char": "👮🏼‍♀️",
+ "name": "woman police officer: medium-light skin tone"
+ },
+ {
+ "no": 375,
+ "code": "1F46E 1F3FD 200D 2640 FE0F",
+ "char": "👮🏽‍♀️",
+ "name": "woman police officer: medium skin tone"
+ },
+ {
+ "no": 376,
+ "code": "1F46E 1F3FE 200D 2640 FE0F",
+ "char": "👮🏾‍♀️",
+ "name": "woman police officer: medium-dark skin tone"
+ },
+ {
+ "no": 377,
+ "code": "1F46E 1F3FF 200D 2640 FE0F",
+ "char": "👮🏿‍♀️",
+ "name": "woman police officer: dark skin tone"
+ },
+ {
+ "no": 378,
+ "code": "1F575",
+ "char": "🕵",
+ "name": "detective"
+ },
+ {
+ "no": 379,
+ "code": "1F575 1F3FB",
+ "char": "🕵🏻",
+ "name": "detective: light skin tone"
+ },
+ {
+ "no": 380,
+ "code": "1F575 1F3FC",
+ "char": "🕵🏼",
+ "name": "detective: medium-light skin tone"
+ },
+ {
+ "no": 381,
+ "code": "1F575 1F3FD",
+ "char": "🕵🏽",
+ "name": "detective: medium skin tone"
+ },
+ {
+ "no": 382,
+ "code": "1F575 1F3FE",
+ "char": "🕵🏾",
+ "name": "detective: medium-dark skin tone"
+ },
+ {
+ "no": 383,
+ "code": "1F575 1F3FF",
+ "char": "🕵🏿",
+ "name": "detective: dark skin tone"
+ },
+ {
+ "no": 384,
+ "code": "1F575 FE0F 200D 2642 FE0F",
+ "char": "🕵️‍♂️",
+ "name": "man detective"
+ },
+ {
+ "no": 385,
+ "code": "1F575 1F3FB 200D 2642 FE0F",
+ "char": "🕵🏻‍♂️",
+ "name": "man detective: light skin tone"
+ },
+ {
+ "no": 386,
+ "code": "1F575 1F3FC 200D 2642 FE0F",
+ "char": "🕵🏼‍♂️",
+ "name": "man detective: medium-light skin tone"
+ },
+ {
+ "no": 387,
+ "code": "1F575 1F3FD 200D 2642 FE0F",
+ "char": "🕵🏽‍♂️",
+ "name": "man detective: medium skin tone"
+ },
+ {
+ "no": 388,
+ "code": "1F575 1F3FE 200D 2642 FE0F",
+ "char": "🕵🏾‍♂️",
+ "name": "man detective: medium-dark skin tone"
+ },
+ {
+ "no": 389,
+ "code": "1F575 1F3FF 200D 2642 FE0F",
+ "char": "🕵🏿‍♂️",
+ "name": "man detective: dark skin tone"
+ },
+ {
+ "no": 390,
+ "code": "1F575 FE0F 200D 2640 FE0F",
+ "char": "🕵️‍♀️",
+ "name": "woman detective"
+ },
+ {
+ "no": 391,
+ "code": "1F575 1F3FB 200D 2640 FE0F",
+ "char": "🕵🏻‍♀️",
+ "name": "woman detective: light skin tone"
+ },
+ {
+ "no": 392,
+ "code": "1F575 1F3FC 200D 2640 FE0F",
+ "char": "🕵🏼‍♀️",
+ "name": "woman detective: medium-light skin tone"
+ },
+ {
+ "no": 393,
+ "code": "1F575 1F3FD 200D 2640 FE0F",
+ "char": "🕵🏽‍♀️",
+ "name": "woman detective: medium skin tone"
+ },
+ {
+ "no": 394,
+ "code": "1F575 1F3FE 200D 2640 FE0F",
+ "char": "🕵🏾‍♀️",
+ "name": "woman detective: medium-dark skin tone"
+ },
+ {
+ "no": 395,
+ "code": "1F575 1F3FF 200D 2640 FE0F",
+ "char": "🕵🏿‍♀️",
+ "name": "woman detective: dark skin tone"
+ },
+ {
+ "no": 396,
+ "code": "1F482",
+ "char": "💂",
+ "name": "guard"
+ },
+ {
+ "no": 397,
+ "code": "1F482 1F3FB",
+ "char": "💂🏻",
+ "name": "guard: light skin tone"
+ },
+ {
+ "no": 398,
+ "code": "1F482 1F3FC",
+ "char": "💂🏼",
+ "name": "guard: medium-light skin tone"
+ },
+ {
+ "no": 399,
+ "code": "1F482 1F3FD",
+ "char": "💂🏽",
+ "name": "guard: medium skin tone"
+ },
+ {
+ "no": 400,
+ "code": "1F482 1F3FE",
+ "char": "💂🏾",
+ "name": "guard: medium-dark skin tone"
+ },
+ {
+ "no": 401,
+ "code": "1F482 1F3FF",
+ "char": "💂🏿",
+ "name": "guard: dark skin tone"
+ },
+ {
+ "no": 402,
+ "code": "1F482 200D 2642 FE0F",
+ "char": "💂‍♂️",
+ "name": "man guard"
+ },
+ {
+ "no": 403,
+ "code": "1F482 1F3FB 200D 2642 FE0F",
+ "char": "💂🏻‍♂️",
+ "name": "man guard: light skin tone"
+ },
+ {
+ "no": 404,
+ "code": "1F482 1F3FC 200D 2642 FE0F",
+ "char": "💂🏼‍♂️",
+ "name": "man guard: medium-light skin tone"
+ },
+ {
+ "no": 405,
+ "code": "1F482 1F3FD 200D 2642 FE0F",
+ "char": "💂🏽‍♂️",
+ "name": "man guard: medium skin tone"
+ },
+ {
+ "no": 406,
+ "code": "1F482 1F3FE 200D 2642 FE0F",
+ "char": "💂🏾‍♂️",
+ "name": "man guard: medium-dark skin tone"
+ },
+ {
+ "no": 407,
+ "code": "1F482 1F3FF 200D 2642 FE0F",
+ "char": "💂🏿‍♂️",
+ "name": "man guard: dark skin tone"
+ },
+ {
+ "no": 408,
+ "code": "1F482 200D 2640 FE0F",
+ "char": "💂‍♀️",
+ "name": "woman guard"
+ },
+ {
+ "no": 409,
+ "code": "1F482 1F3FB 200D 2640 FE0F",
+ "char": "💂🏻‍♀️",
+ "name": "woman guard: light skin tone"
+ },
+ {
+ "no": 410,
+ "code": "1F482 1F3FC 200D 2640 FE0F",
+ "char": "💂🏼‍♀️",
+ "name": "woman guard: medium-light skin tone"
+ },
+ {
+ "no": 411,
+ "code": "1F482 1F3FD 200D 2640 FE0F",
+ "char": "💂🏽‍♀️",
+ "name": "woman guard: medium skin tone"
+ },
+ {
+ "no": 412,
+ "code": "1F482 1F3FE 200D 2640 FE0F",
+ "char": "💂🏾‍♀️",
+ "name": "woman guard: medium-dark skin tone"
+ },
+ {
+ "no": 413,
+ "code": "1F482 1F3FF 200D 2640 FE0F",
+ "char": "💂🏿‍♀️",
+ "name": "woman guard: dark skin tone"
+ },
+ {
+ "no": 414,
+ "code": "1F477",
+ "char": "👷",
+ "name": "construction worker"
+ },
+ {
+ "no": 415,
+ "code": "1F477 1F3FB",
+ "char": "👷🏻",
+ "name": "construction worker: light skin tone"
+ },
+ {
+ "no": 416,
+ "code": "1F477 1F3FC",
+ "char": "👷🏼",
+ "name": "construction worker: medium-light skin tone"
+ },
+ {
+ "no": 417,
+ "code": "1F477 1F3FD",
+ "char": "👷🏽",
+ "name": "construction worker: medium skin tone"
+ },
+ {
+ "no": 418,
+ "code": "1F477 1F3FE",
+ "char": "👷🏾",
+ "name": "construction worker: medium-dark skin tone"
+ },
+ {
+ "no": 419,
+ "code": "1F477 1F3FF",
+ "char": "👷🏿",
+ "name": "construction worker: dark skin tone"
+ },
+ {
+ "no": 420,
+ "code": "1F477 200D 2642 FE0F",
+ "char": "👷‍♂️",
+ "name": "man construction worker"
+ },
+ {
+ "no": 421,
+ "code": "1F477 1F3FB 200D 2642 FE0F",
+ "char": "👷🏻‍♂️",
+ "name": "man construction worker: light skin tone"
+ },
+ {
+ "no": 422,
+ "code": "1F477 1F3FC 200D 2642 FE0F",
+ "char": "👷🏼‍♂️",
+ "name": "man construction worker: medium-light skin tone"
+ },
+ {
+ "no": 423,
+ "code": "1F477 1F3FD 200D 2642 FE0F",
+ "char": "👷🏽‍♂️",
+ "name": "man construction worker: medium skin tone"
+ },
+ {
+ "no": 424,
+ "code": "1F477 1F3FE 200D 2642 FE0F",
+ "char": "👷🏾‍♂️",
+ "name": "man construction worker: medium-dark skin tone"
+ },
+ {
+ "no": 425,
+ "code": "1F477 1F3FF 200D 2642 FE0F",
+ "char": "👷🏿‍♂️",
+ "name": "man construction worker: dark skin tone"
+ },
+ {
+ "no": 426,
+ "code": "1F477 200D 2640 FE0F",
+ "char": "👷‍♀️",
+ "name": "woman construction worker"
+ },
+ {
+ "no": 427,
+ "code": "1F477 1F3FB 200D 2640 FE0F",
+ "char": "👷🏻‍♀️",
+ "name": "woman construction worker: light skin tone"
+ },
+ {
+ "no": 428,
+ "code": "1F477 1F3FC 200D 2640 FE0F",
+ "char": "👷🏼‍♀️",
+ "name": "woman construction worker: medium-light skin tone"
+ },
+ {
+ "no": 429,
+ "code": "1F477 1F3FD 200D 2640 FE0F",
+ "char": "👷🏽‍♀️",
+ "name": "woman construction worker: medium skin tone"
+ },
+ {
+ "no": 430,
+ "code": "1F477 1F3FE 200D 2640 FE0F",
+ "char": "👷🏾‍♀️",
+ "name": "woman construction worker: medium-dark skin tone"
+ },
+ {
+ "no": 431,
+ "code": "1F477 1F3FF 200D 2640 FE0F",
+ "char": "👷🏿‍♀️",
+ "name": "woman construction worker: dark skin tone"
+ },
+ {
+ "no": 432,
+ "code": "1F934",
+ "char": "🤴",
+ "name": "prince"
+ },
+ {
+ "no": 433,
+ "code": "1F934 1F3FB",
+ "char": "🤴🏻",
+ "name": "prince: light skin tone"
+ },
+ {
+ "no": 434,
+ "code": "1F934 1F3FC",
+ "char": "🤴🏼",
+ "name": "prince: medium-light skin tone"
+ },
+ {
+ "no": 435,
+ "code": "1F934 1F3FD",
+ "char": "🤴🏽",
+ "name": "prince: medium skin tone"
+ },
+ {
+ "no": 436,
+ "code": "1F934 1F3FE",
+ "char": "🤴🏾",
+ "name": "prince: medium-dark skin tone"
+ },
+ {
+ "no": 437,
+ "code": "1F934 1F3FF",
+ "char": "🤴🏿",
+ "name": "prince: dark skin tone"
+ },
+ {
+ "no": 438,
+ "code": "1F478",
+ "char": "👸",
+ "name": "princess"
+ },
+ {
+ "no": 439,
+ "code": "1F478 1F3FB",
+ "char": "👸🏻",
+ "name": "princess: light skin tone"
+ },
+ {
+ "no": 440,
+ "code": "1F478 1F3FC",
+ "char": "👸🏼",
+ "name": "princess: medium-light skin tone"
+ },
+ {
+ "no": 441,
+ "code": "1F478 1F3FD",
+ "char": "👸🏽",
+ "name": "princess: medium skin tone"
+ },
+ {
+ "no": 442,
+ "code": "1F478 1F3FE",
+ "char": "👸🏾",
+ "name": "princess: medium-dark skin tone"
+ },
+ {
+ "no": 443,
+ "code": "1F478 1F3FF",
+ "char": "👸🏿",
+ "name": "princess: dark skin tone"
+ },
+ {
+ "no": 444,
+ "code": "1F473",
+ "char": "👳",
+ "name": "person wearing turban"
+ },
+ {
+ "no": 445,
+ "code": "1F473 1F3FB",
+ "char": "👳🏻",
+ "name": "person wearing turban: light skin tone"
+ },
+ {
+ "no": 446,
+ "code": "1F473 1F3FC",
+ "char": "👳🏼",
+ "name": "person wearing turban: medium-light skin tone"
+ },
+ {
+ "no": 447,
+ "code": "1F473 1F3FD",
+ "char": "👳🏽",
+ "name": "person wearing turban: medium skin tone"
+ },
+ {
+ "no": 448,
+ "code": "1F473 1F3FE",
+ "char": "👳🏾",
+ "name": "person wearing turban: medium-dark skin tone"
+ },
+ {
+ "no": 449,
+ "code": "1F473 1F3FF",
+ "char": "👳🏿",
+ "name": "person wearing turban: dark skin tone"
+ },
+ {
+ "no": 450,
+ "code": "1F473 200D 2642 FE0F",
+ "char": "👳‍♂️",
+ "name": "man wearing turban"
+ },
+ {
+ "no": 451,
+ "code": "1F473 1F3FB 200D 2642 FE0F",
+ "char": "👳🏻‍♂️",
+ "name": "man wearing turban: light skin tone"
+ },
+ {
+ "no": 452,
+ "code": "1F473 1F3FC 200D 2642 FE0F",
+ "char": "👳🏼‍♂️",
+ "name": "man wearing turban: medium-light skin tone"
+ },
+ {
+ "no": 453,
+ "code": "1F473 1F3FD 200D 2642 FE0F",
+ "char": "👳🏽‍♂️",
+ "name": "man wearing turban: medium skin tone"
+ },
+ {
+ "no": 454,
+ "code": "1F473 1F3FE 200D 2642 FE0F",
+ "char": "👳🏾‍♂️",
+ "name": "man wearing turban: medium-dark skin tone"
+ },
+ {
+ "no": 455,
+ "code": "1F473 1F3FF 200D 2642 FE0F",
+ "char": "👳🏿‍♂️",
+ "name": "man wearing turban: dark skin tone"
+ },
+ {
+ "no": 456,
+ "code": "1F473 200D 2640 FE0F",
+ "char": "👳‍♀️",
+ "name": "woman wearing turban"
+ },
+ {
+ "no": 457,
+ "code": "1F473 1F3FB 200D 2640 FE0F",
+ "char": "👳🏻‍♀️",
+ "name": "woman wearing turban: light skin tone"
+ },
+ {
+ "no": 458,
+ "code": "1F473 1F3FC 200D 2640 FE0F",
+ "char": "👳🏼‍♀️",
+ "name": "woman wearing turban: medium-light skin tone"
+ },
+ {
+ "no": 459,
+ "code": "1F473 1F3FD 200D 2640 FE0F",
+ "char": "👳🏽‍♀️",
+ "name": "woman wearing turban: medium skin tone"
+ },
+ {
+ "no": 460,
+ "code": "1F473 1F3FE 200D 2640 FE0F",
+ "char": "👳🏾‍♀️",
+ "name": "woman wearing turban: medium-dark skin tone"
+ },
+ {
+ "no": 461,
+ "code": "1F473 1F3FF 200D 2640 FE0F",
+ "char": "👳🏿‍♀️",
+ "name": "woman wearing turban: dark skin tone"
+ },
+ {
+ "no": 462,
+ "code": "1F472",
+ "char": "👲",
+ "name": "man with Chinese cap"
+ },
+ {
+ "no": 463,
+ "code": "1F472 1F3FB",
+ "char": "👲🏻",
+ "name": "man with Chinese cap: light skin tone"
+ },
+ {
+ "no": 464,
+ "code": "1F472 1F3FC",
+ "char": "👲🏼",
+ "name": "man with Chinese cap: medium-light skin tone"
+ },
+ {
+ "no": 465,
+ "code": "1F472 1F3FD",
+ "char": "👲🏽",
+ "name": "man with Chinese cap: medium skin tone"
+ },
+ {
+ "no": 466,
+ "code": "1F472 1F3FE",
+ "char": "👲🏾",
+ "name": "man with Chinese cap: medium-dark skin tone"
+ },
+ {
+ "no": 467,
+ "code": "1F472 1F3FF",
+ "char": "👲🏿",
+ "name": "man with Chinese cap: dark skin tone"
+ },
+ {
+ "no": 468,
+ "code": "1F9D5",
+ "char": "🧕",
+ "name": "⊛ woman with headscarf"
+ },
+ {
+ "no": 469,
+ "code": "1F9D5 1F3FB",
+ "char": "🧕🏻",
+ "name": "⊛ woman with headscarf: light skin tone"
+ },
+ {
+ "no": 470,
+ "code": "1F9D5 1F3FC",
+ "char": "🧕🏼",
+ "name": "⊛ woman with headscarf: medium-light skin tone"
+ },
+ {
+ "no": 471,
+ "code": "1F9D5 1F3FD",
+ "char": "🧕🏽",
+ "name": "⊛ woman with headscarf: medium skin tone"
+ },
+ {
+ "no": 472,
+ "code": "1F9D5 1F3FE",
+ "char": "🧕🏾",
+ "name": "⊛ woman with headscarf: medium-dark skin tone"
+ },
+ {
+ "no": 473,
+ "code": "1F9D5 1F3FF",
+ "char": "🧕🏿",
+ "name": "⊛ woman with headscarf: dark skin tone"
+ },
+ {
+ "no": 474,
+ "code": "1F9D4",
+ "char": "🧔",
+ "name": "⊛ bearded person"
+ },
+ {
+ "no": 475,
+ "code": "1F9D4 1F3FB",
+ "char": "🧔🏻",
+ "name": "⊛ bearded person: light skin tone"
+ },
+ {
+ "no": 476,
+ "code": "1F9D4 1F3FC",
+ "char": "🧔🏼",
+ "name": "⊛ bearded person: medium-light skin tone"
+ },
+ {
+ "no": 477,
+ "code": "1F9D4 1F3FD",
+ "char": "🧔🏽",
+ "name": "⊛ bearded person: medium skin tone"
+ },
+ {
+ "no": 478,
+ "code": "1F9D4 1F3FE",
+ "char": "🧔🏾",
+ "name": "⊛ bearded person: medium-dark skin tone"
+ },
+ {
+ "no": 479,
+ "code": "1F9D4 1F3FF",
+ "char": "🧔🏿",
+ "name": "⊛ bearded person: dark skin tone"
+ },
+ {
+ "no": 480,
+ "code": "1F471",
+ "char": "👱",
+ "name": "blond-haired person"
+ },
+ {
+ "no": 481,
+ "code": "1F471 1F3FB",
+ "char": "👱🏻",
+ "name": "blond-haired person: light skin tone"
+ },
+ {
+ "no": 482,
+ "code": "1F471 1F3FC",
+ "char": "👱🏼",
+ "name": "blond-haired person: medium-light skin tone"
+ },
+ {
+ "no": 483,
+ "code": "1F471 1F3FD",
+ "char": "👱🏽",
+ "name": "blond-haired person: medium skin tone"
+ },
+ {
+ "no": 484,
+ "code": "1F471 1F3FE",
+ "char": "👱🏾",
+ "name": "blond-haired person: medium-dark skin tone"
+ },
+ {
+ "no": 485,
+ "code": "1F471 1F3FF",
+ "char": "👱🏿",
+ "name": "blond-haired person: dark skin tone"
+ },
+ {
+ "no": 486,
+ "code": "1F471 200D 2642 FE0F",
+ "char": "👱‍♂️",
+ "name": "blond-haired man"
+ },
+ {
+ "no": 487,
+ "code": "1F471 1F3FB 200D 2642 FE0F",
+ "char": "👱🏻‍♂️",
+ "name": "blond-haired man: light skin tone"
+ },
+ {
+ "no": 488,
+ "code": "1F471 1F3FC 200D 2642 FE0F",
+ "char": "👱🏼‍♂️",
+ "name": "blond-haired man: medium-light skin tone"
+ },
+ {
+ "no": 489,
+ "code": "1F471 1F3FD 200D 2642 FE0F",
+ "char": "👱🏽‍♂️",
+ "name": "blond-haired man: medium skin tone"
+ },
+ {
+ "no": 490,
+ "code": "1F471 1F3FE 200D 2642 FE0F",
+ "char": "👱🏾‍♂️",
+ "name": "blond-haired man: medium-dark skin tone"
+ },
+ {
+ "no": 491,
+ "code": "1F471 1F3FF 200D 2642 FE0F",
+ "char": "👱🏿‍♂️",
+ "name": "blond-haired man: dark skin tone"
+ },
+ {
+ "no": 492,
+ "code": "1F471 200D 2640 FE0F",
+ "char": "👱‍♀️",
+ "name": "blond-haired woman"
+ },
+ {
+ "no": 493,
+ "code": "1F471 1F3FB 200D 2640 FE0F",
+ "char": "👱🏻‍♀️",
+ "name": "blond-haired woman: light skin tone"
+ },
+ {
+ "no": 494,
+ "code": "1F471 1F3FC 200D 2640 FE0F",
+ "char": "👱🏼‍♀️",
+ "name": "blond-haired woman: medium-light skin tone"
+ },
+ {
+ "no": 495,
+ "code": "1F471 1F3FD 200D 2640 FE0F",
+ "char": "👱🏽‍♀️",
+ "name": "blond-haired woman: medium skin tone"
+ },
+ {
+ "no": 496,
+ "code": "1F471 1F3FE 200D 2640 FE0F",
+ "char": "👱🏾‍♀️",
+ "name": "blond-haired woman: medium-dark skin tone"
+ },
+ {
+ "no": 497,
+ "code": "1F471 1F3FF 200D 2640 FE0F",
+ "char": "👱🏿‍♀️",
+ "name": "blond-haired woman: dark skin tone"
+ },
+ {
+ "no": 498,
+ "code": "1F935",
+ "char": "🤵",
+ "name": "man in tuxedo"
+ },
+ {
+ "no": 499,
+ "code": "1F935 1F3FB",
+ "char": "🤵🏻",
+ "name": "man in tuxedo: light skin tone"
+ },
+ {
+ "no": 500,
+ "code": "1F935 1F3FC",
+ "char": "🤵🏼",
+ "name": "man in tuxedo: medium-light skin tone"
+ },
+ {
+ "no": 501,
+ "code": "1F935 1F3FD",
+ "char": "🤵🏽",
+ "name": "man in tuxedo: medium skin tone"
+ },
+ {
+ "no": 502,
+ "code": "1F935 1F3FE",
+ "char": "🤵🏾",
+ "name": "man in tuxedo: medium-dark skin tone"
+ },
+ {
+ "no": 503,
+ "code": "1F935 1F3FF",
+ "char": "🤵🏿",
+ "name": "man in tuxedo: dark skin tone"
+ },
+ {
+ "no": 504,
+ "code": "1F470",
+ "char": "👰",
+ "name": "bride with veil"
+ },
+ {
+ "no": 505,
+ "code": "1F470 1F3FB",
+ "char": "👰🏻",
+ "name": "bride with veil: light skin tone"
+ },
+ {
+ "no": 506,
+ "code": "1F470 1F3FC",
+ "char": "👰🏼",
+ "name": "bride with veil: medium-light skin tone"
+ },
+ {
+ "no": 507,
+ "code": "1F470 1F3FD",
+ "char": "👰🏽",
+ "name": "bride with veil: medium skin tone"
+ },
+ {
+ "no": 508,
+ "code": "1F470 1F3FE",
+ "char": "👰🏾",
+ "name": "bride with veil: medium-dark skin tone"
+ },
+ {
+ "no": 509,
+ "code": "1F470 1F3FF",
+ "char": "👰🏿",
+ "name": "bride with veil: dark skin tone"
+ },
+ {
+ "no": 510,
+ "code": "1F930",
+ "char": "🤰",
+ "name": "pregnant woman"
+ },
+ {
+ "no": 511,
+ "code": "1F930 1F3FB",
+ "char": "🤰🏻",
+ "name": "pregnant woman: light skin tone"
+ },
+ {
+ "no": 512,
+ "code": "1F930 1F3FC",
+ "char": "🤰🏼",
+ "name": "pregnant woman: medium-light skin tone"
+ },
+ {
+ "no": 513,
+ "code": "1F930 1F3FD",
+ "char": "🤰🏽",
+ "name": "pregnant woman: medium skin tone"
+ },
+ {
+ "no": 514,
+ "code": "1F930 1F3FE",
+ "char": "🤰🏾",
+ "name": "pregnant woman: medium-dark skin tone"
+ },
+ {
+ "no": 515,
+ "code": "1F930 1F3FF",
+ "char": "🤰🏿",
+ "name": "pregnant woman: dark skin tone"
+ },
+ {
+ "no": 516,
+ "code": "1F931",
+ "char": "🤱",
+ "name": "⊛ breast-feeding"
+ },
+ {
+ "no": 517,
+ "code": "1F931 1F3FB",
+ "char": "🤱🏻",
+ "name": "⊛ breast-feeding: light skin tone"
+ },
+ {
+ "no": 518,
+ "code": "1F931 1F3FC",
+ "char": "🤱🏼",
+ "name": "⊛ breast-feeding: medium-light skin tone"
+ },
+ {
+ "no": 519,
+ "code": "1F931 1F3FD",
+ "char": "🤱🏽",
+ "name": "⊛ breast-feeding: medium skin tone"
+ },
+ {
+ "no": 520,
+ "code": "1F931 1F3FE",
+ "char": "🤱🏾",
+ "name": "⊛ breast-feeding: medium-dark skin tone"
+ },
+ {
+ "no": 521,
+ "code": "1F931 1F3FF",
+ "char": "🤱🏿",
+ "name": "⊛ breast-feeding: dark skin tone"
+ },
+ {
+ "no": 522,
+ "code": "1F47C",
+ "char": "👼",
+ "name": "baby angel"
+ },
+ {
+ "no": 523,
+ "code": "1F47C 1F3FB",
+ "char": "👼🏻",
+ "name": "baby angel: light skin tone"
+ },
+ {
+ "no": 524,
+ "code": "1F47C 1F3FC",
+ "char": "👼🏼",
+ "name": "baby angel: medium-light skin tone"
+ },
+ {
+ "no": 525,
+ "code": "1F47C 1F3FD",
+ "char": "👼🏽",
+ "name": "baby angel: medium skin tone"
+ },
+ {
+ "no": 526,
+ "code": "1F47C 1F3FE",
+ "char": "👼🏾",
+ "name": "baby angel: medium-dark skin tone"
+ },
+ {
+ "no": 527,
+ "code": "1F47C 1F3FF",
+ "char": "👼🏿",
+ "name": "baby angel: dark skin tone"
+ },
+ {
+ "no": 528,
+ "code": "1F385",
+ "char": "🎅",
+ "name": "Santa Claus"
+ },
+ {
+ "no": 529,
+ "code": "1F385 1F3FB",
+ "char": "🎅🏻",
+ "name": "Santa Claus: light skin tone"
+ },
+ {
+ "no": 530,
+ "code": "1F385 1F3FC",
+ "char": "🎅🏼",
+ "name": "Santa Claus: medium-light skin tone"
+ },
+ {
+ "no": 531,
+ "code": "1F385 1F3FD",
+ "char": "🎅🏽",
+ "name": "Santa Claus: medium skin tone"
+ },
+ {
+ "no": 532,
+ "code": "1F385 1F3FE",
+ "char": "🎅🏾",
+ "name": "Santa Claus: medium-dark skin tone"
+ },
+ {
+ "no": 533,
+ "code": "1F385 1F3FF",
+ "char": "🎅🏿",
+ "name": "Santa Claus: dark skin tone"
+ },
+ {
+ "no": 534,
+ "code": "1F936",
+ "char": "🤶",
+ "name": "Mrs. Claus"
+ },
+ {
+ "no": 535,
+ "code": "1F936 1F3FB",
+ "char": "🤶🏻",
+ "name": "Mrs. Claus: light skin tone"
+ },
+ {
+ "no": 536,
+ "code": "1F936 1F3FC",
+ "char": "🤶🏼",
+ "name": "Mrs. Claus: medium-light skin tone"
+ },
+ {
+ "no": 537,
+ "code": "1F936 1F3FD",
+ "char": "🤶🏽",
+ "name": "Mrs. Claus: medium skin tone"
+ },
+ {
+ "no": 538,
+ "code": "1F936 1F3FE",
+ "char": "🤶🏾",
+ "name": "Mrs. Claus: medium-dark skin tone"
+ },
+ {
+ "no": 539,
+ "code": "1F936 1F3FF",
+ "char": "🤶🏿",
+ "name": "Mrs. Claus: dark skin tone"
+ },
+ {
+ "no": 540,
+ "code": "1F9D9",
+ "char": "🧙",
+ "name": "⊛ mage"
+ },
+ {
+ "no": 541,
+ "code": "1F9D9 1F3FB",
+ "char": "🧙🏻",
+ "name": "⊛ mage: light skin tone"
+ },
+ {
+ "no": 542,
+ "code": "1F9D9 1F3FC",
+ "char": "🧙🏼",
+ "name": "⊛ mage: medium-light skin tone"
+ },
+ {
+ "no": 543,
+ "code": "1F9D9 1F3FD",
+ "char": "🧙🏽",
+ "name": "⊛ mage: medium skin tone"
+ },
+ {
+ "no": 544,
+ "code": "1F9D9 1F3FE",
+ "char": "🧙🏾",
+ "name": "⊛ mage: medium-dark skin tone"
+ },
+ {
+ "no": 545,
+ "code": "1F9D9 1F3FF",
+ "char": "🧙🏿",
+ "name": "⊛ mage: dark skin tone"
+ },
+ {
+ "no": 546,
+ "code": "1F9D9 200D 2640 FE0F",
+ "char": "🧙‍♀️",
+ "name": "⊛ woman mage"
+ },
+ {
+ "no": 547,
+ "code": "1F9D9 1F3FB 200D 2640 FE0F",
+ "char": "🧙🏻‍♀️",
+ "name": "⊛ woman mage: light skin tone"
+ },
+ {
+ "no": 548,
+ "code": "1F9D9 1F3FC 200D 2640 FE0F",
+ "char": "🧙🏼‍♀️",
+ "name": "⊛ woman mage: medium-light skin tone"
+ },
+ {
+ "no": 549,
+ "code": "1F9D9 1F3FD 200D 2640 FE0F",
+ "char": "🧙🏽‍♀️",
+ "name": "⊛ woman mage: medium skin tone"
+ },
+ {
+ "no": 550,
+ "code": "1F9D9 1F3FE 200D 2640 FE0F",
+ "char": "🧙🏾‍♀️",
+ "name": "⊛ woman mage: medium-dark skin tone"
+ },
+ {
+ "no": 551,
+ "code": "1F9D9 1F3FF 200D 2640 FE0F",
+ "char": "🧙🏿‍♀️",
+ "name": "⊛ woman mage: dark skin tone"
+ },
+ {
+ "no": 552,
+ "code": "1F9D9 200D 2642 FE0F",
+ "char": "🧙‍♂️",
+ "name": "⊛ man mage"
+ },
+ {
+ "no": 553,
+ "code": "1F9D9 1F3FB 200D 2642 FE0F",
+ "char": "🧙🏻‍♂️",
+ "name": "⊛ man mage: light skin tone"
+ },
+ {
+ "no": 554,
+ "code": "1F9D9 1F3FC 200D 2642 FE0F",
+ "char": "🧙🏼‍♂️",
+ "name": "⊛ man mage: medium-light skin tone"
+ },
+ {
+ "no": 555,
+ "code": "1F9D9 1F3FD 200D 2642 FE0F",
+ "char": "🧙🏽‍♂️",
+ "name": "⊛ man mage: medium skin tone"
+ },
+ {
+ "no": 556,
+ "code": "1F9D9 1F3FE 200D 2642 FE0F",
+ "char": "🧙🏾‍♂️",
+ "name": "⊛ man mage: medium-dark skin tone"
+ },
+ {
+ "no": 557,
+ "code": "1F9D9 1F3FF 200D 2642 FE0F",
+ "char": "🧙🏿‍♂️",
+ "name": "⊛ man mage: dark skin tone"
+ },
+ {
+ "no": 558,
+ "code": "1F9DA",
+ "char": "🧚",
+ "name": "⊛ fairy"
+ },
+ {
+ "no": 559,
+ "code": "1F9DA 1F3FB",
+ "char": "🧚🏻",
+ "name": "⊛ fairy: light skin tone"
+ },
+ {
+ "no": 560,
+ "code": "1F9DA 1F3FC",
+ "char": "🧚🏼",
+ "name": "⊛ fairy: medium-light skin tone"
+ },
+ {
+ "no": 561,
+ "code": "1F9DA 1F3FD",
+ "char": "🧚🏽",
+ "name": "⊛ fairy: medium skin tone"
+ },
+ {
+ "no": 562,
+ "code": "1F9DA 1F3FE",
+ "char": "🧚🏾",
+ "name": "⊛ fairy: medium-dark skin tone"
+ },
+ {
+ "no": 563,
+ "code": "1F9DA 1F3FF",
+ "char": "🧚🏿",
+ "name": "⊛ fairy: dark skin tone"
+ },
+ {
+ "no": 564,
+ "code": "1F9DA 200D 2640 FE0F",
+ "char": "🧚‍♀️",
+ "name": "⊛ woman fairy"
+ },
+ {
+ "no": 565,
+ "code": "1F9DA 1F3FB 200D 2640 FE0F",
+ "char": "🧚🏻‍♀️",
+ "name": "⊛ woman fairy: light skin tone"
+ },
+ {
+ "no": 566,
+ "code": "1F9DA 1F3FC 200D 2640 FE0F",
+ "char": "🧚🏼‍♀️",
+ "name": "⊛ woman fairy: medium-light skin tone"
+ },
+ {
+ "no": 567,
+ "code": "1F9DA 1F3FD 200D 2640 FE0F",
+ "char": "🧚🏽‍♀️",
+ "name": "⊛ woman fairy: medium skin tone"
+ },
+ {
+ "no": 568,
+ "code": "1F9DA 1F3FE 200D 2640 FE0F",
+ "char": "🧚🏾‍♀️",
+ "name": "⊛ woman fairy: medium-dark skin tone"
+ },
+ {
+ "no": 569,
+ "code": "1F9DA 1F3FF 200D 2640 FE0F",
+ "char": "🧚🏿‍♀️",
+ "name": "⊛ woman fairy: dark skin tone"
+ },
+ {
+ "no": 570,
+ "code": "1F9DA 200D 2642 FE0F",
+ "char": "🧚‍♂️",
+ "name": "⊛ man fairy"
+ },
+ {
+ "no": 571,
+ "code": "1F9DA 1F3FB 200D 2642 FE0F",
+ "char": "🧚🏻‍♂️",
+ "name": "⊛ man fairy: light skin tone"
+ },
+ {
+ "no": 572,
+ "code": "1F9DA 1F3FC 200D 2642 FE0F",
+ "char": "🧚🏼‍♂️",
+ "name": "⊛ man fairy: medium-light skin tone"
+ },
+ {
+ "no": 573,
+ "code": "1F9DA 1F3FD 200D 2642 FE0F",
+ "char": "🧚🏽‍♂️",
+ "name": "⊛ man fairy: medium skin tone"
+ },
+ {
+ "no": 574,
+ "code": "1F9DA 1F3FE 200D 2642 FE0F",
+ "char": "🧚🏾‍♂️",
+ "name": "⊛ man fairy: medium-dark skin tone"
+ },
+ {
+ "no": 575,
+ "code": "1F9DA 1F3FF 200D 2642 FE0F",
+ "char": "🧚🏿‍♂️",
+ "name": "⊛ man fairy: dark skin tone"
+ },
+ {
+ "no": 576,
+ "code": "1F9DB",
+ "char": "🧛",
+ "name": "⊛ vampire"
+ },
+ {
+ "no": 577,
+ "code": "1F9DB 1F3FB",
+ "char": "🧛🏻",
+ "name": "⊛ vampire: light skin tone"
+ },
+ {
+ "no": 578,
+ "code": "1F9DB 1F3FC",
+ "char": "🧛🏼",
+ "name": "⊛ vampire: medium-light skin tone"
+ },
+ {
+ "no": 579,
+ "code": "1F9DB 1F3FD",
+ "char": "🧛🏽",
+ "name": "⊛ vampire: medium skin tone"
+ },
+ {
+ "no": 580,
+ "code": "1F9DB 1F3FE",
+ "char": "🧛🏾",
+ "name": "⊛ vampire: medium-dark skin tone"
+ },
+ {
+ "no": 581,
+ "code": "1F9DB 1F3FF",
+ "char": "🧛🏿",
+ "name": "⊛ vampire: dark skin tone"
+ },
+ {
+ "no": 582,
+ "code": "1F9DB 200D 2640 FE0F",
+ "char": "🧛‍♀️",
+ "name": "⊛ woman vampire"
+ },
+ {
+ "no": 583,
+ "code": "1F9DB 1F3FB 200D 2640 FE0F",
+ "char": "🧛🏻‍♀️",
+ "name": "⊛ woman vampire: light skin tone"
+ },
+ {
+ "no": 584,
+ "code": "1F9DB 1F3FC 200D 2640 FE0F",
+ "char": "🧛🏼‍♀️",
+ "name": "⊛ woman vampire: medium-light skin tone"
+ },
+ {
+ "no": 585,
+ "code": "1F9DB 1F3FD 200D 2640 FE0F",
+ "char": "🧛🏽‍♀️",
+ "name": "⊛ woman vampire: medium skin tone"
+ },
+ {
+ "no": 586,
+ "code": "1F9DB 1F3FE 200D 2640 FE0F",
+ "char": "🧛🏾‍♀️",
+ "name": "⊛ woman vampire: medium-dark skin tone"
+ },
+ {
+ "no": 587,
+ "code": "1F9DB 1F3FF 200D 2640 FE0F",
+ "char": "🧛🏿‍♀️",
+ "name": "⊛ woman vampire: dark skin tone"
+ },
+ {
+ "no": 588,
+ "code": "1F9DB 200D 2642 FE0F",
+ "char": "🧛‍♂️",
+ "name": "⊛ man vampire"
+ },
+ {
+ "no": 589,
+ "code": "1F9DB 1F3FB 200D 2642 FE0F",
+ "char": "🧛🏻‍♂️",
+ "name": "⊛ man vampire: light skin tone"
+ },
+ {
+ "no": 590,
+ "code": "1F9DB 1F3FC 200D 2642 FE0F",
+ "char": "🧛🏼‍♂️",
+ "name": "⊛ man vampire: medium-light skin tone"
+ },
+ {
+ "no": 591,
+ "code": "1F9DB 1F3FD 200D 2642 FE0F",
+ "char": "🧛🏽‍♂️",
+ "name": "⊛ man vampire: medium skin tone"
+ },
+ {
+ "no": 592,
+ "code": "1F9DB 1F3FE 200D 2642 FE0F",
+ "char": "🧛🏾‍♂️",
+ "name": "⊛ man vampire: medium-dark skin tone"
+ },
+ {
+ "no": 593,
+ "code": "1F9DB 1F3FF 200D 2642 FE0F",
+ "char": "🧛🏿‍♂️",
+ "name": "⊛ man vampire: dark skin tone"
+ },
+ {
+ "no": 594,
+ "code": "1F9DC",
+ "char": "🧜",
+ "name": "⊛ merperson"
+ },
+ {
+ "no": 595,
+ "code": "1F9DC 1F3FB",
+ "char": "🧜🏻",
+ "name": "⊛ merperson: light skin tone"
+ },
+ {
+ "no": 596,
+ "code": "1F9DC 1F3FC",
+ "char": "🧜🏼",
+ "name": "⊛ merperson: medium-light skin tone"
+ },
+ {
+ "no": 597,
+ "code": "1F9DC 1F3FD",
+ "char": "🧜🏽",
+ "name": "⊛ merperson: medium skin tone"
+ },
+ {
+ "no": 598,
+ "code": "1F9DC 1F3FE",
+ "char": "🧜🏾",
+ "name": "⊛ merperson: medium-dark skin tone"
+ },
+ {
+ "no": 599,
+ "code": "1F9DC 1F3FF",
+ "char": "🧜🏿",
+ "name": "⊛ merperson: dark skin tone"
+ },
+ {
+ "no": 600,
+ "code": "1F9DC 200D 2640 FE0F",
+ "char": "🧜‍♀️",
+ "name": "⊛ mermaid"
+ },
+ {
+ "no": 601,
+ "code": "1F9DC 1F3FB 200D 2640 FE0F",
+ "char": "🧜🏻‍♀️",
+ "name": "⊛ mermaid: light skin tone"
+ },
+ {
+ "no": 602,
+ "code": "1F9DC 1F3FC 200D 2640 FE0F",
+ "char": "🧜🏼‍♀️",
+ "name": "⊛ mermaid: medium-light skin tone"
+ },
+ {
+ "no": 603,
+ "code": "1F9DC 1F3FD 200D 2640 FE0F",
+ "char": "🧜🏽‍♀️",
+ "name": "⊛ mermaid: medium skin tone"
+ },
+ {
+ "no": 604,
+ "code": "1F9DC 1F3FE 200D 2640 FE0F",
+ "char": "🧜🏾‍♀️",
+ "name": "⊛ mermaid: medium-dark skin tone"
+ },
+ {
+ "no": 605,
+ "code": "1F9DC 1F3FF 200D 2640 FE0F",
+ "char": "🧜🏿‍♀️",
+ "name": "⊛ mermaid: dark skin tone"
+ },
+ {
+ "no": 606,
+ "code": "1F9DC 200D 2642 FE0F",
+ "char": "🧜‍♂️",
+ "name": "⊛ merman"
+ },
+ {
+ "no": 607,
+ "code": "1F9DC 1F3FB 200D 2642 FE0F",
+ "char": "🧜🏻‍♂️",
+ "name": "⊛ merman: light skin tone"
+ },
+ {
+ "no": 608,
+ "code": "1F9DC 1F3FC 200D 2642 FE0F",
+ "char": "🧜🏼‍♂️",
+ "name": "⊛ merman: medium-light skin tone"
+ },
+ {
+ "no": 609,
+ "code": "1F9DC 1F3FD 200D 2642 FE0F",
+ "char": "🧜🏽‍♂️",
+ "name": "⊛ merman: medium skin tone"
+ },
+ {
+ "no": 610,
+ "code": "1F9DC 1F3FE 200D 2642 FE0F",
+ "char": "🧜🏾‍♂️",
+ "name": "⊛ merman: medium-dark skin tone"
+ },
+ {
+ "no": 611,
+ "code": "1F9DC 1F3FF 200D 2642 FE0F",
+ "char": "🧜🏿‍♂️",
+ "name": "⊛ merman: dark skin tone"
+ },
+ {
+ "no": 612,
+ "code": "1F9DD",
+ "char": "🧝",
+ "name": "⊛ elf"
+ },
+ {
+ "no": 613,
+ "code": "1F9DD 1F3FB",
+ "char": "🧝🏻",
+ "name": "⊛ elf: light skin tone"
+ },
+ {
+ "no": 614,
+ "code": "1F9DD 1F3FC",
+ "char": "🧝🏼",
+ "name": "⊛ elf: medium-light skin tone"
+ },
+ {
+ "no": 615,
+ "code": "1F9DD 1F3FD",
+ "char": "🧝🏽",
+ "name": "⊛ elf: medium skin tone"
+ },
+ {
+ "no": 616,
+ "code": "1F9DD 1F3FE",
+ "char": "🧝🏾",
+ "name": "⊛ elf: medium-dark skin tone"
+ },
+ {
+ "no": 617,
+ "code": "1F9DD 1F3FF",
+ "char": "🧝🏿",
+ "name": "⊛ elf: dark skin tone"
+ },
+ {
+ "no": 618,
+ "code": "1F9DD 200D 2640 FE0F",
+ "char": "🧝‍♀️",
+ "name": "⊛ woman elf"
+ },
+ {
+ "no": 619,
+ "code": "1F9DD 1F3FB 200D 2640 FE0F",
+ "char": "🧝🏻‍♀️",
+ "name": "⊛ woman elf: light skin tone"
+ },
+ {
+ "no": 620,
+ "code": "1F9DD 1F3FC 200D 2640 FE0F",
+ "char": "🧝🏼‍♀️",
+ "name": "⊛ woman elf: medium-light skin tone"
+ },
+ {
+ "no": 621,
+ "code": "1F9DD 1F3FD 200D 2640 FE0F",
+ "char": "🧝🏽‍♀️",
+ "name": "⊛ woman elf: medium skin tone"
+ },
+ {
+ "no": 622,
+ "code": "1F9DD 1F3FE 200D 2640 FE0F",
+ "char": "🧝🏾‍♀️",
+ "name": "⊛ woman elf: medium-dark skin tone"
+ },
+ {
+ "no": 623,
+ "code": "1F9DD 1F3FF 200D 2640 FE0F",
+ "char": "🧝🏿‍♀️",
+ "name": "⊛ woman elf: dark skin tone"
+ },
+ {
+ "no": 624,
+ "code": "1F9DD 200D 2642 FE0F",
+ "char": "🧝‍♂️",
+ "name": "⊛ man elf"
+ },
+ {
+ "no": 625,
+ "code": "1F9DD 1F3FB 200D 2642 FE0F",
+ "char": "🧝🏻‍♂️",
+ "name": "⊛ man elf: light skin tone"
+ },
+ {
+ "no": 626,
+ "code": "1F9DD 1F3FC 200D 2642 FE0F",
+ "char": "🧝🏼‍♂️",
+ "name": "⊛ man elf: medium-light skin tone"
+ },
+ {
+ "no": 627,
+ "code": "1F9DD 1F3FD 200D 2642 FE0F",
+ "char": "🧝🏽‍♂️",
+ "name": "⊛ man elf: medium skin tone"
+ },
+ {
+ "no": 628,
+ "code": "1F9DD 1F3FE 200D 2642 FE0F",
+ "char": "🧝🏾‍♂️",
+ "name": "⊛ man elf: medium-dark skin tone"
+ },
+ {
+ "no": 629,
+ "code": "1F9DD 1F3FF 200D 2642 FE0F",
+ "char": "🧝🏿‍♂️",
+ "name": "⊛ man elf: dark skin tone"
+ },
+ {
+ "no": 630,
+ "code": "1F9DE",
+ "char": "🧞",
+ "name": "⊛ genie"
+ },
+ {
+ "no": 631,
+ "code": "1F9DE 200D 2640 FE0F",
+ "char": "🧞‍♀️",
+ "name": "⊛ woman genie"
+ },
+ {
+ "no": 632,
+ "code": "1F9DE 200D 2642 FE0F",
+ "char": "🧞‍♂️",
+ "name": "⊛ man genie"
+ },
+ {
+ "no": 633,
+ "code": "1F9DF",
+ "char": "🧟",
+ "name": "⊛ zombie"
+ },
+ {
+ "no": 634,
+ "code": "1F9DF 200D 2640 FE0F",
+ "char": "🧟‍♀️",
+ "name": "⊛ woman zombie"
+ },
+ {
+ "no": 635,
+ "code": "1F9DF 200D 2642 FE0F",
+ "char": "🧟‍♂️",
+ "name": "⊛ man zombie"
+ },
+ {
+ "no": 636,
+ "code": "1F64D",
+ "char": "🙍",
+ "name": "person frowning"
+ },
+ {
+ "no": 637,
+ "code": "1F64D 1F3FB",
+ "char": "🙍🏻",
+ "name": "person frowning: light skin tone"
+ },
+ {
+ "no": 638,
+ "code": "1F64D 1F3FC",
+ "char": "🙍🏼",
+ "name": "person frowning: medium-light skin tone"
+ },
+ {
+ "no": 639,
+ "code": "1F64D 1F3FD",
+ "char": "🙍🏽",
+ "name": "person frowning: medium skin tone"
+ },
+ {
+ "no": 640,
+ "code": "1F64D 1F3FE",
+ "char": "🙍🏾",
+ "name": "person frowning: medium-dark skin tone"
+ },
+ {
+ "no": 641,
+ "code": "1F64D 1F3FF",
+ "char": "🙍🏿",
+ "name": "person frowning: dark skin tone"
+ },
+ {
+ "no": 642,
+ "code": "1F64D 200D 2642 FE0F",
+ "char": "🙍‍♂️",
+ "name": "man frowning"
+ },
+ {
+ "no": 643,
+ "code": "1F64D 1F3FB 200D 2642 FE0F",
+ "char": "🙍🏻‍♂️",
+ "name": "man frowning: light skin tone"
+ },
+ {
+ "no": 644,
+ "code": "1F64D 1F3FC 200D 2642 FE0F",
+ "char": "🙍🏼‍♂️",
+ "name": "man frowning: medium-light skin tone"
+ },
+ {
+ "no": 645,
+ "code": "1F64D 1F3FD 200D 2642 FE0F",
+ "char": "🙍🏽‍♂️",
+ "name": "man frowning: medium skin tone"
+ },
+ {
+ "no": 646,
+ "code": "1F64D 1F3FE 200D 2642 FE0F",
+ "char": "🙍🏾‍♂️",
+ "name": "man frowning: medium-dark skin tone"
+ },
+ {
+ "no": 647,
+ "code": "1F64D 1F3FF 200D 2642 FE0F",
+ "char": "🙍🏿‍♂️",
+ "name": "man frowning: dark skin tone"
+ },
+ {
+ "no": 648,
+ "code": "1F64D 200D 2640 FE0F",
+ "char": "🙍‍♀️",
+ "name": "woman frowning"
+ },
+ {
+ "no": 649,
+ "code": "1F64D 1F3FB 200D 2640 FE0F",
+ "char": "🙍🏻‍♀️",
+ "name": "woman frowning: light skin tone"
+ },
+ {
+ "no": 650,
+ "code": "1F64D 1F3FC 200D 2640 FE0F",
+ "char": "🙍🏼‍♀️",
+ "name": "woman frowning: medium-light skin tone"
+ },
+ {
+ "no": 651,
+ "code": "1F64D 1F3FD 200D 2640 FE0F",
+ "char": "🙍🏽‍♀️",
+ "name": "woman frowning: medium skin tone"
+ },
+ {
+ "no": 652,
+ "code": "1F64D 1F3FE 200D 2640 FE0F",
+ "char": "🙍🏾‍♀️",
+ "name": "woman frowning: medium-dark skin tone"
+ },
+ {
+ "no": 653,
+ "code": "1F64D 1F3FF 200D 2640 FE0F",
+ "char": "🙍🏿‍♀️",
+ "name": "woman frowning: dark skin tone"
+ },
+ {
+ "no": 654,
+ "code": "1F64E",
+ "char": "🙎",
+ "name": "person pouting"
+ },
+ {
+ "no": 655,
+ "code": "1F64E 1F3FB",
+ "char": "🙎🏻",
+ "name": "person pouting: light skin tone"
+ },
+ {
+ "no": 656,
+ "code": "1F64E 1F3FC",
+ "char": "🙎🏼",
+ "name": "person pouting: medium-light skin tone"
+ },
+ {
+ "no": 657,
+ "code": "1F64E 1F3FD",
+ "char": "🙎🏽",
+ "name": "person pouting: medium skin tone"
+ },
+ {
+ "no": 658,
+ "code": "1F64E 1F3FE",
+ "char": "🙎🏾",
+ "name": "person pouting: medium-dark skin tone"
+ },
+ {
+ "no": 659,
+ "code": "1F64E 1F3FF",
+ "char": "🙎🏿",
+ "name": "person pouting: dark skin tone"
+ },
+ {
+ "no": 660,
+ "code": "1F64E 200D 2642 FE0F",
+ "char": "🙎‍♂️",
+ "name": "man pouting"
+ },
+ {
+ "no": 661,
+ "code": "1F64E 1F3FB 200D 2642 FE0F",
+ "char": "🙎🏻‍♂️",
+ "name": "man pouting: light skin tone"
+ },
+ {
+ "no": 662,
+ "code": "1F64E 1F3FC 200D 2642 FE0F",
+ "char": "🙎🏼‍♂️",
+ "name": "man pouting: medium-light skin tone"
+ },
+ {
+ "no": 663,
+ "code": "1F64E 1F3FD 200D 2642 FE0F",
+ "char": "🙎🏽‍♂️",
+ "name": "man pouting: medium skin tone"
+ },
+ {
+ "no": 664,
+ "code": "1F64E 1F3FE 200D 2642 FE0F",
+ "char": "🙎🏾‍♂️",
+ "name": "man pouting: medium-dark skin tone"
+ },
+ {
+ "no": 665,
+ "code": "1F64E 1F3FF 200D 2642 FE0F",
+ "char": "🙎🏿‍♂️",
+ "name": "man pouting: dark skin tone"
+ },
+ {
+ "no": 666,
+ "code": "1F64E 200D 2640 FE0F",
+ "char": "🙎‍♀️",
+ "name": "woman pouting"
+ },
+ {
+ "no": 667,
+ "code": "1F64E 1F3FB 200D 2640 FE0F",
+ "char": "🙎🏻‍♀️",
+ "name": "woman pouting: light skin tone"
+ },
+ {
+ "no": 668,
+ "code": "1F64E 1F3FC 200D 2640 FE0F",
+ "char": "🙎🏼‍♀️",
+ "name": "woman pouting: medium-light skin tone"
+ },
+ {
+ "no": 669,
+ "code": "1F64E 1F3FD 200D 2640 FE0F",
+ "char": "🙎🏽‍♀️",
+ "name": "woman pouting: medium skin tone"
+ },
+ {
+ "no": 670,
+ "code": "1F64E 1F3FE 200D 2640 FE0F",
+ "char": "🙎🏾‍♀️",
+ "name": "woman pouting: medium-dark skin tone"
+ },
+ {
+ "no": 671,
+ "code": "1F64E 1F3FF 200D 2640 FE0F",
+ "char": "🙎🏿‍♀️",
+ "name": "woman pouting: dark skin tone"
+ },
+ {
+ "no": 672,
+ "code": "1F645",
+ "char": "🙅",
+ "name": "person gesturing NO"
+ },
+ {
+ "no": 673,
+ "code": "1F645 1F3FB",
+ "char": "🙅🏻",
+ "name": "person gesturing NO: light skin tone"
+ },
+ {
+ "no": 674,
+ "code": "1F645 1F3FC",
+ "char": "🙅🏼",
+ "name": "person gesturing NO: medium-light skin tone"
+ },
+ {
+ "no": 675,
+ "code": "1F645 1F3FD",
+ "char": "🙅🏽",
+ "name": "person gesturing NO: medium skin tone"
+ },
+ {
+ "no": 676,
+ "code": "1F645 1F3FE",
+ "char": "🙅🏾",
+ "name": "person gesturing NO: medium-dark skin tone"
+ },
+ {
+ "no": 677,
+ "code": "1F645 1F3FF",
+ "char": "🙅🏿",
+ "name": "person gesturing NO: dark skin tone"
+ },
+ {
+ "no": 678,
+ "code": "1F645 200D 2642 FE0F",
+ "char": "🙅‍♂️",
+ "name": "man gesturing NO"
+ },
+ {
+ "no": 679,
+ "code": "1F645 1F3FB 200D 2642 FE0F",
+ "char": "🙅🏻‍♂️",
+ "name": "man gesturing NO: light skin tone"
+ },
+ {
+ "no": 680,
+ "code": "1F645 1F3FC 200D 2642 FE0F",
+ "char": "🙅🏼‍♂️",
+ "name": "man gesturing NO: medium-light skin tone"
+ },
+ {
+ "no": 681,
+ "code": "1F645 1F3FD 200D 2642 FE0F",
+ "char": "🙅🏽‍♂️",
+ "name": "man gesturing NO: medium skin tone"
+ },
+ {
+ "no": 682,
+ "code": "1F645 1F3FE 200D 2642 FE0F",
+ "char": "🙅🏾‍♂️",
+ "name": "man gesturing NO: medium-dark skin tone"
+ },
+ {
+ "no": 683,
+ "code": "1F645 1F3FF 200D 2642 FE0F",
+ "char": "🙅🏿‍♂️",
+ "name": "man gesturing NO: dark skin tone"
+ },
+ {
+ "no": 684,
+ "code": "1F645 200D 2640 FE0F",
+ "char": "🙅‍♀️",
+ "name": "woman gesturing NO"
+ },
+ {
+ "no": 685,
+ "code": "1F645 1F3FB 200D 2640 FE0F",
+ "char": "🙅🏻‍♀️",
+ "name": "woman gesturing NO: light skin tone"
+ },
+ {
+ "no": 686,
+ "code": "1F645 1F3FC 200D 2640 FE0F",
+ "char": "🙅🏼‍♀️",
+ "name": "woman gesturing NO: medium-light skin tone"
+ },
+ {
+ "no": 687,
+ "code": "1F645 1F3FD 200D 2640 FE0F",
+ "char": "🙅🏽‍♀️",
+ "name": "woman gesturing NO: medium skin tone"
+ },
+ {
+ "no": 688,
+ "code": "1F645 1F3FE 200D 2640 FE0F",
+ "char": "🙅🏾‍♀️",
+ "name": "woman gesturing NO: medium-dark skin tone"
+ },
+ {
+ "no": 689,
+ "code": "1F645 1F3FF 200D 2640 FE0F",
+ "char": "🙅🏿‍♀️",
+ "name": "woman gesturing NO: dark skin tone"
+ },
+ {
+ "no": 690,
+ "code": "1F646",
+ "char": "🙆",
+ "name": "person gesturing OK"
+ },
+ {
+ "no": 691,
+ "code": "1F646 1F3FB",
+ "char": "🙆🏻",
+ "name": "person gesturing OK: light skin tone"
+ },
+ {
+ "no": 692,
+ "code": "1F646 1F3FC",
+ "char": "🙆🏼",
+ "name": "person gesturing OK: medium-light skin tone"
+ },
+ {
+ "no": 693,
+ "code": "1F646 1F3FD",
+ "char": "🙆🏽",
+ "name": "person gesturing OK: medium skin tone"
+ },
+ {
+ "no": 694,
+ "code": "1F646 1F3FE",
+ "char": "🙆🏾",
+ "name": "person gesturing OK: medium-dark skin tone"
+ },
+ {
+ "no": 695,
+ "code": "1F646 1F3FF",
+ "char": "🙆🏿",
+ "name": "person gesturing OK: dark skin tone"
+ },
+ {
+ "no": 696,
+ "code": "1F646 200D 2642 FE0F",
+ "char": "🙆‍♂️",
+ "name": "man gesturing OK"
+ },
+ {
+ "no": 697,
+ "code": "1F646 1F3FB 200D 2642 FE0F",
+ "char": "🙆🏻‍♂️",
+ "name": "man gesturing OK: light skin tone"
+ },
+ {
+ "no": 698,
+ "code": "1F646 1F3FC 200D 2642 FE0F",
+ "char": "🙆🏼‍♂️",
+ "name": "man gesturing OK: medium-light skin tone"
+ },
+ {
+ "no": 699,
+ "code": "1F646 1F3FD 200D 2642 FE0F",
+ "char": "🙆🏽‍♂️",
+ "name": "man gesturing OK: medium skin tone"
+ },
+ {
+ "no": 700,
+ "code": "1F646 1F3FE 200D 2642 FE0F",
+ "char": "🙆🏾‍♂️",
+ "name": "man gesturing OK: medium-dark skin tone"
+ },
+ {
+ "no": 701,
+ "code": "1F646 1F3FF 200D 2642 FE0F",
+ "char": "🙆🏿‍♂️",
+ "name": "man gesturing OK: dark skin tone"
+ },
+ {
+ "no": 702,
+ "code": "1F646 200D 2640 FE0F",
+ "char": "🙆‍♀️",
+ "name": "woman gesturing OK"
+ },
+ {
+ "no": 703,
+ "code": "1F646 1F3FB 200D 2640 FE0F",
+ "char": "🙆🏻‍♀️",
+ "name": "woman gesturing OK: light skin tone"
+ },
+ {
+ "no": 704,
+ "code": "1F646 1F3FC 200D 2640 FE0F",
+ "char": "🙆🏼‍♀️",
+ "name": "woman gesturing OK: medium-light skin tone"
+ },
+ {
+ "no": 705,
+ "code": "1F646 1F3FD 200D 2640 FE0F",
+ "char": "🙆🏽‍♀️",
+ "name": "woman gesturing OK: medium skin tone"
+ },
+ {
+ "no": 706,
+ "code": "1F646 1F3FE 200D 2640 FE0F",
+ "char": "🙆🏾‍♀️",
+ "name": "woman gesturing OK: medium-dark skin tone"
+ },
+ {
+ "no": 707,
+ "code": "1F646 1F3FF 200D 2640 FE0F",
+ "char": "🙆🏿‍♀️",
+ "name": "woman gesturing OK: dark skin tone"
+ },
+ {
+ "no": 708,
+ "code": "1F481",
+ "char": "💁",
+ "name": "person tipping hand"
+ },
+ {
+ "no": 709,
+ "code": "1F481 1F3FB",
+ "char": "💁🏻",
+ "name": "person tipping hand: light skin tone"
+ },
+ {
+ "no": 710,
+ "code": "1F481 1F3FC",
+ "char": "💁🏼",
+ "name": "person tipping hand: medium-light skin tone"
+ },
+ {
+ "no": 711,
+ "code": "1F481 1F3FD",
+ "char": "💁🏽",
+ "name": "person tipping hand: medium skin tone"
+ },
+ {
+ "no": 712,
+ "code": "1F481 1F3FE",
+ "char": "💁🏾",
+ "name": "person tipping hand: medium-dark skin tone"
+ },
+ {
+ "no": 713,
+ "code": "1F481 1F3FF",
+ "char": "💁🏿",
+ "name": "person tipping hand: dark skin tone"
+ },
+ {
+ "no": 714,
+ "code": "1F481 200D 2642 FE0F",
+ "char": "💁‍♂️",
+ "name": "man tipping hand"
+ },
+ {
+ "no": 715,
+ "code": "1F481 1F3FB 200D 2642 FE0F",
+ "char": "💁🏻‍♂️",
+ "name": "man tipping hand: light skin tone"
+ },
+ {
+ "no": 716,
+ "code": "1F481 1F3FC 200D 2642 FE0F",
+ "char": "💁🏼‍♂️",
+ "name": "man tipping hand: medium-light skin tone"
+ },
+ {
+ "no": 717,
+ "code": "1F481 1F3FD 200D 2642 FE0F",
+ "char": "💁🏽‍♂️",
+ "name": "man tipping hand: medium skin tone"
+ },
+ {
+ "no": 718,
+ "code": "1F481 1F3FE 200D 2642 FE0F",
+ "char": "💁🏾‍♂️",
+ "name": "man tipping hand: medium-dark skin tone"
+ },
+ {
+ "no": 719,
+ "code": "1F481 1F3FF 200D 2642 FE0F",
+ "char": "💁🏿‍♂️",
+ "name": "man tipping hand: dark skin tone"
+ },
+ {
+ "no": 720,
+ "code": "1F481 200D 2640 FE0F",
+ "char": "💁‍♀️",
+ "name": "woman tipping hand"
+ },
+ {
+ "no": 721,
+ "code": "1F481 1F3FB 200D 2640 FE0F",
+ "char": "💁🏻‍♀️",
+ "name": "woman tipping hand: light skin tone"
+ },
+ {
+ "no": 722,
+ "code": "1F481 1F3FC 200D 2640 FE0F",
+ "char": "💁🏼‍♀️",
+ "name": "woman tipping hand: medium-light skin tone"
+ },
+ {
+ "no": 723,
+ "code": "1F481 1F3FD 200D 2640 FE0F",
+ "char": "💁🏽‍♀️",
+ "name": "woman tipping hand: medium skin tone"
+ },
+ {
+ "no": 724,
+ "code": "1F481 1F3FE 200D 2640 FE0F",
+ "char": "💁🏾‍♀️",
+ "name": "woman tipping hand: medium-dark skin tone"
+ },
+ {
+ "no": 725,
+ "code": "1F481 1F3FF 200D 2640 FE0F",
+ "char": "💁🏿‍♀️",
+ "name": "woman tipping hand: dark skin tone"
+ },
+ {
+ "no": 726,
+ "code": "1F64B",
+ "char": "🙋",
+ "name": "person raising hand"
+ },
+ {
+ "no": 727,
+ "code": "1F64B 1F3FB",
+ "char": "🙋🏻",
+ "name": "person raising hand: light skin tone"
+ },
+ {
+ "no": 728,
+ "code": "1F64B 1F3FC",
+ "char": "🙋🏼",
+ "name": "person raising hand: medium-light skin tone"
+ },
+ {
+ "no": 729,
+ "code": "1F64B 1F3FD",
+ "char": "🙋🏽",
+ "name": "person raising hand: medium skin tone"
+ },
+ {
+ "no": 730,
+ "code": "1F64B 1F3FE",
+ "char": "🙋🏾",
+ "name": "person raising hand: medium-dark skin tone"
+ },
+ {
+ "no": 731,
+ "code": "1F64B 1F3FF",
+ "char": "🙋🏿",
+ "name": "person raising hand: dark skin tone"
+ },
+ {
+ "no": 732,
+ "code": "1F64B 200D 2642 FE0F",
+ "char": "🙋‍♂️",
+ "name": "man raising hand"
+ },
+ {
+ "no": 733,
+ "code": "1F64B 1F3FB 200D 2642 FE0F",
+ "char": "🙋🏻‍♂️",
+ "name": "man raising hand: light skin tone"
+ },
+ {
+ "no": 734,
+ "code": "1F64B 1F3FC 200D 2642 FE0F",
+ "char": "🙋🏼‍♂️",
+ "name": "man raising hand: medium-light skin tone"
+ },
+ {
+ "no": 735,
+ "code": "1F64B 1F3FD 200D 2642 FE0F",
+ "char": "🙋🏽‍♂️",
+ "name": "man raising hand: medium skin tone"
+ },
+ {
+ "no": 736,
+ "code": "1F64B 1F3FE 200D 2642 FE0F",
+ "char": "🙋🏾‍♂️",
+ "name": "man raising hand: medium-dark skin tone"
+ },
+ {
+ "no": 737,
+ "code": "1F64B 1F3FF 200D 2642 FE0F",
+ "char": "🙋🏿‍♂️",
+ "name": "man raising hand: dark skin tone"
+ },
+ {
+ "no": 738,
+ "code": "1F64B 200D 2640 FE0F",
+ "char": "🙋‍♀️",
+ "name": "woman raising hand"
+ },
+ {
+ "no": 739,
+ "code": "1F64B 1F3FB 200D 2640 FE0F",
+ "char": "🙋🏻‍♀️",
+ "name": "woman raising hand: light skin tone"
+ },
+ {
+ "no": 740,
+ "code": "1F64B 1F3FC 200D 2640 FE0F",
+ "char": "🙋🏼‍♀️",
+ "name": "woman raising hand: medium-light skin tone"
+ },
+ {
+ "no": 741,
+ "code": "1F64B 1F3FD 200D 2640 FE0F",
+ "char": "🙋🏽‍♀️",
+ "name": "woman raising hand: medium skin tone"
+ },
+ {
+ "no": 742,
+ "code": "1F64B 1F3FE 200D 2640 FE0F",
+ "char": "🙋🏾‍♀️",
+ "name": "woman raising hand: medium-dark skin tone"
+ },
+ {
+ "no": 743,
+ "code": "1F64B 1F3FF 200D 2640 FE0F",
+ "char": "🙋🏿‍♀️",
+ "name": "woman raising hand: dark skin tone"
+ },
+ {
+ "no": 744,
+ "code": "1F647",
+ "char": "🙇",
+ "name": "person bowing"
+ },
+ {
+ "no": 745,
+ "code": "1F647 1F3FB",
+ "char": "🙇🏻",
+ "name": "person bowing: light skin tone"
+ },
+ {
+ "no": 746,
+ "code": "1F647 1F3FC",
+ "char": "🙇🏼",
+ "name": "person bowing: medium-light skin tone"
+ },
+ {
+ "no": 747,
+ "code": "1F647 1F3FD",
+ "char": "🙇🏽",
+ "name": "person bowing: medium skin tone"
+ },
+ {
+ "no": 748,
+ "code": "1F647 1F3FE",
+ "char": "🙇🏾",
+ "name": "person bowing: medium-dark skin tone"
+ },
+ {
+ "no": 749,
+ "code": "1F647 1F3FF",
+ "char": "🙇🏿",
+ "name": "person bowing: dark skin tone"
+ },
+ {
+ "no": 750,
+ "code": "1F647 200D 2642 FE0F",
+ "char": "🙇‍♂️",
+ "name": "man bowing"
+ },
+ {
+ "no": 751,
+ "code": "1F647 1F3FB 200D 2642 FE0F",
+ "char": "🙇🏻‍♂️",
+ "name": "man bowing: light skin tone"
+ },
+ {
+ "no": 752,
+ "code": "1F647 1F3FC 200D 2642 FE0F",
+ "char": "🙇🏼‍♂️",
+ "name": "man bowing: medium-light skin tone"
+ },
+ {
+ "no": 753,
+ "code": "1F647 1F3FD 200D 2642 FE0F",
+ "char": "🙇🏽‍♂️",
+ "name": "man bowing: medium skin tone"
+ },
+ {
+ "no": 754,
+ "code": "1F647 1F3FE 200D 2642 FE0F",
+ "char": "🙇🏾‍♂️",
+ "name": "man bowing: medium-dark skin tone"
+ },
+ {
+ "no": 755,
+ "code": "1F647 1F3FF 200D 2642 FE0F",
+ "char": "🙇🏿‍♂️",
+ "name": "man bowing: dark skin tone"
+ },
+ {
+ "no": 756,
+ "code": "1F647 200D 2640 FE0F",
+ "char": "🙇‍♀️",
+ "name": "woman bowing"
+ },
+ {
+ "no": 757,
+ "code": "1F647 1F3FB 200D 2640 FE0F",
+ "char": "🙇🏻‍♀️",
+ "name": "woman bowing: light skin tone"
+ },
+ {
+ "no": 758,
+ "code": "1F647 1F3FC 200D 2640 FE0F",
+ "char": "🙇🏼‍♀️",
+ "name": "woman bowing: medium-light skin tone"
+ },
+ {
+ "no": 759,
+ "code": "1F647 1F3FD 200D 2640 FE0F",
+ "char": "🙇🏽‍♀️",
+ "name": "woman bowing: medium skin tone"
+ },
+ {
+ "no": 760,
+ "code": "1F647 1F3FE 200D 2640 FE0F",
+ "char": "🙇🏾‍♀️",
+ "name": "woman bowing: medium-dark skin tone"
+ },
+ {
+ "no": 761,
+ "code": "1F647 1F3FF 200D 2640 FE0F",
+ "char": "🙇🏿‍♀️",
+ "name": "woman bowing: dark skin tone"
+ },
+ {
+ "no": 762,
+ "code": "1F926",
+ "char": "🤦",
+ "name": "person facepalming"
+ },
+ {
+ "no": 763,
+ "code": "1F926 1F3FB",
+ "char": "🤦🏻",
+ "name": "person facepalming: light skin tone"
+ },
+ {
+ "no": 764,
+ "code": "1F926 1F3FC",
+ "char": "🤦🏼",
+ "name": "person facepalming: medium-light skin tone"
+ },
+ {
+ "no": 765,
+ "code": "1F926 1F3FD",
+ "char": "🤦🏽",
+ "name": "person facepalming: medium skin tone"
+ },
+ {
+ "no": 766,
+ "code": "1F926 1F3FE",
+ "char": "🤦🏾",
+ "name": "person facepalming: medium-dark skin tone"
+ },
+ {
+ "no": 767,
+ "code": "1F926 1F3FF",
+ "char": "🤦🏿",
+ "name": "person facepalming: dark skin tone"
+ },
+ {
+ "no": 768,
+ "code": "1F926 200D 2642 FE0F",
+ "char": "🤦‍♂️",
+ "name": "man facepalming"
+ },
+ {
+ "no": 769,
+ "code": "1F926 1F3FB 200D 2642 FE0F",
+ "char": "🤦🏻‍♂️",
+ "name": "man facepalming: light skin tone"
+ },
+ {
+ "no": 770,
+ "code": "1F926 1F3FC 200D 2642 FE0F",
+ "char": "🤦🏼‍♂️",
+ "name": "man facepalming: medium-light skin tone"
+ },
+ {
+ "no": 771,
+ "code": "1F926 1F3FD 200D 2642 FE0F",
+ "char": "🤦🏽‍♂️",
+ "name": "man facepalming: medium skin tone"
+ },
+ {
+ "no": 772,
+ "code": "1F926 1F3FE 200D 2642 FE0F",
+ "char": "🤦🏾‍♂️",
+ "name": "man facepalming: medium-dark skin tone"
+ },
+ {
+ "no": 773,
+ "code": "1F926 1F3FF 200D 2642 FE0F",
+ "char": "🤦🏿‍♂️",
+ "name": "man facepalming: dark skin tone"
+ },
+ {
+ "no": 774,
+ "code": "1F926 200D 2640 FE0F",
+ "char": "🤦‍♀️",
+ "name": "woman facepalming"
+ },
+ {
+ "no": 775,
+ "code": "1F926 1F3FB 200D 2640 FE0F",
+ "char": "🤦🏻‍♀️",
+ "name": "woman facepalming: light skin tone"
+ },
+ {
+ "no": 776,
+ "code": "1F926 1F3FC 200D 2640 FE0F",
+ "char": "🤦🏼‍♀️",
+ "name": "woman facepalming: medium-light skin tone"
+ },
+ {
+ "no": 777,
+ "code": "1F926 1F3FD 200D 2640 FE0F",
+ "char": "🤦🏽‍♀️",
+ "name": "woman facepalming: medium skin tone"
+ },
+ {
+ "no": 778,
+ "code": "1F926 1F3FE 200D 2640 FE0F",
+ "char": "🤦🏾‍♀️",
+ "name": "woman facepalming: medium-dark skin tone"
+ },
+ {
+ "no": 779,
+ "code": "1F926 1F3FF 200D 2640 FE0F",
+ "char": "🤦🏿‍♀️",
+ "name": "woman facepalming: dark skin tone"
+ },
+ {
+ "no": 780,
+ "code": "1F937",
+ "char": "🤷",
+ "name": "person shrugging"
+ },
+ {
+ "no": 781,
+ "code": "1F937 1F3FB",
+ "char": "🤷🏻",
+ "name": "person shrugging: light skin tone"
+ },
+ {
+ "no": 782,
+ "code": "1F937 1F3FC",
+ "char": "🤷🏼",
+ "name": "person shrugging: medium-light skin tone"
+ },
+ {
+ "no": 783,
+ "code": "1F937 1F3FD",
+ "char": "🤷🏽",
+ "name": "person shrugging: medium skin tone"
+ },
+ {
+ "no": 784,
+ "code": "1F937 1F3FE",
+ "char": "🤷🏾",
+ "name": "person shrugging: medium-dark skin tone"
+ },
+ {
+ "no": 785,
+ "code": "1F937 1F3FF",
+ "char": "🤷🏿",
+ "name": "person shrugging: dark skin tone"
+ },
+ {
+ "no": 786,
+ "code": "1F937 200D 2642 FE0F",
+ "char": "🤷‍♂️",
+ "name": "man shrugging"
+ },
+ {
+ "no": 787,
+ "code": "1F937 1F3FB 200D 2642 FE0F",
+ "char": "🤷🏻‍♂️",
+ "name": "man shrugging: light skin tone"
+ },
+ {
+ "no": 788,
+ "code": "1F937 1F3FC 200D 2642 FE0F",
+ "char": "🤷🏼‍♂️",
+ "name": "man shrugging: medium-light skin tone"
+ },
+ {
+ "no": 789,
+ "code": "1F937 1F3FD 200D 2642 FE0F",
+ "char": "🤷🏽‍♂️",
+ "name": "man shrugging: medium skin tone"
+ },
+ {
+ "no": 790,
+ "code": "1F937 1F3FE 200D 2642 FE0F",
+ "char": "🤷🏾‍♂️",
+ "name": "man shrugging: medium-dark skin tone"
+ },
+ {
+ "no": 791,
+ "code": "1F937 1F3FF 200D 2642 FE0F",
+ "char": "🤷🏿‍♂️",
+ "name": "man shrugging: dark skin tone"
+ },
+ {
+ "no": 792,
+ "code": "1F937 200D 2640 FE0F",
+ "char": "🤷‍♀️",
+ "name": "woman shrugging"
+ },
+ {
+ "no": 793,
+ "code": "1F937 1F3FB 200D 2640 FE0F",
+ "char": "🤷🏻‍♀️",
+ "name": "woman shrugging: light skin tone"
+ },
+ {
+ "no": 794,
+ "code": "1F937 1F3FC 200D 2640 FE0F",
+ "char": "🤷🏼‍♀️",
+ "name": "woman shrugging: medium-light skin tone"
+ },
+ {
+ "no": 795,
+ "code": "1F937 1F3FD 200D 2640 FE0F",
+ "char": "🤷🏽‍♀️",
+ "name": "woman shrugging: medium skin tone"
+ },
+ {
+ "no": 796,
+ "code": "1F937 1F3FE 200D 2640 FE0F",
+ "char": "🤷🏾‍♀️",
+ "name": "woman shrugging: medium-dark skin tone"
+ },
+ {
+ "no": 797,
+ "code": "1F937 1F3FF 200D 2640 FE0F",
+ "char": "🤷🏿‍♀️",
+ "name": "woman shrugging: dark skin tone"
+ },
+ {
+ "no": 798,
+ "code": "1F486",
+ "char": "💆",
+ "name": "person getting massage"
+ },
+ {
+ "no": 799,
+ "code": "1F486 1F3FB",
+ "char": "💆🏻",
+ "name": "person getting massage: light skin tone"
+ },
+ {
+ "no": 800,
+ "code": "1F486 1F3FC",
+ "char": "💆🏼",
+ "name": "person getting massage: medium-light skin tone"
+ },
+ {
+ "no": 801,
+ "code": "1F486 1F3FD",
+ "char": "💆🏽",
+ "name": "person getting massage: medium skin tone"
+ },
+ {
+ "no": 802,
+ "code": "1F486 1F3FE",
+ "char": "💆🏾",
+ "name": "person getting massage: medium-dark skin tone"
+ },
+ {
+ "no": 803,
+ "code": "1F486 1F3FF",
+ "char": "💆🏿",
+ "name": "person getting massage: dark skin tone"
+ },
+ {
+ "no": 804,
+ "code": "1F486 200D 2642 FE0F",
+ "char": "💆‍♂️",
+ "name": "man getting massage"
+ },
+ {
+ "no": 805,
+ "code": "1F486 1F3FB 200D 2642 FE0F",
+ "char": "💆🏻‍♂️",
+ "name": "man getting massage: light skin tone"
+ },
+ {
+ "no": 806,
+ "code": "1F486 1F3FC 200D 2642 FE0F",
+ "char": "💆🏼‍♂️",
+ "name": "man getting massage: medium-light skin tone"
+ },
+ {
+ "no": 807,
+ "code": "1F486 1F3FD 200D 2642 FE0F",
+ "char": "💆🏽‍♂️",
+ "name": "man getting massage: medium skin tone"
+ },
+ {
+ "no": 808,
+ "code": "1F486 1F3FE 200D 2642 FE0F",
+ "char": "💆🏾‍♂️",
+ "name": "man getting massage: medium-dark skin tone"
+ },
+ {
+ "no": 809,
+ "code": "1F486 1F3FF 200D 2642 FE0F",
+ "char": "💆🏿‍♂️",
+ "name": "man getting massage: dark skin tone"
+ },
+ {
+ "no": 810,
+ "code": "1F486 200D 2640 FE0F",
+ "char": "💆‍♀️",
+ "name": "woman getting massage"
+ },
+ {
+ "no": 811,
+ "code": "1F486 1F3FB 200D 2640 FE0F",
+ "char": "💆🏻‍♀️",
+ "name": "woman getting massage: light skin tone"
+ },
+ {
+ "no": 812,
+ "code": "1F486 1F3FC 200D 2640 FE0F",
+ "char": "💆🏼‍♀️",
+ "name": "woman getting massage: medium-light skin tone"
+ },
+ {
+ "no": 813,
+ "code": "1F486 1F3FD 200D 2640 FE0F",
+ "char": "💆🏽‍♀️",
+ "name": "woman getting massage: medium skin tone"
+ },
+ {
+ "no": 814,
+ "code": "1F486 1F3FE 200D 2640 FE0F",
+ "char": "💆🏾‍♀️",
+ "name": "woman getting massage: medium-dark skin tone"
+ },
+ {
+ "no": 815,
+ "code": "1F486 1F3FF 200D 2640 FE0F",
+ "char": "💆🏿‍♀️",
+ "name": "woman getting massage: dark skin tone"
+ },
+ {
+ "no": 816,
+ "code": "1F487",
+ "char": "💇",
+ "name": "person getting haircut"
+ },
+ {
+ "no": 817,
+ "code": "1F487 1F3FB",
+ "char": "💇🏻",
+ "name": "person getting haircut: light skin tone"
+ },
+ {
+ "no": 818,
+ "code": "1F487 1F3FC",
+ "char": "💇🏼",
+ "name": "person getting haircut: medium-light skin tone"
+ },
+ {
+ "no": 819,
+ "code": "1F487 1F3FD",
+ "char": "💇🏽",
+ "name": "person getting haircut: medium skin tone"
+ },
+ {
+ "no": 820,
+ "code": "1F487 1F3FE",
+ "char": "💇🏾",
+ "name": "person getting haircut: medium-dark skin tone"
+ },
+ {
+ "no": 821,
+ "code": "1F487 1F3FF",
+ "char": "💇🏿",
+ "name": "person getting haircut: dark skin tone"
+ },
+ {
+ "no": 822,
+ "code": "1F487 200D 2642 FE0F",
+ "char": "💇‍♂️",
+ "name": "man getting haircut"
+ },
+ {
+ "no": 823,
+ "code": "1F487 1F3FB 200D 2642 FE0F",
+ "char": "💇🏻‍♂️",
+ "name": "man getting haircut: light skin tone"
+ },
+ {
+ "no": 824,
+ "code": "1F487 1F3FC 200D 2642 FE0F",
+ "char": "💇🏼‍♂️",
+ "name": "man getting haircut: medium-light skin tone"
+ },
+ {
+ "no": 825,
+ "code": "1F487 1F3FD 200D 2642 FE0F",
+ "char": "💇🏽‍♂️",
+ "name": "man getting haircut: medium skin tone"
+ },
+ {
+ "no": 826,
+ "code": "1F487 1F3FE 200D 2642 FE0F",
+ "char": "💇🏾‍♂️",
+ "name": "man getting haircut: medium-dark skin tone"
+ },
+ {
+ "no": 827,
+ "code": "1F487 1F3FF 200D 2642 FE0F",
+ "char": "💇🏿‍♂️",
+ "name": "man getting haircut: dark skin tone"
+ },
+ {
+ "no": 828,
+ "code": "1F487 200D 2640 FE0F",
+ "char": "💇‍♀️",
+ "name": "woman getting haircut"
+ },
+ {
+ "no": 829,
+ "code": "1F487 1F3FB 200D 2640 FE0F",
+ "char": "💇🏻‍♀️",
+ "name": "woman getting haircut: light skin tone"
+ },
+ {
+ "no": 830,
+ "code": "1F487 1F3FC 200D 2640 FE0F",
+ "char": "💇🏼‍♀️",
+ "name": "woman getting haircut: medium-light skin tone"
+ },
+ {
+ "no": 831,
+ "code": "1F487 1F3FD 200D 2640 FE0F",
+ "char": "💇🏽‍♀️",
+ "name": "woman getting haircut: medium skin tone"
+ },
+ {
+ "no": 832,
+ "code": "1F487 1F3FE 200D 2640 FE0F",
+ "char": "💇🏾‍♀️",
+ "name": "woman getting haircut: medium-dark skin tone"
+ },
+ {
+ "no": 833,
+ "code": "1F487 1F3FF 200D 2640 FE0F",
+ "char": "💇🏿‍♀️",
+ "name": "woman getting haircut: dark skin tone"
+ },
+ {
+ "no": 834,
+ "code": "1F6B6",
+ "char": "🚶",
+ "name": "person walking"
+ },
+ {
+ "no": 835,
+ "code": "1F6B6 1F3FB",
+ "char": "🚶🏻",
+ "name": "person walking: light skin tone"
+ },
+ {
+ "no": 836,
+ "code": "1F6B6 1F3FC",
+ "char": "🚶🏼",
+ "name": "person walking: medium-light skin tone"
+ },
+ {
+ "no": 837,
+ "code": "1F6B6 1F3FD",
+ "char": "🚶🏽",
+ "name": "person walking: medium skin tone"
+ },
+ {
+ "no": 838,
+ "code": "1F6B6 1F3FE",
+ "char": "🚶🏾",
+ "name": "person walking: medium-dark skin tone"
+ },
+ {
+ "no": 839,
+ "code": "1F6B6 1F3FF",
+ "char": "🚶🏿",
+ "name": "person walking: dark skin tone"
+ },
+ {
+ "no": 840,
+ "code": "1F6B6 200D 2642 FE0F",
+ "char": "🚶‍♂️",
+ "name": "man walking"
+ },
+ {
+ "no": 841,
+ "code": "1F6B6 1F3FB 200D 2642 FE0F",
+ "char": "🚶🏻‍♂️",
+ "name": "man walking: light skin tone"
+ },
+ {
+ "no": 842,
+ "code": "1F6B6 1F3FC 200D 2642 FE0F",
+ "char": "🚶🏼‍♂️",
+ "name": "man walking: medium-light skin tone"
+ },
+ {
+ "no": 843,
+ "code": "1F6B6 1F3FD 200D 2642 FE0F",
+ "char": "🚶🏽‍♂️",
+ "name": "man walking: medium skin tone"
+ },
+ {
+ "no": 844,
+ "code": "1F6B6 1F3FE 200D 2642 FE0F",
+ "char": "🚶🏾‍♂️",
+ "name": "man walking: medium-dark skin tone"
+ },
+ {
+ "no": 845,
+ "code": "1F6B6 1F3FF 200D 2642 FE0F",
+ "char": "🚶🏿‍♂️",
+ "name": "man walking: dark skin tone"
+ },
+ {
+ "no": 846,
+ "code": "1F6B6 200D 2640 FE0F",
+ "char": "🚶‍♀️",
+ "name": "woman walking"
+ },
+ {
+ "no": 847,
+ "code": "1F6B6 1F3FB 200D 2640 FE0F",
+ "char": "🚶🏻‍♀️",
+ "name": "woman walking: light skin tone"
+ },
+ {
+ "no": 848,
+ "code": "1F6B6 1F3FC 200D 2640 FE0F",
+ "char": "🚶🏼‍♀️",
+ "name": "woman walking: medium-light skin tone"
+ },
+ {
+ "no": 849,
+ "code": "1F6B6 1F3FD 200D 2640 FE0F",
+ "char": "🚶🏽‍♀️",
+ "name": "woman walking: medium skin tone"
+ },
+ {
+ "no": 850,
+ "code": "1F6B6 1F3FE 200D 2640 FE0F",
+ "char": "🚶🏾‍♀️",
+ "name": "woman walking: medium-dark skin tone"
+ },
+ {
+ "no": 851,
+ "code": "1F6B6 1F3FF 200D 2640 FE0F",
+ "char": "🚶🏿‍♀️",
+ "name": "woman walking: dark skin tone"
+ },
+ {
+ "no": 852,
+ "code": "1F3C3",
+ "char": "🏃",
+ "name": "person running"
+ },
+ {
+ "no": 853,
+ "code": "1F3C3 1F3FB",
+ "char": "🏃🏻",
+ "name": "person running: light skin tone"
+ },
+ {
+ "no": 854,
+ "code": "1F3C3 1F3FC",
+ "char": "🏃🏼",
+ "name": "person running: medium-light skin tone"
+ },
+ {
+ "no": 855,
+ "code": "1F3C3 1F3FD",
+ "char": "🏃🏽",
+ "name": "person running: medium skin tone"
+ },
+ {
+ "no": 856,
+ "code": "1F3C3 1F3FE",
+ "char": "🏃🏾",
+ "name": "person running: medium-dark skin tone"
+ },
+ {
+ "no": 857,
+ "code": "1F3C3 1F3FF",
+ "char": "🏃🏿",
+ "name": "person running: dark skin tone"
+ },
+ {
+ "no": 858,
+ "code": "1F3C3 200D 2642 FE0F",
+ "char": "🏃‍♂️",
+ "name": "man running"
+ },
+ {
+ "no": 859,
+ "code": "1F3C3 1F3FB 200D 2642 FE0F",
+ "char": "🏃🏻‍♂️",
+ "name": "man running: light skin tone"
+ },
+ {
+ "no": 860,
+ "code": "1F3C3 1F3FC 200D 2642 FE0F",
+ "char": "🏃🏼‍♂️",
+ "name": "man running: medium-light skin tone"
+ },
+ {
+ "no": 861,
+ "code": "1F3C3 1F3FD 200D 2642 FE0F",
+ "char": "🏃🏽‍♂️",
+ "name": "man running: medium skin tone"
+ },
+ {
+ "no": 862,
+ "code": "1F3C3 1F3FE 200D 2642 FE0F",
+ "char": "🏃🏾‍♂️",
+ "name": "man running: medium-dark skin tone"
+ },
+ {
+ "no": 863,
+ "code": "1F3C3 1F3FF 200D 2642 FE0F",
+ "char": "🏃🏿‍♂️",
+ "name": "man running: dark skin tone"
+ },
+ {
+ "no": 864,
+ "code": "1F3C3 200D 2640 FE0F",
+ "char": "🏃‍♀️",
+ "name": "woman running"
+ },
+ {
+ "no": 865,
+ "code": "1F3C3 1F3FB 200D 2640 FE0F",
+ "char": "🏃🏻‍♀️",
+ "name": "woman running: light skin tone"
+ },
+ {
+ "no": 866,
+ "code": "1F3C3 1F3FC 200D 2640 FE0F",
+ "char": "🏃🏼‍♀️",
+ "name": "woman running: medium-light skin tone"
+ },
+ {
+ "no": 867,
+ "code": "1F3C3 1F3FD 200D 2640 FE0F",
+ "char": "🏃🏽‍♀️",
+ "name": "woman running: medium skin tone"
+ },
+ {
+ "no": 868,
+ "code": "1F3C3 1F3FE 200D 2640 FE0F",
+ "char": "🏃🏾‍♀️",
+ "name": "woman running: medium-dark skin tone"
+ },
+ {
+ "no": 869,
+ "code": "1F3C3 1F3FF 200D 2640 FE0F",
+ "char": "🏃🏿‍♀️",
+ "name": "woman running: dark skin tone"
+ },
+ {
+ "no": 870,
+ "code": "1F483",
+ "char": "💃",
+ "name": "woman dancing"
+ },
+ {
+ "no": 871,
+ "code": "1F483 1F3FB",
+ "char": "💃🏻",
+ "name": "woman dancing: light skin tone"
+ },
+ {
+ "no": 872,
+ "code": "1F483 1F3FC",
+ "char": "💃🏼",
+ "name": "woman dancing: medium-light skin tone"
+ },
+ {
+ "no": 873,
+ "code": "1F483 1F3FD",
+ "char": "💃🏽",
+ "name": "woman dancing: medium skin tone"
+ },
+ {
+ "no": 874,
+ "code": "1F483 1F3FE",
+ "char": "💃🏾",
+ "name": "woman dancing: medium-dark skin tone"
+ },
+ {
+ "no": 875,
+ "code": "1F483 1F3FF",
+ "char": "💃🏿",
+ "name": "woman dancing: dark skin tone"
+ },
+ {
+ "no": 876,
+ "code": "1F57A",
+ "char": "🕺",
+ "name": "man dancing"
+ },
+ {
+ "no": 877,
+ "code": "1F57A 1F3FB",
+ "char": "🕺🏻",
+ "name": "man dancing: light skin tone"
+ },
+ {
+ "no": 878,
+ "code": "1F57A 1F3FC",
+ "char": "🕺🏼",
+ "name": "man dancing: medium-light skin tone"
+ },
+ {
+ "no": 879,
+ "code": "1F57A 1F3FD",
+ "char": "🕺🏽",
+ "name": "man dancing: medium skin tone"
+ },
+ {
+ "no": 880,
+ "code": "1F57A 1F3FE",
+ "char": "🕺🏾",
+ "name": "man dancing: medium-dark skin tone"
+ },
+ {
+ "no": 881,
+ "code": "1F57A 1F3FF",
+ "char": "🕺🏿",
+ "name": "man dancing: dark skin tone"
+ },
+ {
+ "no": 882,
+ "code": "1F46F",
+ "char": "👯",
+ "name": "people with bunny ears"
+ },
+ {
+ "no": 883,
+ "code": "1F46F 200D 2642 FE0F",
+ "char": "👯‍♂️",
+ "name": "men with bunny ears"
+ },
+ {
+ "no": 884,
+ "code": "1F46F 200D 2640 FE0F",
+ "char": "👯‍♀️",
+ "name": "women with bunny ears"
+ },
+ {
+ "no": 885,
+ "code": "1F9D6",
+ "char": "🧖",
+ "name": "⊛ person in steamy room"
+ },
+ {
+ "no": 886,
+ "code": "1F9D6 1F3FB",
+ "char": "🧖🏻",
+ "name": "⊛ person in steamy room: light skin tone"
+ },
+ {
+ "no": 887,
+ "code": "1F9D6 1F3FC",
+ "char": "🧖🏼",
+ "name": "⊛ person in steamy room: medium-light skin tone"
+ },
+ {
+ "no": 888,
+ "code": "1F9D6 1F3FD",
+ "char": "🧖🏽",
+ "name": "⊛ person in steamy room: medium skin tone"
+ },
+ {
+ "no": 889,
+ "code": "1F9D6 1F3FE",
+ "char": "🧖🏾",
+ "name": "⊛ person in steamy room: medium-dark skin tone"
+ },
+ {
+ "no": 890,
+ "code": "1F9D6 1F3FF",
+ "char": "🧖🏿",
+ "name": "⊛ person in steamy room: dark skin tone"
+ },
+ {
+ "no": 891,
+ "code": "1F9D6 200D 2640 FE0F",
+ "char": "🧖‍♀️",
+ "name": "⊛ woman in steamy room"
+ },
+ {
+ "no": 892,
+ "code": "1F9D6 1F3FB 200D 2640 FE0F",
+ "char": "🧖🏻‍♀️",
+ "name": "⊛ woman in steamy room: light skin tone"
+ },
+ {
+ "no": 893,
+ "code": "1F9D6 1F3FC 200D 2640 FE0F",
+ "char": "🧖🏼‍♀️",
+ "name": "⊛ woman in steamy room: medium-light skin tone"
+ },
+ {
+ "no": 894,
+ "code": "1F9D6 1F3FD 200D 2640 FE0F",
+ "char": "🧖🏽‍♀️",
+ "name": "⊛ woman in steamy room: medium skin tone"
+ },
+ {
+ "no": 895,
+ "code": "1F9D6 1F3FE 200D 2640 FE0F",
+ "char": "🧖🏾‍♀️",
+ "name": "⊛ woman in steamy room: medium-dark skin tone"
+ },
+ {
+ "no": 896,
+ "code": "1F9D6 1F3FF 200D 2640 FE0F",
+ "char": "🧖🏿‍♀️",
+ "name": "⊛ woman in steamy room: dark skin tone"
+ },
+ {
+ "no": 897,
+ "code": "1F9D6 200D 2642 FE0F",
+ "char": "🧖‍♂️",
+ "name": "⊛ man in steamy room"
+ },
+ {
+ "no": 898,
+ "code": "1F9D6 1F3FB 200D 2642 FE0F",
+ "char": "🧖🏻‍♂️",
+ "name": "⊛ man in steamy room: light skin tone"
+ },
+ {
+ "no": 899,
+ "code": "1F9D6 1F3FC 200D 2642 FE0F",
+ "char": "🧖🏼‍♂️",
+ "name": "⊛ man in steamy room: medium-light skin tone"
+ },
+ {
+ "no": 900,
+ "code": "1F9D6 1F3FD 200D 2642 FE0F",
+ "char": "🧖🏽‍♂️",
+ "name": "⊛ man in steamy room: medium skin tone"
+ },
+ {
+ "no": 901,
+ "code": "1F9D6 1F3FE 200D 2642 FE0F",
+ "char": "🧖🏾‍♂️",
+ "name": "⊛ man in steamy room: medium-dark skin tone"
+ },
+ {
+ "no": 902,
+ "code": "1F9D6 1F3FF 200D 2642 FE0F",
+ "char": "🧖🏿‍♂️",
+ "name": "⊛ man in steamy room: dark skin tone"
+ },
+ {
+ "no": 903,
+ "code": "1F9D7",
+ "char": "🧗",
+ "name": "⊛ person climbing"
+ },
+ {
+ "no": 904,
+ "code": "1F9D7 1F3FB",
+ "char": "🧗🏻",
+ "name": "⊛ person climbing: light skin tone"
+ },
+ {
+ "no": 905,
+ "code": "1F9D7 1F3FC",
+ "char": "🧗🏼",
+ "name": "⊛ person climbing: medium-light skin tone"
+ },
+ {
+ "no": 906,
+ "code": "1F9D7 1F3FD",
+ "char": "🧗🏽",
+ "name": "⊛ person climbing: medium skin tone"
+ },
+ {
+ "no": 907,
+ "code": "1F9D7 1F3FE",
+ "char": "🧗🏾",
+ "name": "⊛ person climbing: medium-dark skin tone"
+ },
+ {
+ "no": 908,
+ "code": "1F9D7 1F3FF",
+ "char": "🧗🏿",
+ "name": "⊛ person climbing: dark skin tone"
+ },
+ {
+ "no": 909,
+ "code": "1F9D7 200D 2640 FE0F",
+ "char": "🧗‍♀️",
+ "name": "⊛ woman climbing"
+ },
+ {
+ "no": 910,
+ "code": "1F9D7 1F3FB 200D 2640 FE0F",
+ "char": "🧗🏻‍♀️",
+ "name": "⊛ woman climbing: light skin tone"
+ },
+ {
+ "no": 911,
+ "code": "1F9D7 1F3FC 200D 2640 FE0F",
+ "char": "🧗🏼‍♀️",
+ "name": "⊛ woman climbing: medium-light skin tone"
+ },
+ {
+ "no": 912,
+ "code": "1F9D7 1F3FD 200D 2640 FE0F",
+ "char": "🧗🏽‍♀️",
+ "name": "⊛ woman climbing: medium skin tone"
+ },
+ {
+ "no": 913,
+ "code": "1F9D7 1F3FE 200D 2640 FE0F",
+ "char": "🧗🏾‍♀️",
+ "name": "⊛ woman climbing: medium-dark skin tone"
+ },
+ {
+ "no": 914,
+ "code": "1F9D7 1F3FF 200D 2640 FE0F",
+ "char": "🧗🏿‍♀️",
+ "name": "⊛ woman climbing: dark skin tone"
+ },
+ {
+ "no": 915,
+ "code": "1F9D7 200D 2642 FE0F",
+ "char": "🧗‍♂️",
+ "name": "⊛ man climbing"
+ },
+ {
+ "no": 916,
+ "code": "1F9D7 1F3FB 200D 2642 FE0F",
+ "char": "🧗🏻‍♂️",
+ "name": "⊛ man climbing: light skin tone"
+ },
+ {
+ "no": 917,
+ "code": "1F9D7 1F3FC 200D 2642 FE0F",
+ "char": "🧗🏼‍♂️",
+ "name": "⊛ man climbing: medium-light skin tone"
+ },
+ {
+ "no": 918,
+ "code": "1F9D7 1F3FD 200D 2642 FE0F",
+ "char": "🧗🏽‍♂️",
+ "name": "⊛ man climbing: medium skin tone"
+ },
+ {
+ "no": 919,
+ "code": "1F9D7 1F3FE 200D 2642 FE0F",
+ "char": "🧗🏾‍♂️",
+ "name": "⊛ man climbing: medium-dark skin tone"
+ },
+ {
+ "no": 920,
+ "code": "1F9D7 1F3FF 200D 2642 FE0F",
+ "char": "🧗🏿‍♂️",
+ "name": "⊛ man climbing: dark skin tone"
+ },
+ {
+ "no": 921,
+ "code": "1F9D8",
+ "char": "🧘",
+ "name": "⊛ person in lotus position"
+ },
+ {
+ "no": 922,
+ "code": "1F9D8 1F3FB",
+ "char": "🧘🏻",
+ "name": "⊛ person in lotus position: light skin tone"
+ },
+ {
+ "no": 923,
+ "code": "1F9D8 1F3FC",
+ "char": "🧘🏼",
+ "name": "⊛ person in lotus position: medium-light skin tone"
+ },
+ {
+ "no": 924,
+ "code": "1F9D8 1F3FD",
+ "char": "🧘🏽",
+ "name": "⊛ person in lotus position: medium skin tone"
+ },
+ {
+ "no": 925,
+ "code": "1F9D8 1F3FE",
+ "char": "🧘🏾",
+ "name": "⊛ person in lotus position: medium-dark skin tone"
+ },
+ {
+ "no": 926,
+ "code": "1F9D8 1F3FF",
+ "char": "🧘🏿",
+ "name": "⊛ person in lotus position: dark skin tone"
+ },
+ {
+ "no": 927,
+ "code": "1F9D8 200D 2640 FE0F",
+ "char": "🧘‍♀️",
+ "name": "⊛ woman in lotus position"
+ },
+ {
+ "no": 928,
+ "code": "1F9D8 1F3FB 200D 2640 FE0F",
+ "char": "🧘🏻‍♀️",
+ "name": "⊛ woman in lotus position: light skin tone"
+ },
+ {
+ "no": 929,
+ "code": "1F9D8 1F3FC 200D 2640 FE0F",
+ "char": "🧘🏼‍♀️",
+ "name": "⊛ woman in lotus position: medium-light skin tone"
+ },
+ {
+ "no": 930,
+ "code": "1F9D8 1F3FD 200D 2640 FE0F",
+ "char": "🧘🏽‍♀️",
+ "name": "⊛ woman in lotus position: medium skin tone"
+ },
+ {
+ "no": 931,
+ "code": "1F9D8 1F3FE 200D 2640 FE0F",
+ "char": "🧘🏾‍♀️",
+ "name": "⊛ woman in lotus position: medium-dark skin tone"
+ },
+ {
+ "no": 932,
+ "code": "1F9D8 1F3FF 200D 2640 FE0F",
+ "char": "🧘🏿‍♀️",
+ "name": "⊛ woman in lotus position: dark skin tone"
+ },
+ {
+ "no": 933,
+ "code": "1F9D8 200D 2642 FE0F",
+ "char": "🧘‍♂️",
+ "name": "⊛ man in lotus position"
+ },
+ {
+ "no": 934,
+ "code": "1F9D8 1F3FB 200D 2642 FE0F",
+ "char": "🧘🏻‍♂️",
+ "name": "⊛ man in lotus position: light skin tone"
+ },
+ {
+ "no": 935,
+ "code": "1F9D8 1F3FC 200D 2642 FE0F",
+ "char": "🧘🏼‍♂️",
+ "name": "⊛ man in lotus position: medium-light skin tone"
+ },
+ {
+ "no": 936,
+ "code": "1F9D8 1F3FD 200D 2642 FE0F",
+ "char": "🧘🏽‍♂️",
+ "name": "⊛ man in lotus position: medium skin tone"
+ },
+ {
+ "no": 937,
+ "code": "1F9D8 1F3FE 200D 2642 FE0F",
+ "char": "🧘🏾‍♂️",
+ "name": "⊛ man in lotus position: medium-dark skin tone"
+ },
+ {
+ "no": 938,
+ "code": "1F9D8 1F3FF 200D 2642 FE0F",
+ "char": "🧘🏿‍♂️",
+ "name": "⊛ man in lotus position: dark skin tone"
+ },
+ {
+ "no": 939,
+ "code": "1F6C0",
+ "char": "🛀",
+ "name": "person taking bath"
+ },
+ {
+ "no": 940,
+ "code": "1F6C0 1F3FB",
+ "char": "🛀🏻",
+ "name": "person taking bath: light skin tone"
+ },
+ {
+ "no": 941,
+ "code": "1F6C0 1F3FC",
+ "char": "🛀🏼",
+ "name": "person taking bath: medium-light skin tone"
+ },
+ {
+ "no": 942,
+ "code": "1F6C0 1F3FD",
+ "char": "🛀🏽",
+ "name": "person taking bath: medium skin tone"
+ },
+ {
+ "no": 943,
+ "code": "1F6C0 1F3FE",
+ "char": "🛀🏾",
+ "name": "person taking bath: medium-dark skin tone"
+ },
+ {
+ "no": 944,
+ "code": "1F6C0 1F3FF",
+ "char": "🛀🏿",
+ "name": "person taking bath: dark skin tone"
+ },
+ {
+ "no": 945,
+ "code": "1F6CC",
+ "char": "🛌",
+ "name": "person in bed"
+ },
+ {
+ "no": 946,
+ "code": "1F6CC 1F3FB",
+ "char": "🛌🏻",
+ "name": "person in bed: light skin tone"
+ },
+ {
+ "no": 947,
+ "code": "1F6CC 1F3FC",
+ "char": "🛌🏼",
+ "name": "person in bed: medium-light skin tone"
+ },
+ {
+ "no": 948,
+ "code": "1F6CC 1F3FD",
+ "char": "🛌🏽",
+ "name": "person in bed: medium skin tone"
+ },
+ {
+ "no": 949,
+ "code": "1F6CC 1F3FE",
+ "char": "🛌🏾",
+ "name": "person in bed: medium-dark skin tone"
+ },
+ {
+ "no": 950,
+ "code": "1F6CC 1F3FF",
+ "char": "🛌🏿",
+ "name": "person in bed: dark skin tone"
+ },
+ {
+ "no": 951,
+ "code": "1F574",
+ "char": "🕴",
+ "name": "man in suit levitating"
+ },
+ {
+ "no": 952,
+ "code": "1F574 1F3FB",
+ "char": "🕴🏻",
+ "name": "man in suit levitating: light skin tone"
+ },
+ {
+ "no": 953,
+ "code": "1F574 1F3FC",
+ "char": "🕴🏼",
+ "name": "man in suit levitating: medium-light skin tone"
+ },
+ {
+ "no": 954,
+ "code": "1F574 1F3FD",
+ "char": "🕴🏽",
+ "name": "man in suit levitating: medium skin tone"
+ },
+ {
+ "no": 955,
+ "code": "1F574 1F3FE",
+ "char": "🕴🏾",
+ "name": "man in suit levitating: medium-dark skin tone"
+ },
+ {
+ "no": 956,
+ "code": "1F574 1F3FF",
+ "char": "🕴🏿",
+ "name": "man in suit levitating: dark skin tone"
+ },
+ {
+ "no": 957,
+ "code": "1F5E3",
+ "char": "🗣",
+ "name": "speaking head"
+ },
+ {
+ "no": 958,
+ "code": "1F464",
+ "char": "👤",
+ "name": "bust in silhouette"
+ },
+ {
+ "no": 959,
+ "code": "1F465",
+ "char": "👥",
+ "name": "busts in silhouette"
+ },
+ {
+ "no": 960,
+ "code": "1F93A",
+ "char": "🤺",
+ "name": "person fencing"
+ },
+ {
+ "no": 961,
+ "code": "1F3C7",
+ "char": "🏇",
+ "name": "horse racing"
+ },
+ {
+ "no": 962,
+ "code": "1F3C7 1F3FB",
+ "char": "🏇🏻",
+ "name": "horse racing: light skin tone"
+ },
+ {
+ "no": 963,
+ "code": "1F3C7 1F3FC",
+ "char": "🏇🏼",
+ "name": "horse racing: medium-light skin tone"
+ },
+ {
+ "no": 964,
+ "code": "1F3C7 1F3FD",
+ "char": "🏇🏽",
+ "name": "horse racing: medium skin tone"
+ },
+ {
+ "no": 965,
+ "code": "1F3C7 1F3FE",
+ "char": "🏇🏾",
+ "name": "horse racing: medium-dark skin tone"
+ },
+ {
+ "no": 966,
+ "code": "1F3C7 1F3FF",
+ "char": "🏇🏿",
+ "name": "horse racing: dark skin tone"
+ },
+ {
+ "no": 967,
+ "code": "26F7",
+ "char": "⛷",
+ "name": "skier"
+ },
+ {
+ "no": 968,
+ "code": "1F3C2",
+ "char": "🏂",
+ "name": "snowboarder"
+ },
+ {
+ "no": 969,
+ "code": "1F3C2 1F3FB",
+ "char": "🏂🏻",
+ "name": "snowboarder: light skin tone"
+ },
+ {
+ "no": 970,
+ "code": "1F3C2 1F3FC",
+ "char": "🏂🏼",
+ "name": "snowboarder: medium-light skin tone"
+ },
+ {
+ "no": 971,
+ "code": "1F3C2 1F3FD",
+ "char": "🏂🏽",
+ "name": "snowboarder: medium skin tone"
+ },
+ {
+ "no": 972,
+ "code": "1F3C2 1F3FE",
+ "char": "🏂🏾",
+ "name": "snowboarder: medium-dark skin tone"
+ },
+ {
+ "no": 973,
+ "code": "1F3C2 1F3FF",
+ "char": "🏂🏿",
+ "name": "snowboarder: dark skin tone"
+ },
+ {
+ "no": 974,
+ "code": "1F3CC",
+ "char": "🏌",
+ "name": "person golfing"
+ },
+ {
+ "no": 975,
+ "code": "1F3CC 1F3FB",
+ "char": "🏌🏻",
+ "name": "person golfing: light skin tone"
+ },
+ {
+ "no": 976,
+ "code": "1F3CC 1F3FC",
+ "char": "🏌🏼",
+ "name": "person golfing: medium-light skin tone"
+ },
+ {
+ "no": 977,
+ "code": "1F3CC 1F3FD",
+ "char": "🏌🏽",
+ "name": "person golfing: medium skin tone"
+ },
+ {
+ "no": 978,
+ "code": "1F3CC 1F3FE",
+ "char": "🏌🏾",
+ "name": "person golfing: medium-dark skin tone"
+ },
+ {
+ "no": 979,
+ "code": "1F3CC 1F3FF",
+ "char": "🏌🏿",
+ "name": "person golfing: dark skin tone"
+ },
+ {
+ "no": 980,
+ "code": "1F3CC FE0F 200D 2642 FE0F",
+ "char": "🏌️‍♂️",
+ "name": "man golfing"
+ },
+ {
+ "no": 981,
+ "code": "1F3CC 1F3FB 200D 2642 FE0F",
+ "char": "🏌🏻‍♂️",
+ "name": "man golfing: light skin tone"
+ },
+ {
+ "no": 982,
+ "code": "1F3CC 1F3FC 200D 2642 FE0F",
+ "char": "🏌🏼‍♂️",
+ "name": "man golfing: medium-light skin tone"
+ },
+ {
+ "no": 983,
+ "code": "1F3CC 1F3FD 200D 2642 FE0F",
+ "char": "🏌🏽‍♂️",
+ "name": "man golfing: medium skin tone"
+ },
+ {
+ "no": 984,
+ "code": "1F3CC 1F3FE 200D 2642 FE0F",
+ "char": "🏌🏾‍♂️",
+ "name": "man golfing: medium-dark skin tone"
+ },
+ {
+ "no": 985,
+ "code": "1F3CC 1F3FF 200D 2642 FE0F",
+ "char": "🏌🏿‍♂️",
+ "name": "man golfing: dark skin tone"
+ },
+ {
+ "no": 986,
+ "code": "1F3CC FE0F 200D 2640 FE0F",
+ "char": "🏌️‍♀️",
+ "name": "woman golfing"
+ },
+ {
+ "no": 987,
+ "code": "1F3CC 1F3FB 200D 2640 FE0F",
+ "char": "🏌🏻‍♀️",
+ "name": "woman golfing: light skin tone"
+ },
+ {
+ "no": 988,
+ "code": "1F3CC 1F3FC 200D 2640 FE0F",
+ "char": "🏌🏼‍♀️",
+ "name": "woman golfing: medium-light skin tone"
+ },
+ {
+ "no": 989,
+ "code": "1F3CC 1F3FD 200D 2640 FE0F",
+ "char": "🏌🏽‍♀️",
+ "name": "woman golfing: medium skin tone"
+ },
+ {
+ "no": 990,
+ "code": "1F3CC 1F3FE 200D 2640 FE0F",
+ "char": "🏌🏾‍♀️",
+ "name": "woman golfing: medium-dark skin tone"
+ },
+ {
+ "no": 991,
+ "code": "1F3CC 1F3FF 200D 2640 FE0F",
+ "char": "🏌🏿‍♀️",
+ "name": "woman golfing: dark skin tone"
+ },
+ {
+ "no": 992,
+ "code": "1F3C4",
+ "char": "🏄",
+ "name": "person surfing"
+ },
+ {
+ "no": 993,
+ "code": "1F3C4 1F3FB",
+ "char": "🏄🏻",
+ "name": "person surfing: light skin tone"
+ },
+ {
+ "no": 994,
+ "code": "1F3C4 1F3FC",
+ "char": "🏄🏼",
+ "name": "person surfing: medium-light skin tone"
+ },
+ {
+ "no": 995,
+ "code": "1F3C4 1F3FD",
+ "char": "🏄🏽",
+ "name": "person surfing: medium skin tone"
+ },
+ {
+ "no": 996,
+ "code": "1F3C4 1F3FE",
+ "char": "🏄🏾",
+ "name": "person surfing: medium-dark skin tone"
+ },
+ {
+ "no": 997,
+ "code": "1F3C4 1F3FF",
+ "char": "🏄🏿",
+ "name": "person surfing: dark skin tone"
+ },
+ {
+ "no": 998,
+ "code": "1F3C4 200D 2642 FE0F",
+ "char": "🏄‍♂️",
+ "name": "man surfing"
+ },
+ {
+ "no": 999,
+ "code": "1F3C4 1F3FB 200D 2642 FE0F",
+ "char": "🏄🏻‍♂️",
+ "name": "man surfing: light skin tone"
+ },
+ {
+ "no": 1000,
+ "code": "1F3C4 1F3FC 200D 2642 FE0F",
+ "char": "🏄🏼‍♂️",
+ "name": "man surfing: medium-light skin tone"
+ },
+ {
+ "no": 1001,
+ "code": "1F3C4 1F3FD 200D 2642 FE0F",
+ "char": "🏄🏽‍♂️",
+ "name": "man surfing: medium skin tone"
+ },
+ {
+ "no": 1002,
+ "code": "1F3C4 1F3FE 200D 2642 FE0F",
+ "char": "🏄🏾‍♂️",
+ "name": "man surfing: medium-dark skin tone"
+ },
+ {
+ "no": 1003,
+ "code": "1F3C4 1F3FF 200D 2642 FE0F",
+ "char": "🏄🏿‍♂️",
+ "name": "man surfing: dark skin tone"
+ },
+ {
+ "no": 1004,
+ "code": "1F3C4 200D 2640 FE0F",
+ "char": "🏄‍♀️",
+ "name": "woman surfing"
+ },
+ {
+ "no": 1005,
+ "code": "1F3C4 1F3FB 200D 2640 FE0F",
+ "char": "🏄🏻‍♀️",
+ "name": "woman surfing: light skin tone"
+ },
+ {
+ "no": 1006,
+ "code": "1F3C4 1F3FC 200D 2640 FE0F",
+ "char": "🏄🏼‍♀️",
+ "name": "woman surfing: medium-light skin tone"
+ },
+ {
+ "no": 1007,
+ "code": "1F3C4 1F3FD 200D 2640 FE0F",
+ "char": "🏄🏽‍♀️",
+ "name": "woman surfing: medium skin tone"
+ },
+ {
+ "no": 1008,
+ "code": "1F3C4 1F3FE 200D 2640 FE0F",
+ "char": "🏄🏾‍♀️",
+ "name": "woman surfing: medium-dark skin tone"
+ },
+ {
+ "no": 1009,
+ "code": "1F3C4 1F3FF 200D 2640 FE0F",
+ "char": "🏄🏿‍♀️",
+ "name": "woman surfing: dark skin tone"
+ },
+ {
+ "no": 1010,
+ "code": "1F6A3",
+ "char": "🚣",
+ "name": "person rowing boat"
+ },
+ {
+ "no": 1011,
+ "code": "1F6A3 1F3FB",
+ "char": "🚣🏻",
+ "name": "person rowing boat: light skin tone"
+ },
+ {
+ "no": 1012,
+ "code": "1F6A3 1F3FC",
+ "char": "🚣🏼",
+ "name": "person rowing boat: medium-light skin tone"
+ },
+ {
+ "no": 1013,
+ "code": "1F6A3 1F3FD",
+ "char": "🚣🏽",
+ "name": "person rowing boat: medium skin tone"
+ },
+ {
+ "no": 1014,
+ "code": "1F6A3 1F3FE",
+ "char": "🚣🏾",
+ "name": "person rowing boat: medium-dark skin tone"
+ },
+ {
+ "no": 1015,
+ "code": "1F6A3 1F3FF",
+ "char": "🚣🏿",
+ "name": "person rowing boat: dark skin tone"
+ },
+ {
+ "no": 1016,
+ "code": "1F6A3 200D 2642 FE0F",
+ "char": "🚣‍♂️",
+ "name": "man rowing boat"
+ },
+ {
+ "no": 1017,
+ "code": "1F6A3 1F3FB 200D 2642 FE0F",
+ "char": "🚣🏻‍♂️",
+ "name": "man rowing boat: light skin tone"
+ },
+ {
+ "no": 1018,
+ "code": "1F6A3 1F3FC 200D 2642 FE0F",
+ "char": "🚣🏼‍♂️",
+ "name": "man rowing boat: medium-light skin tone"
+ },
+ {
+ "no": 1019,
+ "code": "1F6A3 1F3FD 200D 2642 FE0F",
+ "char": "🚣🏽‍♂️",
+ "name": "man rowing boat: medium skin tone"
+ },
+ {
+ "no": 1020,
+ "code": "1F6A3 1F3FE 200D 2642 FE0F",
+ "char": "🚣🏾‍♂️",
+ "name": "man rowing boat: medium-dark skin tone"
+ },
+ {
+ "no": 1021,
+ "code": "1F6A3 1F3FF 200D 2642 FE0F",
+ "char": "🚣🏿‍♂️",
+ "name": "man rowing boat: dark skin tone"
+ },
+ {
+ "no": 1022,
+ "code": "1F6A3 200D 2640 FE0F",
+ "char": "🚣‍♀️",
+ "name": "woman rowing boat"
+ },
+ {
+ "no": 1023,
+ "code": "1F6A3 1F3FB 200D 2640 FE0F",
+ "char": "🚣🏻‍♀️",
+ "name": "woman rowing boat: light skin tone"
+ },
+ {
+ "no": 1024,
+ "code": "1F6A3 1F3FC 200D 2640 FE0F",
+ "char": "🚣🏼‍♀️",
+ "name": "woman rowing boat: medium-light skin tone"
+ },
+ {
+ "no": 1025,
+ "code": "1F6A3 1F3FD 200D 2640 FE0F",
+ "char": "🚣🏽‍♀️",
+ "name": "woman rowing boat: medium skin tone"
+ },
+ {
+ "no": 1026,
+ "code": "1F6A3 1F3FE 200D 2640 FE0F",
+ "char": "🚣🏾‍♀️",
+ "name": "woman rowing boat: medium-dark skin tone"
+ },
+ {
+ "no": 1027,
+ "code": "1F6A3 1F3FF 200D 2640 FE0F",
+ "char": "🚣🏿‍♀️",
+ "name": "woman rowing boat: dark skin tone"
+ },
+ {
+ "no": 1028,
+ "code": "1F3CA",
+ "char": "🏊",
+ "name": "person swimming"
+ },
+ {
+ "no": 1029,
+ "code": "1F3CA 1F3FB",
+ "char": "🏊🏻",
+ "name": "person swimming: light skin tone"
+ },
+ {
+ "no": 1030,
+ "code": "1F3CA 1F3FC",
+ "char": "🏊🏼",
+ "name": "person swimming: medium-light skin tone"
+ },
+ {
+ "no": 1031,
+ "code": "1F3CA 1F3FD",
+ "char": "🏊🏽",
+ "name": "person swimming: medium skin tone"
+ },
+ {
+ "no": 1032,
+ "code": "1F3CA 1F3FE",
+ "char": "🏊🏾",
+ "name": "person swimming: medium-dark skin tone"
+ },
+ {
+ "no": 1033,
+ "code": "1F3CA 1F3FF",
+ "char": "🏊🏿",
+ "name": "person swimming: dark skin tone"
+ },
+ {
+ "no": 1034,
+ "code": "1F3CA 200D 2642 FE0F",
+ "char": "🏊‍♂️",
+ "name": "man swimming"
+ },
+ {
+ "no": 1035,
+ "code": "1F3CA 1F3FB 200D 2642 FE0F",
+ "char": "🏊🏻‍♂️",
+ "name": "man swimming: light skin tone"
+ },
+ {
+ "no": 1036,
+ "code": "1F3CA 1F3FC 200D 2642 FE0F",
+ "char": "🏊🏼‍♂️",
+ "name": "man swimming: medium-light skin tone"
+ },
+ {
+ "no": 1037,
+ "code": "1F3CA 1F3FD 200D 2642 FE0F",
+ "char": "🏊🏽‍♂️",
+ "name": "man swimming: medium skin tone"
+ },
+ {
+ "no": 1038,
+ "code": "1F3CA 1F3FE 200D 2642 FE0F",
+ "char": "🏊🏾‍♂️",
+ "name": "man swimming: medium-dark skin tone"
+ },
+ {
+ "no": 1039,
+ "code": "1F3CA 1F3FF 200D 2642 FE0F",
+ "char": "🏊🏿‍♂️",
+ "name": "man swimming: dark skin tone"
+ },
+ {
+ "no": 1040,
+ "code": "1F3CA 200D 2640 FE0F",
+ "char": "🏊‍♀️",
+ "name": "woman swimming"
+ },
+ {
+ "no": 1041,
+ "code": "1F3CA 1F3FB 200D 2640 FE0F",
+ "char": "🏊🏻‍♀️",
+ "name": "woman swimming: light skin tone"
+ },
+ {
+ "no": 1042,
+ "code": "1F3CA 1F3FC 200D 2640 FE0F",
+ "char": "🏊🏼‍♀️",
+ "name": "woman swimming: medium-light skin tone"
+ },
+ {
+ "no": 1043,
+ "code": "1F3CA 1F3FD 200D 2640 FE0F",
+ "char": "🏊🏽‍♀️",
+ "name": "woman swimming: medium skin tone"
+ },
+ {
+ "no": 1044,
+ "code": "1F3CA 1F3FE 200D 2640 FE0F",
+ "char": "🏊🏾‍♀️",
+ "name": "woman swimming: medium-dark skin tone"
+ },
+ {
+ "no": 1045,
+ "code": "1F3CA 1F3FF 200D 2640 FE0F",
+ "char": "🏊🏿‍♀️",
+ "name": "woman swimming: dark skin tone"
+ },
+ {
+ "no": 1046,
+ "code": "26F9",
+ "char": "⛹",
+ "name": "person bouncing ball"
+ },
+ {
+ "no": 1047,
+ "code": "26F9 1F3FB",
+ "char": "⛹🏻",
+ "name": "person bouncing ball: light skin tone"
+ },
+ {
+ "no": 1048,
+ "code": "26F9 1F3FC",
+ "char": "⛹🏼",
+ "name": "person bouncing ball: medium-light skin tone"
+ },
+ {
+ "no": 1049,
+ "code": "26F9 1F3FD",
+ "char": "⛹🏽",
+ "name": "person bouncing ball: medium skin tone"
+ },
+ {
+ "no": 1050,
+ "code": "26F9 1F3FE",
+ "char": "⛹🏾",
+ "name": "person bouncing ball: medium-dark skin tone"
+ },
+ {
+ "no": 1051,
+ "code": "26F9 1F3FF",
+ "char": "⛹🏿",
+ "name": "person bouncing ball: dark skin tone"
+ },
+ {
+ "no": 1052,
+ "code": "26F9 FE0F 200D 2642 FE0F",
+ "char": "⛹️‍♂️",
+ "name": "man bouncing ball"
+ },
+ {
+ "no": 1053,
+ "code": "26F9 1F3FB 200D 2642 FE0F",
+ "char": "⛹🏻‍♂️",
+ "name": "man bouncing ball: light skin tone"
+ },
+ {
+ "no": 1054,
+ "code": "26F9 1F3FC 200D 2642 FE0F",
+ "char": "⛹🏼‍♂️",
+ "name": "man bouncing ball: medium-light skin tone"
+ },
+ {
+ "no": 1055,
+ "code": "26F9 1F3FD 200D 2642 FE0F",
+ "char": "⛹🏽‍♂️",
+ "name": "man bouncing ball: medium skin tone"
+ },
+ {
+ "no": 1056,
+ "code": "26F9 1F3FE 200D 2642 FE0F",
+ "char": "⛹🏾‍♂️",
+ "name": "man bouncing ball: medium-dark skin tone"
+ },
+ {
+ "no": 1057,
+ "code": "26F9 1F3FF 200D 2642 FE0F",
+ "char": "⛹🏿‍♂️",
+ "name": "man bouncing ball: dark skin tone"
+ },
+ {
+ "no": 1058,
+ "code": "26F9 FE0F 200D 2640 FE0F",
+ "char": "⛹️‍♀️",
+ "name": "woman bouncing ball"
+ },
+ {
+ "no": 1059,
+ "code": "26F9 1F3FB 200D 2640 FE0F",
+ "char": "⛹🏻‍♀️",
+ "name": "woman bouncing ball: light skin tone"
+ },
+ {
+ "no": 1060,
+ "code": "26F9 1F3FC 200D 2640 FE0F",
+ "char": "⛹🏼‍♀️",
+ "name": "woman bouncing ball: medium-light skin tone"
+ },
+ {
+ "no": 1061,
+ "code": "26F9 1F3FD 200D 2640 FE0F",
+ "char": "⛹🏽‍♀️",
+ "name": "woman bouncing ball: medium skin tone"
+ },
+ {
+ "no": 1062,
+ "code": "26F9 1F3FE 200D 2640 FE0F",
+ "char": "⛹🏾‍♀️",
+ "name": "woman bouncing ball: medium-dark skin tone"
+ },
+ {
+ "no": 1063,
+ "code": "26F9 1F3FF 200D 2640 FE0F",
+ "char": "⛹🏿‍♀️",
+ "name": "woman bouncing ball: dark skin tone"
+ },
+ {
+ "no": 1064,
+ "code": "1F3CB",
+ "char": "🏋",
+ "name": "person lifting weights"
+ },
+ {
+ "no": 1065,
+ "code": "1F3CB 1F3FB",
+ "char": "🏋🏻",
+ "name": "person lifting weights: light skin tone"
+ },
+ {
+ "no": 1066,
+ "code": "1F3CB 1F3FC",
+ "char": "🏋🏼",
+ "name": "person lifting weights: medium-light skin tone"
+ },
+ {
+ "no": 1067,
+ "code": "1F3CB 1F3FD",
+ "char": "🏋🏽",
+ "name": "person lifting weights: medium skin tone"
+ },
+ {
+ "no": 1068,
+ "code": "1F3CB 1F3FE",
+ "char": "🏋🏾",
+ "name": "person lifting weights: medium-dark skin tone"
+ },
+ {
+ "no": 1069,
+ "code": "1F3CB 1F3FF",
+ "char": "🏋🏿",
+ "name": "person lifting weights: dark skin tone"
+ },
+ {
+ "no": 1070,
+ "code": "1F3CB FE0F 200D 2642 FE0F",
+ "char": "🏋️‍♂️",
+ "name": "man lifting weights"
+ },
+ {
+ "no": 1071,
+ "code": "1F3CB 1F3FB 200D 2642 FE0F",
+ "char": "🏋🏻‍♂️",
+ "name": "man lifting weights: light skin tone"
+ },
+ {
+ "no": 1072,
+ "code": "1F3CB 1F3FC 200D 2642 FE0F",
+ "char": "🏋🏼‍♂️",
+ "name": "man lifting weights: medium-light skin tone"
+ },
+ {
+ "no": 1073,
+ "code": "1F3CB 1F3FD 200D 2642 FE0F",
+ "char": "🏋🏽‍♂️",
+ "name": "man lifting weights: medium skin tone"
+ },
+ {
+ "no": 1074,
+ "code": "1F3CB 1F3FE 200D 2642 FE0F",
+ "char": "🏋🏾‍♂️",
+ "name": "man lifting weights: medium-dark skin tone"
+ },
+ {
+ "no": 1075,
+ "code": "1F3CB 1F3FF 200D 2642 FE0F",
+ "char": "🏋🏿‍♂️",
+ "name": "man lifting weights: dark skin tone"
+ },
+ {
+ "no": 1076,
+ "code": "1F3CB FE0F 200D 2640 FE0F",
+ "char": "🏋️‍♀️",
+ "name": "woman lifting weights"
+ },
+ {
+ "no": 1077,
+ "code": "1F3CB 1F3FB 200D 2640 FE0F",
+ "char": "🏋🏻‍♀️",
+ "name": "woman lifting weights: light skin tone"
+ },
+ {
+ "no": 1078,
+ "code": "1F3CB 1F3FC 200D 2640 FE0F",
+ "char": "🏋🏼‍♀️",
+ "name": "woman lifting weights: medium-light skin tone"
+ },
+ {
+ "no": 1079,
+ "code": "1F3CB 1F3FD 200D 2640 FE0F",
+ "char": "🏋🏽‍♀️",
+ "name": "woman lifting weights: medium skin tone"
+ },
+ {
+ "no": 1080,
+ "code": "1F3CB 1F3FE 200D 2640 FE0F",
+ "char": "🏋🏾‍♀️",
+ "name": "woman lifting weights: medium-dark skin tone"
+ },
+ {
+ "no": 1081,
+ "code": "1F3CB 1F3FF 200D 2640 FE0F",
+ "char": "🏋🏿‍♀️",
+ "name": "woman lifting weights: dark skin tone"
+ },
+ {
+ "no": 1082,
+ "code": "1F6B4",
+ "char": "🚴",
+ "name": "person biking"
+ },
+ {
+ "no": 1083,
+ "code": "1F6B4 1F3FB",
+ "char": "🚴🏻",
+ "name": "person biking: light skin tone"
+ },
+ {
+ "no": 1084,
+ "code": "1F6B4 1F3FC",
+ "char": "🚴🏼",
+ "name": "person biking: medium-light skin tone"
+ },
+ {
+ "no": 1085,
+ "code": "1F6B4 1F3FD",
+ "char": "🚴🏽",
+ "name": "person biking: medium skin tone"
+ },
+ {
+ "no": 1086,
+ "code": "1F6B4 1F3FE",
+ "char": "🚴🏾",
+ "name": "person biking: medium-dark skin tone"
+ },
+ {
+ "no": 1087,
+ "code": "1F6B4 1F3FF",
+ "char": "🚴🏿",
+ "name": "person biking: dark skin tone"
+ },
+ {
+ "no": 1088,
+ "code": "1F6B4 200D 2642 FE0F",
+ "char": "🚴‍♂️",
+ "name": "man biking"
+ },
+ {
+ "no": 1089,
+ "code": "1F6B4 1F3FB 200D 2642 FE0F",
+ "char": "🚴🏻‍♂️",
+ "name": "man biking: light skin tone"
+ },
+ {
+ "no": 1090,
+ "code": "1F6B4 1F3FC 200D 2642 FE0F",
+ "char": "🚴🏼‍♂️",
+ "name": "man biking: medium-light skin tone"
+ },
+ {
+ "no": 1091,
+ "code": "1F6B4 1F3FD 200D 2642 FE0F",
+ "char": "🚴🏽‍♂️",
+ "name": "man biking: medium skin tone"
+ },
+ {
+ "no": 1092,
+ "code": "1F6B4 1F3FE 200D 2642 FE0F",
+ "char": "🚴🏾‍♂️",
+ "name": "man biking: medium-dark skin tone"
+ },
+ {
+ "no": 1093,
+ "code": "1F6B4 1F3FF 200D 2642 FE0F",
+ "char": "🚴🏿‍♂️",
+ "name": "man biking: dark skin tone"
+ },
+ {
+ "no": 1094,
+ "code": "1F6B4 200D 2640 FE0F",
+ "char": "🚴‍♀️",
+ "name": "woman biking"
+ },
+ {
+ "no": 1095,
+ "code": "1F6B4 1F3FB 200D 2640 FE0F",
+ "char": "🚴🏻‍♀️",
+ "name": "woman biking: light skin tone"
+ },
+ {
+ "no": 1096,
+ "code": "1F6B4 1F3FC 200D 2640 FE0F",
+ "char": "🚴🏼‍♀️",
+ "name": "woman biking: medium-light skin tone"
+ },
+ {
+ "no": 1097,
+ "code": "1F6B4 1F3FD 200D 2640 FE0F",
+ "char": "🚴🏽‍♀️",
+ "name": "woman biking: medium skin tone"
+ },
+ {
+ "no": 1098,
+ "code": "1F6B4 1F3FE 200D 2640 FE0F",
+ "char": "🚴🏾‍♀️",
+ "name": "woman biking: medium-dark skin tone"
+ },
+ {
+ "no": 1099,
+ "code": "1F6B4 1F3FF 200D 2640 FE0F",
+ "char": "🚴🏿‍♀️",
+ "name": "woman biking: dark skin tone"
+ },
+ {
+ "no": 1100,
+ "code": "1F6B5",
+ "char": "🚵",
+ "name": "person mountain biking"
+ },
+ {
+ "no": 1101,
+ "code": "1F6B5 1F3FB",
+ "char": "🚵🏻",
+ "name": "person mountain biking: light skin tone"
+ },
+ {
+ "no": 1102,
+ "code": "1F6B5 1F3FC",
+ "char": "🚵🏼",
+ "name": "person mountain biking: medium-light skin tone"
+ },
+ {
+ "no": 1103,
+ "code": "1F6B5 1F3FD",
+ "char": "🚵🏽",
+ "name": "person mountain biking: medium skin tone"
+ },
+ {
+ "no": 1104,
+ "code": "1F6B5 1F3FE",
+ "char": "🚵🏾",
+ "name": "person mountain biking: medium-dark skin tone"
+ },
+ {
+ "no": 1105,
+ "code": "1F6B5 1F3FF",
+ "char": "🚵🏿",
+ "name": "person mountain biking: dark skin tone"
+ },
+ {
+ "no": 1106,
+ "code": "1F6B5 200D 2642 FE0F",
+ "char": "🚵‍♂️",
+ "name": "man mountain biking"
+ },
+ {
+ "no": 1107,
+ "code": "1F6B5 1F3FB 200D 2642 FE0F",
+ "char": "🚵🏻‍♂️",
+ "name": "man mountain biking: light skin tone"
+ },
+ {
+ "no": 1108,
+ "code": "1F6B5 1F3FC 200D 2642 FE0F",
+ "char": "🚵🏼‍♂️",
+ "name": "man mountain biking: medium-light skin tone"
+ },
+ {
+ "no": 1109,
+ "code": "1F6B5 1F3FD 200D 2642 FE0F",
+ "char": "🚵🏽‍♂️",
+ "name": "man mountain biking: medium skin tone"
+ },
+ {
+ "no": 1110,
+ "code": "1F6B5 1F3FE 200D 2642 FE0F",
+ "char": "🚵🏾‍♂️",
+ "name": "man mountain biking: medium-dark skin tone"
+ },
+ {
+ "no": 1111,
+ "code": "1F6B5 1F3FF 200D 2642 FE0F",
+ "char": "🚵🏿‍♂️",
+ "name": "man mountain biking: dark skin tone"
+ },
+ {
+ "no": 1112,
+ "code": "1F6B5 200D 2640 FE0F",
+ "char": "🚵‍♀️",
+ "name": "woman mountain biking"
+ },
+ {
+ "no": 1113,
+ "code": "1F6B5 1F3FB 200D 2640 FE0F",
+ "char": "🚵🏻‍♀️",
+ "name": "woman mountain biking: light skin tone"
+ },
+ {
+ "no": 1114,
+ "code": "1F6B5 1F3FC 200D 2640 FE0F",
+ "char": "🚵🏼‍♀️",
+ "name": "woman mountain biking: medium-light skin tone"
+ },
+ {
+ "no": 1115,
+ "code": "1F6B5 1F3FD 200D 2640 FE0F",
+ "char": "🚵🏽‍♀️",
+ "name": "woman mountain biking: medium skin tone"
+ },
+ {
+ "no": 1116,
+ "code": "1F6B5 1F3FE 200D 2640 FE0F",
+ "char": "🚵🏾‍♀️",
+ "name": "woman mountain biking: medium-dark skin tone"
+ },
+ {
+ "no": 1117,
+ "code": "1F6B5 1F3FF 200D 2640 FE0F",
+ "char": "🚵🏿‍♀️",
+ "name": "woman mountain biking: dark skin tone"
+ },
+ {
+ "no": 1118,
+ "code": "1F3CE",
+ "char": "🏎",
+ "name": "racing car"
+ },
+ {
+ "no": 1119,
+ "code": "1F3CD",
+ "char": "🏍",
+ "name": "motorcycle"
+ },
+ {
+ "no": 1120,
+ "code": "1F938",
+ "char": "🤸",
+ "name": "person cartwheeling"
+ },
+ {
+ "no": 1121,
+ "code": "1F938 1F3FB",
+ "char": "🤸🏻",
+ "name": "person cartwheeling: light skin tone"
+ },
+ {
+ "no": 1122,
+ "code": "1F938 1F3FC",
+ "char": "🤸🏼",
+ "name": "person cartwheeling: medium-light skin tone"
+ },
+ {
+ "no": 1123,
+ "code": "1F938 1F3FD",
+ "char": "🤸🏽",
+ "name": "person cartwheeling: medium skin tone"
+ },
+ {
+ "no": 1124,
+ "code": "1F938 1F3FE",
+ "char": "🤸🏾",
+ "name": "person cartwheeling: medium-dark skin tone"
+ },
+ {
+ "no": 1125,
+ "code": "1F938 1F3FF",
+ "char": "🤸🏿",
+ "name": "person cartwheeling: dark skin tone"
+ },
+ {
+ "no": 1126,
+ "code": "1F938 200D 2642 FE0F",
+ "char": "🤸‍♂️",
+ "name": "man cartwheeling"
+ },
+ {
+ "no": 1127,
+ "code": "1F938 1F3FB 200D 2642 FE0F",
+ "char": "🤸🏻‍♂️",
+ "name": "man cartwheeling: light skin tone"
+ },
+ {
+ "no": 1128,
+ "code": "1F938 1F3FC 200D 2642 FE0F",
+ "char": "🤸🏼‍♂️",
+ "name": "man cartwheeling: medium-light skin tone"
+ },
+ {
+ "no": 1129,
+ "code": "1F938 1F3FD 200D 2642 FE0F",
+ "char": "🤸🏽‍♂️",
+ "name": "man cartwheeling: medium skin tone"
+ },
+ {
+ "no": 1130,
+ "code": "1F938 1F3FE 200D 2642 FE0F",
+ "char": "🤸🏾‍♂️",
+ "name": "man cartwheeling: medium-dark skin tone"
+ },
+ {
+ "no": 1131,
+ "code": "1F938 1F3FF 200D 2642 FE0F",
+ "char": "🤸🏿‍♂️",
+ "name": "man cartwheeling: dark skin tone"
+ },
+ {
+ "no": 1132,
+ "code": "1F938 200D 2640 FE0F",
+ "char": "🤸‍♀️",
+ "name": "woman cartwheeling"
+ },
+ {
+ "no": 1133,
+ "code": "1F938 1F3FB 200D 2640 FE0F",
+ "char": "🤸🏻‍♀️",
+ "name": "woman cartwheeling: light skin tone"
+ },
+ {
+ "no": 1134,
+ "code": "1F938 1F3FC 200D 2640 FE0F",
+ "char": "🤸🏼‍♀️",
+ "name": "woman cartwheeling: medium-light skin tone"
+ },
+ {
+ "no": 1135,
+ "code": "1F938 1F3FD 200D 2640 FE0F",
+ "char": "🤸🏽‍♀️",
+ "name": "woman cartwheeling: medium skin tone"
+ },
+ {
+ "no": 1136,
+ "code": "1F938 1F3FE 200D 2640 FE0F",
+ "char": "🤸🏾‍♀️",
+ "name": "woman cartwheeling: medium-dark skin tone"
+ },
+ {
+ "no": 1137,
+ "code": "1F938 1F3FF 200D 2640 FE0F",
+ "char": "🤸🏿‍♀️",
+ "name": "woman cartwheeling: dark skin tone"
+ },
+ {
+ "no": 1138,
+ "code": "1F93C",
+ "char": "🤼",
+ "name": "people wrestling"
+ },
+ {
+ "no": 1139,
+ "code": "1F93C 200D 2642 FE0F",
+ "char": "🤼‍♂️",
+ "name": "men wrestling"
+ },
+ {
+ "no": 1140,
+ "code": "1F93C 200D 2640 FE0F",
+ "char": "🤼‍♀️",
+ "name": "women wrestling"
+ },
+ {
+ "no": 1141,
+ "code": "1F93D",
+ "char": "🤽",
+ "name": "person playing water polo"
+ },
+ {
+ "no": 1142,
+ "code": "1F93D 1F3FB",
+ "char": "🤽🏻",
+ "name": "person playing water polo: light skin tone"
+ },
+ {
+ "no": 1143,
+ "code": "1F93D 1F3FC",
+ "char": "🤽🏼",
+ "name": "person playing water polo: medium-light skin tone"
+ },
+ {
+ "no": 1144,
+ "code": "1F93D 1F3FD",
+ "char": "🤽🏽",
+ "name": "person playing water polo: medium skin tone"
+ },
+ {
+ "no": 1145,
+ "code": "1F93D 1F3FE",
+ "char": "🤽🏾",
+ "name": "person playing water polo: medium-dark skin tone"
+ },
+ {
+ "no": 1146,
+ "code": "1F93D 1F3FF",
+ "char": "🤽🏿",
+ "name": "person playing water polo: dark skin tone"
+ },
+ {
+ "no": 1147,
+ "code": "1F93D 200D 2642 FE0F",
+ "char": "🤽‍♂️",
+ "name": "man playing water polo"
+ },
+ {
+ "no": 1148,
+ "code": "1F93D 1F3FB 200D 2642 FE0F",
+ "char": "🤽🏻‍♂️",
+ "name": "man playing water polo: light skin tone"
+ },
+ {
+ "no": 1149,
+ "code": "1F93D 1F3FC 200D 2642 FE0F",
+ "char": "🤽🏼‍♂️",
+ "name": "man playing water polo: medium-light skin tone"
+ },
+ {
+ "no": 1150,
+ "code": "1F93D 1F3FD 200D 2642 FE0F",
+ "char": "🤽🏽‍♂️",
+ "name": "man playing water polo: medium skin tone"
+ },
+ {
+ "no": 1151,
+ "code": "1F93D 1F3FE 200D 2642 FE0F",
+ "char": "🤽🏾‍♂️",
+ "name": "man playing water polo: medium-dark skin tone"
+ },
+ {
+ "no": 1152,
+ "code": "1F93D 1F3FF 200D 2642 FE0F",
+ "char": "🤽🏿‍♂️",
+ "name": "man playing water polo: dark skin tone"
+ },
+ {
+ "no": 1153,
+ "code": "1F93D 200D 2640 FE0F",
+ "char": "🤽‍♀️",
+ "name": "woman playing water polo"
+ },
+ {
+ "no": 1154,
+ "code": "1F93D 1F3FB 200D 2640 FE0F",
+ "char": "🤽🏻‍♀️",
+ "name": "woman playing water polo: light skin tone"
+ },
+ {
+ "no": 1155,
+ "code": "1F93D 1F3FC 200D 2640 FE0F",
+ "char": "🤽🏼‍♀️",
+ "name": "woman playing water polo: medium-light skin tone"
+ },
+ {
+ "no": 1156,
+ "code": "1F93D 1F3FD 200D 2640 FE0F",
+ "char": "🤽🏽‍♀️",
+ "name": "woman playing water polo: medium skin tone"
+ },
+ {
+ "no": 1157,
+ "code": "1F93D 1F3FE 200D 2640 FE0F",
+ "char": "🤽🏾‍♀️",
+ "name": "woman playing water polo: medium-dark skin tone"
+ },
+ {
+ "no": 1158,
+ "code": "1F93D 1F3FF 200D 2640 FE0F",
+ "char": "🤽🏿‍♀️",
+ "name": "woman playing water polo: dark skin tone"
+ },
+ {
+ "no": 1159,
+ "code": "1F93E",
+ "char": "🤾",
+ "name": "person playing handball"
+ },
+ {
+ "no": 1160,
+ "code": "1F93E 1F3FB",
+ "char": "🤾🏻",
+ "name": "person playing handball: light skin tone"
+ },
+ {
+ "no": 1161,
+ "code": "1F93E 1F3FC",
+ "char": "🤾🏼",
+ "name": "person playing handball: medium-light skin tone"
+ },
+ {
+ "no": 1162,
+ "code": "1F93E 1F3FD",
+ "char": "🤾🏽",
+ "name": "person playing handball: medium skin tone"
+ },
+ {
+ "no": 1163,
+ "code": "1F93E 1F3FE",
+ "char": "🤾🏾",
+ "name": "person playing handball: medium-dark skin tone"
+ },
+ {
+ "no": 1164,
+ "code": "1F93E 1F3FF",
+ "char": "🤾🏿",
+ "name": "person playing handball: dark skin tone"
+ },
+ {
+ "no": 1165,
+ "code": "1F93E 200D 2642 FE0F",
+ "char": "🤾‍♂️",
+ "name": "man playing handball"
+ },
+ {
+ "no": 1166,
+ "code": "1F93E 1F3FB 200D 2642 FE0F",
+ "char": "🤾🏻‍♂️",
+ "name": "man playing handball: light skin tone"
+ },
+ {
+ "no": 1167,
+ "code": "1F93E 1F3FC 200D 2642 FE0F",
+ "char": "🤾🏼‍♂️",
+ "name": "man playing handball: medium-light skin tone"
+ },
+ {
+ "no": 1168,
+ "code": "1F93E 1F3FD 200D 2642 FE0F",
+ "char": "🤾🏽‍♂️",
+ "name": "man playing handball: medium skin tone"
+ },
+ {
+ "no": 1169,
+ "code": "1F93E 1F3FE 200D 2642 FE0F",
+ "char": "🤾🏾‍♂️",
+ "name": "man playing handball: medium-dark skin tone"
+ },
+ {
+ "no": 1170,
+ "code": "1F93E 1F3FF 200D 2642 FE0F",
+ "char": "🤾🏿‍♂️",
+ "name": "man playing handball: dark skin tone"
+ },
+ {
+ "no": 1171,
+ "code": "1F93E 200D 2640 FE0F",
+ "char": "🤾‍♀️",
+ "name": "woman playing handball"
+ },
+ {
+ "no": 1172,
+ "code": "1F93E 1F3FB 200D 2640 FE0F",
+ "char": "🤾🏻‍♀️",
+ "name": "woman playing handball: light skin tone"
+ },
+ {
+ "no": 1173,
+ "code": "1F93E 1F3FC 200D 2640 FE0F",
+ "char": "🤾🏼‍♀️",
+ "name": "woman playing handball: medium-light skin tone"
+ },
+ {
+ "no": 1174,
+ "code": "1F93E 1F3FD 200D 2640 FE0F",
+ "char": "🤾🏽‍♀️",
+ "name": "woman playing handball: medium skin tone"
+ },
+ {
+ "no": 1175,
+ "code": "1F93E 1F3FE 200D 2640 FE0F",
+ "char": "🤾🏾‍♀️",
+ "name": "woman playing handball: medium-dark skin tone"
+ },
+ {
+ "no": 1176,
+ "code": "1F93E 1F3FF 200D 2640 FE0F",
+ "char": "🤾🏿‍♀️",
+ "name": "woman playing handball: dark skin tone"
+ },
+ {
+ "no": 1177,
+ "code": "1F939",
+ "char": "🤹",
+ "name": "person juggling"
+ },
+ {
+ "no": 1178,
+ "code": "1F939 1F3FB",
+ "char": "🤹🏻",
+ "name": "person juggling: light skin tone"
+ },
+ {
+ "no": 1179,
+ "code": "1F939 1F3FC",
+ "char": "🤹🏼",
+ "name": "person juggling: medium-light skin tone"
+ },
+ {
+ "no": 1180,
+ "code": "1F939 1F3FD",
+ "char": "🤹🏽",
+ "name": "person juggling: medium skin tone"
+ },
+ {
+ "no": 1181,
+ "code": "1F939 1F3FE",
+ "char": "🤹🏾",
+ "name": "person juggling: medium-dark skin tone"
+ },
+ {
+ "no": 1182,
+ "code": "1F939 1F3FF",
+ "char": "🤹🏿",
+ "name": "person juggling: dark skin tone"
+ },
+ {
+ "no": 1183,
+ "code": "1F939 200D 2642 FE0F",
+ "char": "🤹‍♂️",
+ "name": "man juggling"
+ },
+ {
+ "no": 1184,
+ "code": "1F939 1F3FB 200D 2642 FE0F",
+ "char": "🤹🏻‍♂️",
+ "name": "man juggling: light skin tone"
+ },
+ {
+ "no": 1185,
+ "code": "1F939 1F3FC 200D 2642 FE0F",
+ "char": "🤹🏼‍♂️",
+ "name": "man juggling: medium-light skin tone"
+ },
+ {
+ "no": 1186,
+ "code": "1F939 1F3FD 200D 2642 FE0F",
+ "char": "🤹🏽‍♂️",
+ "name": "man juggling: medium skin tone"
+ },
+ {
+ "no": 1187,
+ "code": "1F939 1F3FE 200D 2642 FE0F",
+ "char": "🤹🏾‍♂️",
+ "name": "man juggling: medium-dark skin tone"
+ },
+ {
+ "no": 1188,
+ "code": "1F939 1F3FF 200D 2642 FE0F",
+ "char": "🤹🏿‍♂️",
+ "name": "man juggling: dark skin tone"
+ },
+ {
+ "no": 1189,
+ "code": "1F939 200D 2640 FE0F",
+ "char": "🤹‍♀️",
+ "name": "woman juggling"
+ },
+ {
+ "no": 1190,
+ "code": "1F939 1F3FB 200D 2640 FE0F",
+ "char": "🤹🏻‍♀️",
+ "name": "woman juggling: light skin tone"
+ },
+ {
+ "no": 1191,
+ "code": "1F939 1F3FC 200D 2640 FE0F",
+ "char": "🤹🏼‍♀️",
+ "name": "woman juggling: medium-light skin tone"
+ },
+ {
+ "no": 1192,
+ "code": "1F939 1F3FD 200D 2640 FE0F",
+ "char": "🤹🏽‍♀️",
+ "name": "woman juggling: medium skin tone"
+ },
+ {
+ "no": 1193,
+ "code": "1F939 1F3FE 200D 2640 FE0F",
+ "char": "🤹🏾‍♀️",
+ "name": "woman juggling: medium-dark skin tone"
+ },
+ {
+ "no": 1194,
+ "code": "1F939 1F3FF 200D 2640 FE0F",
+ "char": "🤹🏿‍♀️",
+ "name": "woman juggling: dark skin tone"
+ },
+ {
+ "no": 1195,
+ "code": "1F46B",
+ "char": "👫",
+ "name": "man and woman holding hands"
+ },
+ {
+ "no": 1196,
+ "code": "1F46C",
+ "char": "👬",
+ "name": "two men holding hands"
+ },
+ {
+ "no": 1197,
+ "code": "1F46D",
+ "char": "👭",
+ "name": "two women holding hands"
+ },
+ {
+ "no": 1198,
+ "code": "1F48F",
+ "char": "💏",
+ "name": "kiss"
+ },
+ {
+ "no": 1199,
+ "code": "1F469 200D 2764 FE0F 200D 1F48B 200D 1F468",
+ "char": "👩‍❤️‍💋‍👨",
+ "name": "kiss: woman, man"
+ },
+ {
+ "no": 1200,
+ "code": "1F468 200D 2764 FE0F 200D 1F48B 200D 1F468",
+ "char": "👨‍❤️‍💋‍👨",
+ "name": "kiss: man, man"
+ },
+ {
+ "no": 1201,
+ "code": "1F469 200D 2764 FE0F 200D 1F48B 200D 1F469",
+ "char": "👩‍❤️‍💋‍👩",
+ "name": "kiss: woman, woman"
+ },
+ {
+ "no": 1202,
+ "code": "1F491",
+ "char": "💑",
+ "name": "couple with heart"
+ },
+ {
+ "no": 1203,
+ "code": "1F469 200D 2764 FE0F 200D 1F468",
+ "char": "👩‍❤️‍👨",
+ "name": "couple with heart: woman, man"
+ },
+ {
+ "no": 1204,
+ "code": "1F468 200D 2764 FE0F 200D 1F468",
+ "char": "👨‍❤️‍👨",
+ "name": "couple with heart: man, man"
+ },
+ {
+ "no": 1205,
+ "code": "1F469 200D 2764 FE0F 200D 1F469",
+ "char": "👩‍❤️‍👩",
+ "name": "couple with heart: woman, woman"
+ },
+ {
+ "no": 1206,
+ "code": "1F46A",
+ "char": "👪",
+ "name": "family"
+ },
+ {
+ "no": 1207,
+ "code": "1F468 200D 1F469 200D 1F466",
+ "char": "👨‍👩‍👦",
+ "name": "family: man, woman, boy"
+ },
+ {
+ "no": 1208,
+ "code": "1F468 200D 1F469 200D 1F467",
+ "char": "👨‍👩‍👧",
+ "name": "family: man, woman, girl"
+ },
+ {
+ "no": 1209,
+ "code": "1F468 200D 1F469 200D 1F467 200D 1F466",
+ "char": "👨‍👩‍👧‍👦",
+ "name": "family: man, woman, girl, boy"
+ },
+ {
+ "no": 1210,
+ "code": "1F468 200D 1F469 200D 1F466 200D 1F466",
+ "char": "👨‍👩‍👦‍👦",
+ "name": "family: man, woman, boy, boy"
+ },
+ {
+ "no": 1211,
+ "code": "1F468 200D 1F469 200D 1F467 200D 1F467",
+ "char": "👨‍👩‍👧‍👧",
+ "name": "family: man, woman, girl, girl"
+ },
+ {
+ "no": 1212,
+ "code": "1F468 200D 1F468 200D 1F466",
+ "char": "👨‍👨‍👦",
+ "name": "family: man, man, boy"
+ },
+ {
+ "no": 1213,
+ "code": "1F468 200D 1F468 200D 1F467",
+ "char": "👨‍👨‍👧",
+ "name": "family: man, man, girl"
+ },
+ {
+ "no": 1214,
+ "code": "1F468 200D 1F468 200D 1F467 200D 1F466",
+ "char": "👨‍👨‍👧‍👦",
+ "name": "family: man, man, girl, boy"
+ },
+ {
+ "no": 1215,
+ "code": "1F468 200D 1F468 200D 1F466 200D 1F466",
+ "char": "👨‍👨‍👦‍👦",
+ "name": "family: man, man, boy, boy"
+ },
+ {
+ "no": 1216,
+ "code": "1F468 200D 1F468 200D 1F467 200D 1F467",
+ "char": "👨‍👨‍👧‍👧",
+ "name": "family: man, man, girl, girl"
+ },
+ {
+ "no": 1217,
+ "code": "1F469 200D 1F469 200D 1F466",
+ "char": "👩‍👩‍👦",
+ "name": "family: woman, woman, boy"
+ },
+ {
+ "no": 1218,
+ "code": "1F469 200D 1F469 200D 1F467",
+ "char": "👩‍👩‍👧",
+ "name": "family: woman, woman, girl"
+ },
+ {
+ "no": 1219,
+ "code": "1F469 200D 1F469 200D 1F467 200D 1F466",
+ "char": "👩‍👩‍👧‍👦",
+ "name": "family: woman, woman, girl, boy"
+ },
+ {
+ "no": 1220,
+ "code": "1F469 200D 1F469 200D 1F466 200D 1F466",
+ "char": "👩‍👩‍👦‍👦",
+ "name": "family: woman, woman, boy, boy"
+ },
+ {
+ "no": 1221,
+ "code": "1F469 200D 1F469 200D 1F467 200D 1F467",
+ "char": "👩‍👩‍👧‍👧",
+ "name": "family: woman, woman, girl, girl"
+ },
+ {
+ "no": 1222,
+ "code": "1F468 200D 1F466",
+ "char": "👨‍👦",
+ "name": "family: man, boy"
+ },
+ {
+ "no": 1223,
+ "code": "1F468 200D 1F466 200D 1F466",
+ "char": "👨‍👦‍👦",
+ "name": "family: man, boy, boy"
+ },
+ {
+ "no": 1224,
+ "code": "1F468 200D 1F467",
+ "char": "👨‍👧",
+ "name": "family: man, girl"
+ },
+ {
+ "no": 1225,
+ "code": "1F468 200D 1F467 200D 1F466",
+ "char": "👨‍👧‍👦",
+ "name": "family: man, girl, boy"
+ },
+ {
+ "no": 1226,
+ "code": "1F468 200D 1F467 200D 1F467",
+ "char": "👨‍👧‍👧",
+ "name": "family: man, girl, girl"
+ },
+ {
+ "no": 1227,
+ "code": "1F469 200D 1F466",
+ "char": "👩‍👦",
+ "name": "family: woman, boy"
+ },
+ {
+ "no": 1228,
+ "code": "1F469 200D 1F466 200D 1F466",
+ "char": "👩‍👦‍👦",
+ "name": "family: woman, boy, boy"
+ },
+ {
+ "no": 1229,
+ "code": "1F469 200D 1F467",
+ "char": "👩‍👧",
+ "name": "family: woman, girl"
+ },
+ {
+ "no": 1230,
+ "code": "1F469 200D 1F467 200D 1F466",
+ "char": "👩‍👧‍👦",
+ "name": "family: woman, girl, boy"
+ },
+ {
+ "no": 1231,
+ "code": "1F469 200D 1F467 200D 1F467",
+ "char": "👩‍👧‍👧",
+ "name": "family: woman, girl, girl"
+ },
+ {
+ "no": 1232,
+ "code": "1F933",
+ "char": "🤳",
+ "name": "selfie"
+ },
+ {
+ "no": 1233,
+ "code": "1F933 1F3FB",
+ "char": "🤳🏻",
+ "name": "selfie: light skin tone"
+ },
+ {
+ "no": 1234,
+ "code": "1F933 1F3FC",
+ "char": "🤳🏼",
+ "name": "selfie: medium-light skin tone"
+ },
+ {
+ "no": 1235,
+ "code": "1F933 1F3FD",
+ "char": "🤳🏽",
+ "name": "selfie: medium skin tone"
+ },
+ {
+ "no": 1236,
+ "code": "1F933 1F3FE",
+ "char": "🤳🏾",
+ "name": "selfie: medium-dark skin tone"
+ },
+ {
+ "no": 1237,
+ "code": "1F933 1F3FF",
+ "char": "🤳🏿",
+ "name": "selfie: dark skin tone"
+ },
+ {
+ "no": 1238,
+ "code": "1F4AA",
+ "char": "💪",
+ "name": "flexed biceps"
+ },
+ {
+ "no": 1239,
+ "code": "1F4AA 1F3FB",
+ "char": "💪🏻",
+ "name": "flexed biceps: light skin tone"
+ },
+ {
+ "no": 1240,
+ "code": "1F4AA 1F3FC",
+ "char": "💪🏼",
+ "name": "flexed biceps: medium-light skin tone"
+ },
+ {
+ "no": 1241,
+ "code": "1F4AA 1F3FD",
+ "char": "💪🏽",
+ "name": "flexed biceps: medium skin tone"
+ },
+ {
+ "no": 1242,
+ "code": "1F4AA 1F3FE",
+ "char": "💪🏾",
+ "name": "flexed biceps: medium-dark skin tone"
+ },
+ {
+ "no": 1243,
+ "code": "1F4AA 1F3FF",
+ "char": "💪🏿",
+ "name": "flexed biceps: dark skin tone"
+ },
+ {
+ "no": 1244,
+ "code": "1F448",
+ "char": "👈",
+ "name": "backhand index pointing left"
+ },
+ {
+ "no": 1245,
+ "code": "1F448 1F3FB",
+ "char": "👈🏻",
+ "name": "backhand index pointing left: light skin tone"
+ },
+ {
+ "no": 1246,
+ "code": "1F448 1F3FC",
+ "char": "👈🏼",
+ "name": "backhand index pointing left: medium-light skin tone"
+ },
+ {
+ "no": 1247,
+ "code": "1F448 1F3FD",
+ "char": "👈🏽",
+ "name": "backhand index pointing left: medium skin tone"
+ },
+ {
+ "no": 1248,
+ "code": "1F448 1F3FE",
+ "char": "👈🏾",
+ "name": "backhand index pointing left: medium-dark skin tone"
+ },
+ {
+ "no": 1249,
+ "code": "1F448 1F3FF",
+ "char": "👈🏿",
+ "name": "backhand index pointing left: dark skin tone"
+ },
+ {
+ "no": 1250,
+ "code": "1F449",
+ "char": "👉",
+ "name": "backhand index pointing right"
+ },
+ {
+ "no": 1251,
+ "code": "1F449 1F3FB",
+ "char": "👉🏻",
+ "name": "backhand index pointing right: light skin tone"
+ },
+ {
+ "no": 1252,
+ "code": "1F449 1F3FC",
+ "char": "👉🏼",
+ "name": "backhand index pointing right: medium-light skin tone"
+ },
+ {
+ "no": 1253,
+ "code": "1F449 1F3FD",
+ "char": "👉🏽",
+ "name": "backhand index pointing right: medium skin tone"
+ },
+ {
+ "no": 1254,
+ "code": "1F449 1F3FE",
+ "char": "👉🏾",
+ "name": "backhand index pointing right: medium-dark skin tone"
+ },
+ {
+ "no": 1255,
+ "code": "1F449 1F3FF",
+ "char": "👉🏿",
+ "name": "backhand index pointing right: dark skin tone"
+ },
+ {
+ "no": 1256,
+ "code": "261D",
+ "char": "☝",
+ "name": "index pointing up"
+ },
+ {
+ "no": 1257,
+ "code": "261D 1F3FB",
+ "char": "☝🏻",
+ "name": "index pointing up: light skin tone"
+ },
+ {
+ "no": 1258,
+ "code": "261D 1F3FC",
+ "char": "☝🏼",
+ "name": "index pointing up: medium-light skin tone"
+ },
+ {
+ "no": 1259,
+ "code": "261D 1F3FD",
+ "char": "☝🏽",
+ "name": "index pointing up: medium skin tone"
+ },
+ {
+ "no": 1260,
+ "code": "261D 1F3FE",
+ "char": "☝🏾",
+ "name": "index pointing up: medium-dark skin tone"
+ },
+ {
+ "no": 1261,
+ "code": "261D 1F3FF",
+ "char": "☝🏿",
+ "name": "index pointing up: dark skin tone"
+ },
+ {
+ "no": 1262,
+ "code": "1F446",
+ "char": "👆",
+ "name": "backhand index pointing up"
+ },
+ {
+ "no": 1263,
+ "code": "1F446 1F3FB",
+ "char": "👆🏻",
+ "name": "backhand index pointing up: light skin tone"
+ },
+ {
+ "no": 1264,
+ "code": "1F446 1F3FC",
+ "char": "👆🏼",
+ "name": "backhand index pointing up: medium-light skin tone"
+ },
+ {
+ "no": 1265,
+ "code": "1F446 1F3FD",
+ "char": "👆🏽",
+ "name": "backhand index pointing up: medium skin tone"
+ },
+ {
+ "no": 1266,
+ "code": "1F446 1F3FE",
+ "char": "👆🏾",
+ "name": "backhand index pointing up: medium-dark skin tone"
+ },
+ {
+ "no": 1267,
+ "code": "1F446 1F3FF",
+ "char": "👆🏿",
+ "name": "backhand index pointing up: dark skin tone"
+ },
+ {
+ "no": 1268,
+ "code": "1F595",
+ "char": "🖕",
+ "name": "middle finger"
+ },
+ {
+ "no": 1269,
+ "code": "1F595 1F3FB",
+ "char": "🖕🏻",
+ "name": "middle finger: light skin tone"
+ },
+ {
+ "no": 1270,
+ "code": "1F595 1F3FC",
+ "char": "🖕🏼",
+ "name": "middle finger: medium-light skin tone"
+ },
+ {
+ "no": 1271,
+ "code": "1F595 1F3FD",
+ "char": "🖕🏽",
+ "name": "middle finger: medium skin tone"
+ },
+ {
+ "no": 1272,
+ "code": "1F595 1F3FE",
+ "char": "🖕🏾",
+ "name": "middle finger: medium-dark skin tone"
+ },
+ {
+ "no": 1273,
+ "code": "1F595 1F3FF",
+ "char": "🖕🏿",
+ "name": "middle finger: dark skin tone"
+ },
+ {
+ "no": 1274,
+ "code": "1F447",
+ "char": "👇",
+ "name": "backhand index pointing down"
+ },
+ {
+ "no": 1275,
+ "code": "1F447 1F3FB",
+ "char": "👇🏻",
+ "name": "backhand index pointing down: light skin tone"
+ },
+ {
+ "no": 1276,
+ "code": "1F447 1F3FC",
+ "char": "👇🏼",
+ "name": "backhand index pointing down: medium-light skin tone"
+ },
+ {
+ "no": 1277,
+ "code": "1F447 1F3FD",
+ "char": "👇🏽",
+ "name": "backhand index pointing down: medium skin tone"
+ },
+ {
+ "no": 1278,
+ "code": "1F447 1F3FE",
+ "char": "👇🏾",
+ "name": "backhand index pointing down: medium-dark skin tone"
+ },
+ {
+ "no": 1279,
+ "code": "1F447 1F3FF",
+ "char": "👇🏿",
+ "name": "backhand index pointing down: dark skin tone"
+ },
+ {
+ "no": 1280,
+ "code": "270C",
+ "char": "✌",
+ "name": "victory hand"
+ },
+ {
+ "no": 1281,
+ "code": "270C 1F3FB",
+ "char": "✌🏻",
+ "name": "victory hand: light skin tone"
+ },
+ {
+ "no": 1282,
+ "code": "270C 1F3FC",
+ "char": "✌🏼",
+ "name": "victory hand: medium-light skin tone"
+ },
+ {
+ "no": 1283,
+ "code": "270C 1F3FD",
+ "char": "✌🏽",
+ "name": "victory hand: medium skin tone"
+ },
+ {
+ "no": 1284,
+ "code": "270C 1F3FE",
+ "char": "✌🏾",
+ "name": "victory hand: medium-dark skin tone"
+ },
+ {
+ "no": 1285,
+ "code": "270C 1F3FF",
+ "char": "✌🏿",
+ "name": "victory hand: dark skin tone"
+ },
+ {
+ "no": 1286,
+ "code": "1F91E",
+ "char": "🤞",
+ "name": "crossed fingers"
+ },
+ {
+ "no": 1287,
+ "code": "1F91E 1F3FB",
+ "char": "🤞🏻",
+ "name": "crossed fingers: light skin tone"
+ },
+ {
+ "no": 1288,
+ "code": "1F91E 1F3FC",
+ "char": "🤞🏼",
+ "name": "crossed fingers: medium-light skin tone"
+ },
+ {
+ "no": 1289,
+ "code": "1F91E 1F3FD",
+ "char": "🤞🏽",
+ "name": "crossed fingers: medium skin tone"
+ },
+ {
+ "no": 1290,
+ "code": "1F91E 1F3FE",
+ "char": "🤞🏾",
+ "name": "crossed fingers: medium-dark skin tone"
+ },
+ {
+ "no": 1291,
+ "code": "1F91E 1F3FF",
+ "char": "🤞🏿",
+ "name": "crossed fingers: dark skin tone"
+ },
+ {
+ "no": 1292,
+ "code": "1F596",
+ "char": "🖖",
+ "name": "vulcan salute"
+ },
+ {
+ "no": 1293,
+ "code": "1F596 1F3FB",
+ "char": "🖖🏻",
+ "name": "vulcan salute: light skin tone"
+ },
+ {
+ "no": 1294,
+ "code": "1F596 1F3FC",
+ "char": "🖖🏼",
+ "name": "vulcan salute: medium-light skin tone"
+ },
+ {
+ "no": 1295,
+ "code": "1F596 1F3FD",
+ "char": "🖖🏽",
+ "name": "vulcan salute: medium skin tone"
+ },
+ {
+ "no": 1296,
+ "code": "1F596 1F3FE",
+ "char": "🖖🏾",
+ "name": "vulcan salute: medium-dark skin tone"
+ },
+ {
+ "no": 1297,
+ "code": "1F596 1F3FF",
+ "char": "🖖🏿",
+ "name": "vulcan salute: dark skin tone"
+ },
+ {
+ "no": 1298,
+ "code": "1F918",
+ "char": "🤘",
+ "name": "sign of the horns"
+ },
+ {
+ "no": 1299,
+ "code": "1F918 1F3FB",
+ "char": "🤘🏻",
+ "name": "sign of the horns: light skin tone"
+ },
+ {
+ "no": 1300,
+ "code": "1F918 1F3FC",
+ "char": "🤘🏼",
+ "name": "sign of the horns: medium-light skin tone"
+ },
+ {
+ "no": 1301,
+ "code": "1F918 1F3FD",
+ "char": "🤘🏽",
+ "name": "sign of the horns: medium skin tone"
+ },
+ {
+ "no": 1302,
+ "code": "1F918 1F3FE",
+ "char": "🤘🏾",
+ "name": "sign of the horns: medium-dark skin tone"
+ },
+ {
+ "no": 1303,
+ "code": "1F918 1F3FF",
+ "char": "🤘🏿",
+ "name": "sign of the horns: dark skin tone"
+ },
+ {
+ "no": 1304,
+ "code": "1F919",
+ "char": "🤙",
+ "name": "call me hand"
+ },
+ {
+ "no": 1305,
+ "code": "1F919 1F3FB",
+ "char": "🤙🏻",
+ "name": "call me hand: light skin tone"
+ },
+ {
+ "no": 1306,
+ "code": "1F919 1F3FC",
+ "char": "🤙🏼",
+ "name": "call me hand: medium-light skin tone"
+ },
+ {
+ "no": 1307,
+ "code": "1F919 1F3FD",
+ "char": "🤙🏽",
+ "name": "call me hand: medium skin tone"
+ },
+ {
+ "no": 1308,
+ "code": "1F919 1F3FE",
+ "char": "🤙🏾",
+ "name": "call me hand: medium-dark skin tone"
+ },
+ {
+ "no": 1309,
+ "code": "1F919 1F3FF",
+ "char": "🤙🏿",
+ "name": "call me hand: dark skin tone"
+ },
+ {
+ "no": 1310,
+ "code": "1F590",
+ "char": "🖐",
+ "name": "hand with fingers splayed"
+ },
+ {
+ "no": 1311,
+ "code": "1F590 1F3FB",
+ "char": "🖐🏻",
+ "name": "hand with fingers splayed: light skin tone"
+ },
+ {
+ "no": 1312,
+ "code": "1F590 1F3FC",
+ "char": "🖐🏼",
+ "name": "hand with fingers splayed: medium-light skin tone"
+ },
+ {
+ "no": 1313,
+ "code": "1F590 1F3FD",
+ "char": "🖐🏽",
+ "name": "hand with fingers splayed: medium skin tone"
+ },
+ {
+ "no": 1314,
+ "code": "1F590 1F3FE",
+ "char": "🖐🏾",
+ "name": "hand with fingers splayed: medium-dark skin tone"
+ },
+ {
+ "no": 1315,
+ "code": "1F590 1F3FF",
+ "char": "🖐🏿",
+ "name": "hand with fingers splayed: dark skin tone"
+ },
+ {
+ "no": 1316,
+ "code": "270B",
+ "char": "✋",
+ "name": "raised hand"
+ },
+ {
+ "no": 1317,
+ "code": "270B 1F3FB",
+ "char": "✋🏻",
+ "name": "raised hand: light skin tone"
+ },
+ {
+ "no": 1318,
+ "code": "270B 1F3FC",
+ "char": "✋🏼",
+ "name": "raised hand: medium-light skin tone"
+ },
+ {
+ "no": 1319,
+ "code": "270B 1F3FD",
+ "char": "✋🏽",
+ "name": "raised hand: medium skin tone"
+ },
+ {
+ "no": 1320,
+ "code": "270B 1F3FE",
+ "char": "✋🏾",
+ "name": "raised hand: medium-dark skin tone"
+ },
+ {
+ "no": 1321,
+ "code": "270B 1F3FF",
+ "char": "✋🏿",
+ "name": "raised hand: dark skin tone"
+ },
+ {
+ "no": 1322,
+ "code": "1F44C",
+ "char": "👌",
+ "name": "OK hand"
+ },
+ {
+ "no": 1323,
+ "code": "1F44C 1F3FB",
+ "char": "👌🏻",
+ "name": "OK hand: light skin tone"
+ },
+ {
+ "no": 1324,
+ "code": "1F44C 1F3FC",
+ "char": "👌🏼",
+ "name": "OK hand: medium-light skin tone"
+ },
+ {
+ "no": 1325,
+ "code": "1F44C 1F3FD",
+ "char": "👌🏽",
+ "name": "OK hand: medium skin tone"
+ },
+ {
+ "no": 1326,
+ "code": "1F44C 1F3FE",
+ "char": "👌🏾",
+ "name": "OK hand: medium-dark skin tone"
+ },
+ {
+ "no": 1327,
+ "code": "1F44C 1F3FF",
+ "char": "👌🏿",
+ "name": "OK hand: dark skin tone"
+ },
+ {
+ "no": 1328,
+ "code": "1F44D",
+ "char": "👍",
+ "name": "thumbs up"
+ },
+ {
+ "no": 1329,
+ "code": "1F44D 1F3FB",
+ "char": "👍🏻",
+ "name": "thumbs up: light skin tone"
+ },
+ {
+ "no": 1330,
+ "code": "1F44D 1F3FC",
+ "char": "👍🏼",
+ "name": "thumbs up: medium-light skin tone"
+ },
+ {
+ "no": 1331,
+ "code": "1F44D 1F3FD",
+ "char": "👍🏽",
+ "name": "thumbs up: medium skin tone"
+ },
+ {
+ "no": 1332,
+ "code": "1F44D 1F3FE",
+ "char": "👍🏾",
+ "name": "thumbs up: medium-dark skin tone"
+ },
+ {
+ "no": 1333,
+ "code": "1F44D 1F3FF",
+ "char": "👍🏿",
+ "name": "thumbs up: dark skin tone"
+ },
+ {
+ "no": 1334,
+ "code": "1F44E",
+ "char": "👎",
+ "name": "thumbs down"
+ },
+ {
+ "no": 1335,
+ "code": "1F44E 1F3FB",
+ "char": "👎🏻",
+ "name": "thumbs down: light skin tone"
+ },
+ {
+ "no": 1336,
+ "code": "1F44E 1F3FC",
+ "char": "👎🏼",
+ "name": "thumbs down: medium-light skin tone"
+ },
+ {
+ "no": 1337,
+ "code": "1F44E 1F3FD",
+ "char": "👎🏽",
+ "name": "thumbs down: medium skin tone"
+ },
+ {
+ "no": 1338,
+ "code": "1F44E 1F3FE",
+ "char": "👎🏾",
+ "name": "thumbs down: medium-dark skin tone"
+ },
+ {
+ "no": 1339,
+ "code": "1F44E 1F3FF",
+ "char": "👎🏿",
+ "name": "thumbs down: dark skin tone"
+ },
+ {
+ "no": 1340,
+ "code": "270A",
+ "char": "✊",
+ "name": "raised fist"
+ },
+ {
+ "no": 1341,
+ "code": "270A 1F3FB",
+ "char": "✊🏻",
+ "name": "raised fist: light skin tone"
+ },
+ {
+ "no": 1342,
+ "code": "270A 1F3FC",
+ "char": "✊🏼",
+ "name": "raised fist: medium-light skin tone"
+ },
+ {
+ "no": 1343,
+ "code": "270A 1F3FD",
+ "char": "✊🏽",
+ "name": "raised fist: medium skin tone"
+ },
+ {
+ "no": 1344,
+ "code": "270A 1F3FE",
+ "char": "✊🏾",
+ "name": "raised fist: medium-dark skin tone"
+ },
+ {
+ "no": 1345,
+ "code": "270A 1F3FF",
+ "char": "✊🏿",
+ "name": "raised fist: dark skin tone"
+ },
+ {
+ "no": 1346,
+ "code": "1F44A",
+ "char": "👊",
+ "name": "oncoming fist"
+ },
+ {
+ "no": 1347,
+ "code": "1F44A 1F3FB",
+ "char": "👊🏻",
+ "name": "oncoming fist: light skin tone"
+ },
+ {
+ "no": 1348,
+ "code": "1F44A 1F3FC",
+ "char": "👊🏼",
+ "name": "oncoming fist: medium-light skin tone"
+ },
+ {
+ "no": 1349,
+ "code": "1F44A 1F3FD",
+ "char": "👊🏽",
+ "name": "oncoming fist: medium skin tone"
+ },
+ {
+ "no": 1350,
+ "code": "1F44A 1F3FE",
+ "char": "👊🏾",
+ "name": "oncoming fist: medium-dark skin tone"
+ },
+ {
+ "no": 1351,
+ "code": "1F44A 1F3FF",
+ "char": "👊🏿",
+ "name": "oncoming fist: dark skin tone"
+ },
+ {
+ "no": 1352,
+ "code": "1F91B",
+ "char": "🤛",
+ "name": "left-facing fist"
+ },
+ {
+ "no": 1353,
+ "code": "1F91B 1F3FB",
+ "char": "🤛🏻",
+ "name": "left-facing fist: light skin tone"
+ },
+ {
+ "no": 1354,
+ "code": "1F91B 1F3FC",
+ "char": "🤛🏼",
+ "name": "left-facing fist: medium-light skin tone"
+ },
+ {
+ "no": 1355,
+ "code": "1F91B 1F3FD",
+ "char": "🤛🏽",
+ "name": "left-facing fist: medium skin tone"
+ },
+ {
+ "no": 1356,
+ "code": "1F91B 1F3FE",
+ "char": "🤛🏾",
+ "name": "left-facing fist: medium-dark skin tone"
+ },
+ {
+ "no": 1357,
+ "code": "1F91B 1F3FF",
+ "char": "🤛🏿",
+ "name": "left-facing fist: dark skin tone"
+ },
+ {
+ "no": 1358,
+ "code": "1F91C",
+ "char": "🤜",
+ "name": "right-facing fist"
+ },
+ {
+ "no": 1359,
+ "code": "1F91C 1F3FB",
+ "char": "🤜🏻",
+ "name": "right-facing fist: light skin tone"
+ },
+ {
+ "no": 1360,
+ "code": "1F91C 1F3FC",
+ "char": "🤜🏼",
+ "name": "right-facing fist: medium-light skin tone"
+ },
+ {
+ "no": 1361,
+ "code": "1F91C 1F3FD",
+ "char": "🤜🏽",
+ "name": "right-facing fist: medium skin tone"
+ },
+ {
+ "no": 1362,
+ "code": "1F91C 1F3FE",
+ "char": "🤜🏾",
+ "name": "right-facing fist: medium-dark skin tone"
+ },
+ {
+ "no": 1363,
+ "code": "1F91C 1F3FF",
+ "char": "🤜🏿",
+ "name": "right-facing fist: dark skin tone"
+ },
+ {
+ "no": 1364,
+ "code": "1F91A",
+ "char": "🤚",
+ "name": "raised back of hand"
+ },
+ {
+ "no": 1365,
+ "code": "1F91A 1F3FB",
+ "char": "🤚🏻",
+ "name": "raised back of hand: light skin tone"
+ },
+ {
+ "no": 1366,
+ "code": "1F91A 1F3FC",
+ "char": "🤚🏼",
+ "name": "raised back of hand: medium-light skin tone"
+ },
+ {
+ "no": 1367,
+ "code": "1F91A 1F3FD",
+ "char": "🤚🏽",
+ "name": "raised back of hand: medium skin tone"
+ },
+ {
+ "no": 1368,
+ "code": "1F91A 1F3FE",
+ "char": "🤚🏾",
+ "name": "raised back of hand: medium-dark skin tone"
+ },
+ {
+ "no": 1369,
+ "code": "1F91A 1F3FF",
+ "char": "🤚🏿",
+ "name": "raised back of hand: dark skin tone"
+ },
+ {
+ "no": 1370,
+ "code": "1F44B",
+ "char": "👋",
+ "name": "waving hand"
+ },
+ {
+ "no": 1371,
+ "code": "1F44B 1F3FB",
+ "char": "👋🏻",
+ "name": "waving hand: light skin tone"
+ },
+ {
+ "no": 1372,
+ "code": "1F44B 1F3FC",
+ "char": "👋🏼",
+ "name": "waving hand: medium-light skin tone"
+ },
+ {
+ "no": 1373,
+ "code": "1F44B 1F3FD",
+ "char": "👋🏽",
+ "name": "waving hand: medium skin tone"
+ },
+ {
+ "no": 1374,
+ "code": "1F44B 1F3FE",
+ "char": "👋🏾",
+ "name": "waving hand: medium-dark skin tone"
+ },
+ {
+ "no": 1375,
+ "code": "1F44B 1F3FF",
+ "char": "👋🏿",
+ "name": "waving hand: dark skin tone"
+ },
+ {
+ "no": 1376,
+ "code": "1F91F",
+ "char": "🤟",
+ "name": "⊛ love-you gesture"
+ },
+ {
+ "no": 1377,
+ "code": "1F91F 1F3FB",
+ "char": "🤟🏻",
+ "name": "⊛ love-you gesture: light skin tone"
+ },
+ {
+ "no": 1378,
+ "code": "1F91F 1F3FC",
+ "char": "🤟🏼",
+ "name": "⊛ love-you gesture: medium-light skin tone"
+ },
+ {
+ "no": 1379,
+ "code": "1F91F 1F3FD",
+ "char": "🤟🏽",
+ "name": "⊛ love-you gesture: medium skin tone"
+ },
+ {
+ "no": 1380,
+ "code": "1F91F 1F3FE",
+ "char": "🤟🏾",
+ "name": "⊛ love-you gesture: medium-dark skin tone"
+ },
+ {
+ "no": 1381,
+ "code": "1F91F 1F3FF",
+ "char": "🤟🏿",
+ "name": "⊛ love-you gesture: dark skin tone"
+ },
+ {
+ "no": 1382,
+ "code": "270D",
+ "char": "✍",
+ "name": "writing hand"
+ },
+ {
+ "no": 1383,
+ "code": "270D 1F3FB",
+ "char": "✍🏻",
+ "name": "writing hand: light skin tone"
+ },
+ {
+ "no": 1384,
+ "code": "270D 1F3FC",
+ "char": "✍🏼",
+ "name": "writing hand: medium-light skin tone"
+ },
+ {
+ "no": 1385,
+ "code": "270D 1F3FD",
+ "char": "✍🏽",
+ "name": "writing hand: medium skin tone"
+ },
+ {
+ "no": 1386,
+ "code": "270D 1F3FE",
+ "char": "✍🏾",
+ "name": "writing hand: medium-dark skin tone"
+ },
+ {
+ "no": 1387,
+ "code": "270D 1F3FF",
+ "char": "✍🏿",
+ "name": "writing hand: dark skin tone"
+ },
+ {
+ "no": 1388,
+ "code": "1F44F",
+ "char": "👏",
+ "name": "clapping hands"
+ },
+ {
+ "no": 1389,
+ "code": "1F44F 1F3FB",
+ "char": "👏🏻",
+ "name": "clapping hands: light skin tone"
+ },
+ {
+ "no": 1390,
+ "code": "1F44F 1F3FC",
+ "char": "👏🏼",
+ "name": "clapping hands: medium-light skin tone"
+ },
+ {
+ "no": 1391,
+ "code": "1F44F 1F3FD",
+ "char": "👏🏽",
+ "name": "clapping hands: medium skin tone"
+ },
+ {
+ "no": 1392,
+ "code": "1F44F 1F3FE",
+ "char": "👏🏾",
+ "name": "clapping hands: medium-dark skin tone"
+ },
+ {
+ "no": 1393,
+ "code": "1F44F 1F3FF",
+ "char": "👏🏿",
+ "name": "clapping hands: dark skin tone"
+ },
+ {
+ "no": 1394,
+ "code": "1F450",
+ "char": "👐",
+ "name": "open hands"
+ },
+ {
+ "no": 1395,
+ "code": "1F450 1F3FB",
+ "char": "👐🏻",
+ "name": "open hands: light skin tone"
+ },
+ {
+ "no": 1396,
+ "code": "1F450 1F3FC",
+ "char": "👐🏼",
+ "name": "open hands: medium-light skin tone"
+ },
+ {
+ "no": 1397,
+ "code": "1F450 1F3FD",
+ "char": "👐🏽",
+ "name": "open hands: medium skin tone"
+ },
+ {
+ "no": 1398,
+ "code": "1F450 1F3FE",
+ "char": "👐🏾",
+ "name": "open hands: medium-dark skin tone"
+ },
+ {
+ "no": 1399,
+ "code": "1F450 1F3FF",
+ "char": "👐🏿",
+ "name": "open hands: dark skin tone"
+ },
+ {
+ "no": 1400,
+ "code": "1F64C",
+ "char": "🙌",
+ "name": "raising hands"
+ },
+ {
+ "no": 1401,
+ "code": "1F64C 1F3FB",
+ "char": "🙌🏻",
+ "name": "raising hands: light skin tone"
+ },
+ {
+ "no": 1402,
+ "code": "1F64C 1F3FC",
+ "char": "🙌🏼",
+ "name": "raising hands: medium-light skin tone"
+ },
+ {
+ "no": 1403,
+ "code": "1F64C 1F3FD",
+ "char": "🙌🏽",
+ "name": "raising hands: medium skin tone"
+ },
+ {
+ "no": 1404,
+ "code": "1F64C 1F3FE",
+ "char": "🙌🏾",
+ "name": "raising hands: medium-dark skin tone"
+ },
+ {
+ "no": 1405,
+ "code": "1F64C 1F3FF",
+ "char": "🙌🏿",
+ "name": "raising hands: dark skin tone"
+ },
+ {
+ "no": 1406,
+ "code": "1F932",
+ "char": "🤲",
+ "name": "⊛ palms up together"
+ },
+ {
+ "no": 1407,
+ "code": "1F932 1F3FB",
+ "char": "🤲🏻",
+ "name": "⊛ palms up together: light skin tone"
+ },
+ {
+ "no": 1408,
+ "code": "1F932 1F3FC",
+ "char": "🤲🏼",
+ "name": "⊛ palms up together: medium-light skin tone"
+ },
+ {
+ "no": 1409,
+ "code": "1F932 1F3FD",
+ "char": "🤲🏽",
+ "name": "⊛ palms up together: medium skin tone"
+ },
+ {
+ "no": 1410,
+ "code": "1F932 1F3FE",
+ "char": "🤲🏾",
+ "name": "⊛ palms up together: medium-dark skin tone"
+ },
+ {
+ "no": 1411,
+ "code": "1F932 1F3FF",
+ "char": "🤲🏿",
+ "name": "⊛ palms up together: dark skin tone"
+ },
+ {
+ "no": 1412,
+ "code": "1F64F",
+ "char": "🙏",
+ "name": "folded hands"
+ },
+ {
+ "no": 1413,
+ "code": "1F64F 1F3FB",
+ "char": "🙏🏻",
+ "name": "folded hands: light skin tone"
+ },
+ {
+ "no": 1414,
+ "code": "1F64F 1F3FC",
+ "char": "🙏🏼",
+ "name": "folded hands: medium-light skin tone"
+ },
+ {
+ "no": 1415,
+ "code": "1F64F 1F3FD",
+ "char": "🙏🏽",
+ "name": "folded hands: medium skin tone"
+ },
+ {
+ "no": 1416,
+ "code": "1F64F 1F3FE",
+ "char": "🙏🏾",
+ "name": "folded hands: medium-dark skin tone"
+ },
+ {
+ "no": 1417,
+ "code": "1F64F 1F3FF",
+ "char": "🙏🏿",
+ "name": "folded hands: dark skin tone"
+ },
+ {
+ "no": 1418,
+ "code": "1F91D",
+ "char": "🤝",
+ "name": "handshake"
+ },
+ {
+ "no": 1419,
+ "code": "1F485",
+ "char": "💅",
+ "name": "nail polish"
+ },
+ {
+ "no": 1420,
+ "code": "1F485 1F3FB",
+ "char": "💅🏻",
+ "name": "nail polish: light skin tone"
+ },
+ {
+ "no": 1421,
+ "code": "1F485 1F3FC",
+ "char": "💅🏼",
+ "name": "nail polish: medium-light skin tone"
+ },
+ {
+ "no": 1422,
+ "code": "1F485 1F3FD",
+ "char": "💅🏽",
+ "name": "nail polish: medium skin tone"
+ },
+ {
+ "no": 1423,
+ "code": "1F485 1F3FE",
+ "char": "💅🏾",
+ "name": "nail polish: medium-dark skin tone"
+ },
+ {
+ "no": 1424,
+ "code": "1F485 1F3FF",
+ "char": "💅🏿",
+ "name": "nail polish: dark skin tone"
+ },
+ {
+ "no": 1425,
+ "code": "1F442",
+ "char": "👂",
+ "name": "ear"
+ },
+ {
+ "no": 1426,
+ "code": "1F442 1F3FB",
+ "char": "👂🏻",
+ "name": "ear: light skin tone"
+ },
+ {
+ "no": 1427,
+ "code": "1F442 1F3FC",
+ "char": "👂🏼",
+ "name": "ear: medium-light skin tone"
+ },
+ {
+ "no": 1428,
+ "code": "1F442 1F3FD",
+ "char": "👂🏽",
+ "name": "ear: medium skin tone"
+ },
+ {
+ "no": 1429,
+ "code": "1F442 1F3FE",
+ "char": "👂🏾",
+ "name": "ear: medium-dark skin tone"
+ },
+ {
+ "no": 1430,
+ "code": "1F442 1F3FF",
+ "char": "👂🏿",
+ "name": "ear: dark skin tone"
+ },
+ {
+ "no": 1431,
+ "code": "1F443",
+ "char": "👃",
+ "name": "nose"
+ },
+ {
+ "no": 1432,
+ "code": "1F443 1F3FB",
+ "char": "👃🏻",
+ "name": "nose: light skin tone"
+ },
+ {
+ "no": 1433,
+ "code": "1F443 1F3FC",
+ "char": "👃🏼",
+ "name": "nose: medium-light skin tone"
+ },
+ {
+ "no": 1434,
+ "code": "1F443 1F3FD",
+ "char": "👃🏽",
+ "name": "nose: medium skin tone"
+ },
+ {
+ "no": 1435,
+ "code": "1F443 1F3FE",
+ "char": "👃🏾",
+ "name": "nose: medium-dark skin tone"
+ },
+ {
+ "no": 1436,
+ "code": "1F443 1F3FF",
+ "char": "👃🏿",
+ "name": "nose: dark skin tone"
+ },
+ {
+ "no": 1437,
+ "code": "1F463",
+ "char": "👣",
+ "name": "footprints"
+ },
+ {
+ "no": 1438,
+ "code": "1F440",
+ "char": "👀",
+ "name": "eyes"
+ },
+ {
+ "no": 1439,
+ "code": "1F441",
+ "char": "👁",
+ "name": "eye"
+ },
+ {
+ "no": 1440,
+ "code": "1F441 FE0F 200D 1F5E8 FE0F",
+ "char": "👁️‍🗨️",
+ "name": "eye in speech bubble"
+ },
+ {
+ "no": 1441,
+ "code": "1F9E0",
+ "char": "🧠",
+ "name": "⊛ brain"
+ },
+ {
+ "no": 1442,
+ "code": "1F445",
+ "char": "👅",
+ "name": "tongue"
+ },
+ {
+ "no": 1443,
+ "code": "1F444",
+ "char": "👄",
+ "name": "mouth"
+ },
+ {
+ "no": 1444,
+ "code": "1F48B",
+ "char": "💋",
+ "name": "kiss mark"
+ },
+ {
+ "no": 1445,
+ "code": "1F498",
+ "char": "💘",
+ "name": "heart with arrow"
+ },
+ {
+ "no": 1446,
+ "code": "2764",
+ "char": "❤",
+ "name": "red heart"
+ },
+ {
+ "no": 1447,
+ "code": "1F493",
+ "char": "💓",
+ "name": "beating heart"
+ },
+ {
+ "no": 1448,
+ "code": "1F494",
+ "char": "💔",
+ "name": "broken heart"
+ },
+ {
+ "no": 1449,
+ "code": "1F495",
+ "char": "💕",
+ "name": "two hearts"
+ },
+ {
+ "no": 1450,
+ "code": "1F496",
+ "char": "💖",
+ "name": "sparkling heart"
+ },
+ {
+ "no": 1451,
+ "code": "1F497",
+ "char": "💗",
+ "name": "growing heart"
+ },
+ {
+ "no": 1452,
+ "code": "1F499",
+ "char": "💙",
+ "name": "blue heart"
+ },
+ {
+ "no": 1453,
+ "code": "1F49A",
+ "char": "💚",
+ "name": "green heart"
+ },
+ {
+ "no": 1454,
+ "code": "1F49B",
+ "char": "💛",
+ "name": "yellow heart"
+ },
+ {
+ "no": 1455,
+ "code": "1F9E1",
+ "char": "🧡",
+ "name": "⊛ orange heart"
+ },
+ {
+ "no": 1456,
+ "code": "1F49C",
+ "char": "💜",
+ "name": "purple heart"
+ },
+ {
+ "no": 1457,
+ "code": "1F5A4",
+ "char": "🖤",
+ "name": "black heart"
+ },
+ {
+ "no": 1458,
+ "code": "1F49D",
+ "char": "💝",
+ "name": "heart with ribbon"
+ },
+ {
+ "no": 1459,
+ "code": "1F49E",
+ "char": "💞",
+ "name": "revolving hearts"
+ },
+ {
+ "no": 1460,
+ "code": "1F49F",
+ "char": "💟",
+ "name": "heart decoration"
+ },
+ {
+ "no": 1461,
+ "code": "2763",
+ "char": "❣",
+ "name": "heavy heart exclamation"
+ },
+ {
+ "no": 1462,
+ "code": "1F48C",
+ "char": "💌",
+ "name": "love letter"
+ },
+ {
+ "no": 1463,
+ "code": "1F4A4",
+ "char": "💤",
+ "name": "zzz"
+ },
+ {
+ "no": 1464,
+ "code": "1F4A2",
+ "char": "💢",
+ "name": "anger symbol"
+ },
+ {
+ "no": 1465,
+ "code": "1F4A3",
+ "char": "💣",
+ "name": "bomb"
+ },
+ {
+ "no": 1466,
+ "code": "1F4A5",
+ "char": "💥",
+ "name": "collision"
+ },
+ {
+ "no": 1467,
+ "code": "1F4A6",
+ "char": "💦",
+ "name": "sweat droplets"
+ },
+ {
+ "no": 1468,
+ "code": "1F4A8",
+ "char": "💨",
+ "name": "dashing away"
+ },
+ {
+ "no": 1469,
+ "code": "1F4AB",
+ "char": "💫",
+ "name": "dizzy"
+ },
+ {
+ "no": 1470,
+ "code": "1F4AC",
+ "char": "💬",
+ "name": "speech balloon"
+ },
+ {
+ "no": 1471,
+ "code": "1F5E8",
+ "char": "🗨",
+ "name": "left speech bubble"
+ },
+ {
+ "no": 1472,
+ "code": "1F5EF",
+ "char": "🗯",
+ "name": "right anger bubble"
+ },
+ {
+ "no": 1473,
+ "code": "1F4AD",
+ "char": "💭",
+ "name": "thought balloon"
+ },
+ {
+ "no": 1474,
+ "code": "1F573",
+ "char": "🕳",
+ "name": "hole"
+ },
+ {
+ "no": 1475,
+ "code": "1F453",
+ "char": "👓",
+ "name": "glasses"
+ },
+ {
+ "no": 1476,
+ "code": "1F576",
+ "char": "🕶",
+ "name": "sunglasses"
+ },
+ {
+ "no": 1477,
+ "code": "1F454",
+ "char": "👔",
+ "name": "necktie"
+ },
+ {
+ "no": 1478,
+ "code": "1F455",
+ "char": "👕",
+ "name": "t-shirt"
+ },
+ {
+ "no": 1479,
+ "code": "1F456",
+ "char": "👖",
+ "name": "jeans"
+ },
+ {
+ "no": 1480,
+ "code": "1F9E3",
+ "char": "🧣",
+ "name": "⊛ scarf"
+ },
+ {
+ "no": 1481,
+ "code": "1F9E4",
+ "char": "🧤",
+ "name": "⊛ gloves"
+ },
+ {
+ "no": 1482,
+ "code": "1F9E5",
+ "char": "🧥",
+ "name": "⊛ coat"
+ },
+ {
+ "no": 1483,
+ "code": "1F9E6",
+ "char": "🧦",
+ "name": "⊛ socks"
+ },
+ {
+ "no": 1484,
+ "code": "1F457",
+ "char": "👗",
+ "name": "dress"
+ },
+ {
+ "no": 1485,
+ "code": "1F458",
+ "char": "👘",
+ "name": "kimono"
+ },
+ {
+ "no": 1486,
+ "code": "1F459",
+ "char": "👙",
+ "name": "bikini"
+ },
+ {
+ "no": 1487,
+ "code": "1F45A",
+ "char": "👚",
+ "name": "woman’s clothes"
+ },
+ {
+ "no": 1488,
+ "code": "1F45B",
+ "char": "👛",
+ "name": "purse"
+ },
+ {
+ "no": 1489,
+ "code": "1F45C",
+ "char": "👜",
+ "name": "handbag"
+ },
+ {
+ "no": 1490,
+ "code": "1F45D",
+ "char": "👝",
+ "name": "clutch bag"
+ },
+ {
+ "no": 1491,
+ "code": "1F6CD",
+ "char": "🛍",
+ "name": "shopping bags"
+ },
+ {
+ "no": 1492,
+ "code": "1F392",
+ "char": "🎒",
+ "name": "school backpack"
+ },
+ {
+ "no": 1493,
+ "code": "1F45E",
+ "char": "👞",
+ "name": "man’s shoe"
+ },
+ {
+ "no": 1494,
+ "code": "1F45F",
+ "char": "👟",
+ "name": "running shoe"
+ },
+ {
+ "no": 1495,
+ "code": "1F460",
+ "char": "👠",
+ "name": "high-heeled shoe"
+ },
+ {
+ "no": 1496,
+ "code": "1F461",
+ "char": "👡",
+ "name": "woman’s sandal"
+ },
+ {
+ "no": 1497,
+ "code": "1F462",
+ "char": "👢",
+ "name": "woman’s boot"
+ },
+ {
+ "no": 1498,
+ "code": "1F451",
+ "char": "👑",
+ "name": "crown"
+ },
+ {
+ "no": 1499,
+ "code": "1F452",
+ "char": "👒",
+ "name": "woman’s hat"
+ },
+ {
+ "no": 1500,
+ "code": "1F3A9",
+ "char": "🎩",
+ "name": "top hat"
+ },
+ {
+ "no": 1501,
+ "code": "1F393",
+ "char": "🎓",
+ "name": "graduation cap"
+ },
+ {
+ "no": 1502,
+ "code": "1F9E2",
+ "char": "🧢",
+ "name": "⊛ billed cap"
+ },
+ {
+ "no": 1503,
+ "code": "26D1",
+ "char": "⛑",
+ "name": "rescue worker’s helmet"
+ },
+ {
+ "no": 1504,
+ "code": "1F4FF",
+ "char": "📿",
+ "name": "prayer beads"
+ },
+ {
+ "no": 1505,
+ "code": "1F484",
+ "char": "💄",
+ "name": "lipstick"
+ },
+ {
+ "no": 1506,
+ "code": "1F48D",
+ "char": "💍",
+ "name": "ring"
+ },
+ {
+ "no": 1507,
+ "code": "1F48E",
+ "char": "💎",
+ "name": "gem stone"
+ },
+ {
+ "no": 1508,
+ "code": "1F435",
+ "char": "🐵",
+ "name": "monkey face"
+ },
+ {
+ "no": 1509,
+ "code": "1F412",
+ "char": "🐒",
+ "name": "monkey"
+ },
+ {
+ "no": 1510,
+ "code": "1F98D",
+ "char": "🦍",
+ "name": "gorilla"
+ },
+ {
+ "no": 1511,
+ "code": "1F436",
+ "char": "🐶",
+ "name": "dog face"
+ },
+ {
+ "no": 1512,
+ "code": "1F415",
+ "char": "🐕",
+ "name": "dog"
+ },
+ {
+ "no": 1513,
+ "code": "1F429",
+ "char": "🐩",
+ "name": "poodle"
+ },
+ {
+ "no": 1514,
+ "code": "1F43A",
+ "char": "🐺",
+ "name": "wolf face"
+ },
+ {
+ "no": 1515,
+ "code": "1F98A",
+ "char": "🦊",
+ "name": "fox face"
+ },
+ {
+ "no": 1516,
+ "code": "1F431",
+ "char": "🐱",
+ "name": "cat face"
+ },
+ {
+ "no": 1517,
+ "code": "1F408",
+ "char": "🐈",
+ "name": "cat"
+ },
+ {
+ "no": 1518,
+ "code": "1F981",
+ "char": "🦁",
+ "name": "lion face"
+ },
+ {
+ "no": 1519,
+ "code": "1F42F",
+ "char": "🐯",
+ "name": "tiger face"
+ },
+ {
+ "no": 1520,
+ "code": "1F405",
+ "char": "🐅",
+ "name": "tiger"
+ },
+ {
+ "no": 1521,
+ "code": "1F406",
+ "char": "🐆",
+ "name": "leopard"
+ },
+ {
+ "no": 1522,
+ "code": "1F434",
+ "char": "🐴",
+ "name": "horse face"
+ },
+ {
+ "no": 1523,
+ "code": "1F40E",
+ "char": "🐎",
+ "name": "horse"
+ },
+ {
+ "no": 1524,
+ "code": "1F984",
+ "char": "🦄",
+ "name": "unicorn face"
+ },
+ {
+ "no": 1525,
+ "code": "1F993",
+ "char": "🦓",
+ "name": "⊛ zebra"
+ },
+ {
+ "no": 1526,
+ "code": "1F98C",
+ "char": "🦌",
+ "name": "deer"
+ },
+ {
+ "no": 1527,
+ "code": "1F42E",
+ "char": "🐮",
+ "name": "cow face"
+ },
+ {
+ "no": 1528,
+ "code": "1F402",
+ "char": "🐂",
+ "name": "ox"
+ },
+ {
+ "no": 1529,
+ "code": "1F403",
+ "char": "🐃",
+ "name": "water buffalo"
+ },
+ {
+ "no": 1530,
+ "code": "1F404",
+ "char": "🐄",
+ "name": "cow"
+ },
+ {
+ "no": 1531,
+ "code": "1F437",
+ "char": "🐷",
+ "name": "pig face"
+ },
+ {
+ "no": 1532,
+ "code": "1F416",
+ "char": "🐖",
+ "name": "pig"
+ },
+ {
+ "no": 1533,
+ "code": "1F417",
+ "char": "🐗",
+ "name": "boar"
+ },
+ {
+ "no": 1534,
+ "code": "1F43D",
+ "char": "🐽",
+ "name": "pig nose"
+ },
+ {
+ "no": 1535,
+ "code": "1F40F",
+ "char": "🐏",
+ "name": "ram"
+ },
+ {
+ "no": 1536,
+ "code": "1F411",
+ "char": "🐑",
+ "name": "ewe"
+ },
+ {
+ "no": 1537,
+ "code": "1F410",
+ "char": "🐐",
+ "name": "goat"
+ },
+ {
+ "no": 1538,
+ "code": "1F42A",
+ "char": "🐪",
+ "name": "camel"
+ },
+ {
+ "no": 1539,
+ "code": "1F42B",
+ "char": "🐫",
+ "name": "two-hump camel"
+ },
+ {
+ "no": 1540,
+ "code": "1F992",
+ "char": "🦒",
+ "name": "⊛ giraffe"
+ },
+ {
+ "no": 1541,
+ "code": "1F418",
+ "char": "🐘",
+ "name": "elephant"
+ },
+ {
+ "no": 1542,
+ "code": "1F98F",
+ "char": "🦏",
+ "name": "rhinoceros"
+ },
+ {
+ "no": 1543,
+ "code": "1F42D",
+ "char": "🐭",
+ "name": "mouse face"
+ },
+ {
+ "no": 1544,
+ "code": "1F401",
+ "char": "🐁",
+ "name": "mouse"
+ },
+ {
+ "no": 1545,
+ "code": "1F400",
+ "char": "🐀",
+ "name": "rat"
+ },
+ {
+ "no": 1546,
+ "code": "1F439",
+ "char": "🐹",
+ "name": "hamster face"
+ },
+ {
+ "no": 1547,
+ "code": "1F430",
+ "char": "🐰",
+ "name": "rabbit face"
+ },
+ {
+ "no": 1548,
+ "code": "1F407",
+ "char": "🐇",
+ "name": "rabbit"
+ },
+ {
+ "no": 1549,
+ "code": "1F43F",
+ "char": "🐿",
+ "name": "chipmunk"
+ },
+ {
+ "no": 1550,
+ "code": "1F994",
+ "char": "🦔",
+ "name": "⊛ hedgehog"
+ },
+ {
+ "no": 1551,
+ "code": "1F987",
+ "char": "🦇",
+ "name": "bat"
+ },
+ {
+ "no": 1552,
+ "code": "1F43B",
+ "char": "🐻",
+ "name": "bear face"
+ },
+ {
+ "no": 1553,
+ "code": "1F428",
+ "char": "🐨",
+ "name": "koala"
+ },
+ {
+ "no": 1554,
+ "code": "1F43C",
+ "char": "🐼",
+ "name": "panda face"
+ },
+ {
+ "no": 1555,
+ "code": "1F43E",
+ "char": "🐾",
+ "name": "paw prints"
+ },
+ {
+ "no": 1556,
+ "code": "1F983",
+ "char": "🦃",
+ "name": "turkey"
+ },
+ {
+ "no": 1557,
+ "code": "1F414",
+ "char": "🐔",
+ "name": "chicken"
+ },
+ {
+ "no": 1558,
+ "code": "1F413",
+ "char": "🐓",
+ "name": "rooster"
+ },
+ {
+ "no": 1559,
+ "code": "1F423",
+ "char": "🐣",
+ "name": "hatching chick"
+ },
+ {
+ "no": 1560,
+ "code": "1F424",
+ "char": "🐤",
+ "name": "baby chick"
+ },
+ {
+ "no": 1561,
+ "code": "1F425",
+ "char": "🐥",
+ "name": "front-facing baby chick"
+ },
+ {
+ "no": 1562,
+ "code": "1F426",
+ "char": "🐦",
+ "name": "bird"
+ },
+ {
+ "no": 1563,
+ "code": "1F427",
+ "char": "🐧",
+ "name": "penguin"
+ },
+ {
+ "no": 1564,
+ "code": "1F54A",
+ "char": "🕊",
+ "name": "dove"
+ },
+ {
+ "no": 1565,
+ "code": "1F985",
+ "char": "🦅",
+ "name": "eagle"
+ },
+ {
+ "no": 1566,
+ "code": "1F986",
+ "char": "🦆",
+ "name": "duck"
+ },
+ {
+ "no": 1567,
+ "code": "1F989",
+ "char": "🦉",
+ "name": "owl"
+ },
+ {
+ "no": 1568,
+ "code": "1F438",
+ "char": "🐸",
+ "name": "frog face"
+ },
+ {
+ "no": 1569,
+ "code": "1F40A",
+ "char": "🐊",
+ "name": "crocodile"
+ },
+ {
+ "no": 1570,
+ "code": "1F422",
+ "char": "🐢",
+ "name": "turtle"
+ },
+ {
+ "no": 1571,
+ "code": "1F98E",
+ "char": "🦎",
+ "name": "lizard"
+ },
+ {
+ "no": 1572,
+ "code": "1F40D",
+ "char": "🐍",
+ "name": "snake"
+ },
+ {
+ "no": 1573,
+ "code": "1F432",
+ "char": "🐲",
+ "name": "dragon face"
+ },
+ {
+ "no": 1574,
+ "code": "1F409",
+ "char": "🐉",
+ "name": "dragon"
+ },
+ {
+ "no": 1575,
+ "code": "1F995",
+ "char": "🦕",
+ "name": "⊛ sauropod"
+ },
+ {
+ "no": 1576,
+ "code": "1F996",
+ "char": "🦖",
+ "name": "⊛ T-Rex"
+ },
+ {
+ "no": 1577,
+ "code": "1F433",
+ "char": "🐳",
+ "name": "spouting whale"
+ },
+ {
+ "no": 1578,
+ "code": "1F40B",
+ "char": "🐋",
+ "name": "whale"
+ },
+ {
+ "no": 1579,
+ "code": "1F42C",
+ "char": "🐬",
+ "name": "dolphin"
+ },
+ {
+ "no": 1580,
+ "code": "1F41F",
+ "char": "🐟",
+ "name": "fish"
+ },
+ {
+ "no": 1581,
+ "code": "1F420",
+ "char": "🐠",
+ "name": "tropical fish"
+ },
+ {
+ "no": 1582,
+ "code": "1F421",
+ "char": "🐡",
+ "name": "blowfish"
+ },
+ {
+ "no": 1583,
+ "code": "1F988",
+ "char": "🦈",
+ "name": "shark"
+ },
+ {
+ "no": 1584,
+ "code": "1F419",
+ "char": "🐙",
+ "name": "octopus"
+ },
+ {
+ "no": 1585,
+ "code": "1F41A",
+ "char": "🐚",
+ "name": "spiral shell"
+ },
+ {
+ "no": 1586,
+ "code": "1F980",
+ "char": "🦀",
+ "name": "crab"
+ },
+ {
+ "no": 1587,
+ "code": "1F990",
+ "char": "🦐",
+ "name": "shrimp"
+ },
+ {
+ "no": 1588,
+ "code": "1F991",
+ "char": "🦑",
+ "name": "squid"
+ },
+ {
+ "no": 1589,
+ "code": "1F40C",
+ "char": "🐌",
+ "name": "snail"
+ },
+ {
+ "no": 1590,
+ "code": "1F98B",
+ "char": "🦋",
+ "name": "butterfly"
+ },
+ {
+ "no": 1591,
+ "code": "1F41B",
+ "char": "🐛",
+ "name": "bug"
+ },
+ {
+ "no": 1592,
+ "code": "1F41C",
+ "char": "🐜",
+ "name": "ant"
+ },
+ {
+ "no": 1593,
+ "code": "1F41D",
+ "char": "🐝",
+ "name": "honeybee"
+ },
+ {
+ "no": 1594,
+ "code": "1F41E",
+ "char": "🐞",
+ "name": "lady beetle"
+ },
+ {
+ "no": 1595,
+ "code": "1F997",
+ "char": "🦗",
+ "name": "⊛ cricket"
+ },
+ {
+ "no": 1596,
+ "code": "1F577",
+ "char": "🕷",
+ "name": "spider"
+ },
+ {
+ "no": 1597,
+ "code": "1F578",
+ "char": "🕸",
+ "name": "spider web"
+ },
+ {
+ "no": 1598,
+ "code": "1F982",
+ "char": "🦂",
+ "name": "scorpion"
+ },
+ {
+ "no": 1599,
+ "code": "1F490",
+ "char": "💐",
+ "name": "bouquet"
+ },
+ {
+ "no": 1600,
+ "code": "1F338",
+ "char": "🌸",
+ "name": "cherry blossom"
+ },
+ {
+ "no": 1601,
+ "code": "1F4AE",
+ "char": "💮",
+ "name": "white flower"
+ },
+ {
+ "no": 1602,
+ "code": "1F3F5",
+ "char": "🏵",
+ "name": "rosette"
+ },
+ {
+ "no": 1603,
+ "code": "1F339",
+ "char": "🌹",
+ "name": "rose"
+ },
+ {
+ "no": 1604,
+ "code": "1F940",
+ "char": "🥀",
+ "name": "wilted flower"
+ },
+ {
+ "no": 1605,
+ "code": "1F33A",
+ "char": "🌺",
+ "name": "hibiscus"
+ },
+ {
+ "no": 1606,
+ "code": "1F33B",
+ "char": "🌻",
+ "name": "sunflower"
+ },
+ {
+ "no": 1607,
+ "code": "1F33C",
+ "char": "🌼",
+ "name": "blossom"
+ },
+ {
+ "no": 1608,
+ "code": "1F337",
+ "char": "🌷",
+ "name": "tulip"
+ },
+ {
+ "no": 1609,
+ "code": "1F331",
+ "char": "🌱",
+ "name": "seedling"
+ },
+ {
+ "no": 1610,
+ "code": "1F332",
+ "char": "🌲",
+ "name": "evergreen tree"
+ },
+ {
+ "no": 1611,
+ "code": "1F333",
+ "char": "🌳",
+ "name": "deciduous tree"
+ },
+ {
+ "no": 1612,
+ "code": "1F334",
+ "char": "🌴",
+ "name": "palm tree"
+ },
+ {
+ "no": 1613,
+ "code": "1F335",
+ "char": "🌵",
+ "name": "cactus"
+ },
+ {
+ "no": 1614,
+ "code": "1F33E",
+ "char": "🌾",
+ "name": "sheaf of rice"
+ },
+ {
+ "no": 1615,
+ "code": "1F33F",
+ "char": "🌿",
+ "name": "herb"
+ },
+ {
+ "no": 1616,
+ "code": "2618",
+ "char": "☘",
+ "name": "shamrock"
+ },
+ {
+ "no": 1617,
+ "code": "1F340",
+ "char": "🍀",
+ "name": "four leaf clover"
+ },
+ {
+ "no": 1618,
+ "code": "1F341",
+ "char": "🍁",
+ "name": "maple leaf"
+ },
+ {
+ "no": 1619,
+ "code": "1F342",
+ "char": "🍂",
+ "name": "fallen leaf"
+ },
+ {
+ "no": 1620,
+ "code": "1F343",
+ "char": "🍃",
+ "name": "leaf fluttering in wind"
+ },
+ {
+ "no": 1621,
+ "code": "1F347",
+ "char": "🍇",
+ "name": "grapes"
+ },
+ {
+ "no": 1622,
+ "code": "1F348",
+ "char": "🍈",
+ "name": "melon"
+ },
+ {
+ "no": 1623,
+ "code": "1F349",
+ "char": "🍉",
+ "name": "watermelon"
+ },
+ {
+ "no": 1624,
+ "code": "1F34A",
+ "char": "🍊",
+ "name": "tangerine"
+ },
+ {
+ "no": 1625,
+ "code": "1F34B",
+ "char": "🍋",
+ "name": "lemon"
+ },
+ {
+ "no": 1626,
+ "code": "1F34C",
+ "char": "🍌",
+ "name": "banana"
+ },
+ {
+ "no": 1627,
+ "code": "1F34D",
+ "char": "🍍",
+ "name": "pineapple"
+ },
+ {
+ "no": 1628,
+ "code": "1F34E",
+ "char": "🍎",
+ "name": "red apple"
+ },
+ {
+ "no": 1629,
+ "code": "1F34F",
+ "char": "🍏",
+ "name": "green apple"
+ },
+ {
+ "no": 1630,
+ "code": "1F350",
+ "char": "🍐",
+ "name": "pear"
+ },
+ {
+ "no": 1631,
+ "code": "1F351",
+ "char": "🍑",
+ "name": "peach"
+ },
+ {
+ "no": 1632,
+ "code": "1F352",
+ "char": "🍒",
+ "name": "cherries"
+ },
+ {
+ "no": 1633,
+ "code": "1F353",
+ "char": "🍓",
+ "name": "strawberry"
+ },
+ {
+ "no": 1634,
+ "code": "1F95D",
+ "char": "🥝",
+ "name": "kiwi fruit"
+ },
+ {
+ "no": 1635,
+ "code": "1F345",
+ "char": "🍅",
+ "name": "tomato"
+ },
+ {
+ "no": 1636,
+ "code": "1F965",
+ "char": "🥥",
+ "name": "⊛ coconut"
+ },
+ {
+ "no": 1637,
+ "code": "1F951",
+ "char": "🥑",
+ "name": "avocado"
+ },
+ {
+ "no": 1638,
+ "code": "1F346",
+ "char": "🍆",
+ "name": "eggplant"
+ },
+ {
+ "no": 1639,
+ "code": "1F954",
+ "char": "🥔",
+ "name": "potato"
+ },
+ {
+ "no": 1640,
+ "code": "1F955",
+ "char": "🥕",
+ "name": "carrot"
+ },
+ {
+ "no": 1641,
+ "code": "1F33D",
+ "char": "🌽",
+ "name": "ear of corn"
+ },
+ {
+ "no": 1642,
+ "code": "1F336",
+ "char": "🌶",
+ "name": "hot pepper"
+ },
+ {
+ "no": 1643,
+ "code": "1F952",
+ "char": "🥒",
+ "name": "cucumber"
+ },
+ {
+ "no": 1644,
+ "code": "1F966",
+ "char": "🥦",
+ "name": "⊛ broccoli"
+ },
+ {
+ "no": 1645,
+ "code": "1F344",
+ "char": "🍄",
+ "name": "mushroom"
+ },
+ {
+ "no": 1646,
+ "code": "1F95C",
+ "char": "🥜",
+ "name": "peanuts"
+ },
+ {
+ "no": 1647,
+ "code": "1F330",
+ "char": "🌰",
+ "name": "chestnut"
+ },
+ {
+ "no": 1648,
+ "code": "1F35E",
+ "char": "🍞",
+ "name": "bread"
+ },
+ {
+ "no": 1649,
+ "code": "1F950",
+ "char": "🥐",
+ "name": "croissant"
+ },
+ {
+ "no": 1650,
+ "code": "1F956",
+ "char": "🥖",
+ "name": "baguette bread"
+ },
+ {
+ "no": 1651,
+ "code": "1F968",
+ "char": "🥨",
+ "name": "⊛ pretzel"
+ },
+ {
+ "no": 1652,
+ "code": "1F95E",
+ "char": "🥞",
+ "name": "pancakes"
+ },
+ {
+ "no": 1653,
+ "code": "1F9C0",
+ "char": "🧀",
+ "name": "cheese wedge"
+ },
+ {
+ "no": 1654,
+ "code": "1F356",
+ "char": "🍖",
+ "name": "meat on bone"
+ },
+ {
+ "no": 1655,
+ "code": "1F357",
+ "char": "🍗",
+ "name": "poultry leg"
+ },
+ {
+ "no": 1656,
+ "code": "1F969",
+ "char": "🥩",
+ "name": "⊛ cut of meat"
+ },
+ {
+ "no": 1657,
+ "code": "1F953",
+ "char": "🥓",
+ "name": "bacon"
+ },
+ {
+ "no": 1658,
+ "code": "1F354",
+ "char": "🍔",
+ "name": "hamburger"
+ },
+ {
+ "no": 1659,
+ "code": "1F35F",
+ "char": "🍟",
+ "name": "french fries"
+ },
+ {
+ "no": 1660,
+ "code": "1F355",
+ "char": "🍕",
+ "name": "pizza"
+ },
+ {
+ "no": 1661,
+ "code": "1F32D",
+ "char": "🌭",
+ "name": "hot dog"
+ },
+ {
+ "no": 1662,
+ "code": "1F96A",
+ "char": "🥪",
+ "name": "⊛ sandwich"
+ },
+ {
+ "no": 1663,
+ "code": "1F32E",
+ "char": "🌮",
+ "name": "taco"
+ },
+ {
+ "no": 1664,
+ "code": "1F32F",
+ "char": "🌯",
+ "name": "burrito"
+ },
+ {
+ "no": 1665,
+ "code": "1F959",
+ "char": "🥙",
+ "name": "stuffed flatbread"
+ },
+ {
+ "no": 1666,
+ "code": "1F95A",
+ "char": "🥚",
+ "name": "egg"
+ },
+ {
+ "no": 1667,
+ "code": "1F373",
+ "char": "🍳",
+ "name": "cooking"
+ },
+ {
+ "no": 1668,
+ "code": "1F958",
+ "char": "🥘",
+ "name": "shallow pan of food"
+ },
+ {
+ "no": 1669,
+ "code": "1F372",
+ "char": "🍲",
+ "name": "pot of food"
+ },
+ {
+ "no": 1670,
+ "code": "1F963",
+ "char": "🥣",
+ "name": "⊛ bowl with spoon"
+ },
+ {
+ "no": 1671,
+ "code": "1F957",
+ "char": "🥗",
+ "name": "green salad"
+ },
+ {
+ "no": 1672,
+ "code": "1F37F",
+ "char": "🍿",
+ "name": "popcorn"
+ },
+ {
+ "no": 1673,
+ "code": "1F96B",
+ "char": "🥫",
+ "name": "⊛ canned food"
+ },
+ {
+ "no": 1674,
+ "code": "1F371",
+ "char": "🍱",
+ "name": "bento box"
+ },
+ {
+ "no": 1675,
+ "code": "1F358",
+ "char": "🍘",
+ "name": "rice cracker"
+ },
+ {
+ "no": 1676,
+ "code": "1F359",
+ "char": "🍙",
+ "name": "rice ball"
+ },
+ {
+ "no": 1677,
+ "code": "1F35A",
+ "char": "🍚",
+ "name": "cooked rice"
+ },
+ {
+ "no": 1678,
+ "code": "1F35B",
+ "char": "🍛",
+ "name": "curry rice"
+ },
+ {
+ "no": 1679,
+ "code": "1F35C",
+ "char": "🍜",
+ "name": "steaming bowl"
+ },
+ {
+ "no": 1680,
+ "code": "1F35D",
+ "char": "🍝",
+ "name": "spaghetti"
+ },
+ {
+ "no": 1681,
+ "code": "1F360",
+ "char": "🍠",
+ "name": "roasted sweet potato"
+ },
+ {
+ "no": 1682,
+ "code": "1F362",
+ "char": "🍢",
+ "name": "oden"
+ },
+ {
+ "no": 1683,
+ "code": "1F363",
+ "char": "🍣",
+ "name": "sushi"
+ },
+ {
+ "no": 1684,
+ "code": "1F364",
+ "char": "🍤",
+ "name": "fried shrimp"
+ },
+ {
+ "no": 1685,
+ "code": "1F365",
+ "char": "🍥",
+ "name": "fish cake with swirl"
+ },
+ {
+ "no": 1686,
+ "code": "1F361",
+ "char": "🍡",
+ "name": "dango"
+ },
+ {
+ "no": 1687,
+ "code": "1F95F",
+ "char": "🥟",
+ "name": "⊛ dumpling"
+ },
+ {
+ "no": 1688,
+ "code": "1F960",
+ "char": "🥠",
+ "name": "⊛ fortune cookie"
+ },
+ {
+ "no": 1689,
+ "code": "1F961",
+ "char": "🥡",
+ "name": "⊛ takeout box"
+ },
+ {
+ "no": 1690,
+ "code": "1F366",
+ "char": "🍦",
+ "name": "soft ice cream"
+ },
+ {
+ "no": 1691,
+ "code": "1F367",
+ "char": "🍧",
+ "name": "shaved ice"
+ },
+ {
+ "no": 1692,
+ "code": "1F368",
+ "char": "🍨",
+ "name": "ice cream"
+ },
+ {
+ "no": 1693,
+ "code": "1F369",
+ "char": "🍩",
+ "name": "doughnut"
+ },
+ {
+ "no": 1694,
+ "code": "1F36A",
+ "char": "🍪",
+ "name": "cookie"
+ },
+ {
+ "no": 1695,
+ "code": "1F382",
+ "char": "🎂",
+ "name": "birthday cake"
+ },
+ {
+ "no": 1696,
+ "code": "1F370",
+ "char": "🍰",
+ "name": "shortcake"
+ },
+ {
+ "no": 1697,
+ "code": "1F967",
+ "char": "🥧",
+ "name": "⊛ pie"
+ },
+ {
+ "no": 1698,
+ "code": "1F36B",
+ "char": "🍫",
+ "name": "chocolate bar"
+ },
+ {
+ "no": 1699,
+ "code": "1F36C",
+ "char": "🍬",
+ "name": "candy"
+ },
+ {
+ "no": 1700,
+ "code": "1F36D",
+ "char": "🍭",
+ "name": "lollipop"
+ },
+ {
+ "no": 1701,
+ "code": "1F36E",
+ "char": "🍮",
+ "name": "custard"
+ },
+ {
+ "no": 1702,
+ "code": "1F36F",
+ "char": "🍯",
+ "name": "honey pot"
+ },
+ {
+ "no": 1703,
+ "code": "1F37C",
+ "char": "🍼",
+ "name": "baby bottle"
+ },
+ {
+ "no": 1704,
+ "code": "1F95B",
+ "char": "🥛",
+ "name": "glass of milk"
+ },
+ {
+ "no": 1705,
+ "code": "2615",
+ "char": "☕",
+ "name": "hot beverage"
+ },
+ {
+ "no": 1706,
+ "code": "1F375",
+ "char": "🍵",
+ "name": "teacup without handle"
+ },
+ {
+ "no": 1707,
+ "code": "1F376",
+ "char": "🍶",
+ "name": "sake"
+ },
+ {
+ "no": 1708,
+ "code": "1F37E",
+ "char": "🍾",
+ "name": "bottle with popping cork"
+ },
+ {
+ "no": 1709,
+ "code": "1F377",
+ "char": "🍷",
+ "name": "wine glass"
+ },
+ {
+ "no": 1710,
+ "code": "1F378",
+ "char": "🍸",
+ "name": "cocktail glass"
+ },
+ {
+ "no": 1711,
+ "code": "1F379",
+ "char": "🍹",
+ "name": "tropical drink"
+ },
+ {
+ "no": 1712,
+ "code": "1F37A",
+ "char": "🍺",
+ "name": "beer mug"
+ },
+ {
+ "no": 1713,
+ "code": "1F37B",
+ "char": "🍻",
+ "name": "clinking beer mugs"
+ },
+ {
+ "no": 1714,
+ "code": "1F942",
+ "char": "🥂",
+ "name": "clinking glasses"
+ },
+ {
+ "no": 1715,
+ "code": "1F943",
+ "char": "🥃",
+ "name": "tumbler glass"
+ },
+ {
+ "no": 1716,
+ "code": "1F964",
+ "char": "🥤",
+ "name": "⊛ cup with straw"
+ },
+ {
+ "no": 1717,
+ "code": "1F962",
+ "char": "🥢",
+ "name": "⊛ chopsticks"
+ },
+ {
+ "no": 1718,
+ "code": "1F37D",
+ "char": "🍽",
+ "name": "fork and knife with plate"
+ },
+ {
+ "no": 1719,
+ "code": "1F374",
+ "char": "🍴",
+ "name": "fork and knife"
+ },
+ {
+ "no": 1720,
+ "code": "1F944",
+ "char": "🥄",
+ "name": "spoon"
+ },
+ {
+ "no": 1721,
+ "code": "1F52A",
+ "char": "🔪",
+ "name": "kitchen knife"
+ },
+ {
+ "no": 1722,
+ "code": "1F3FA",
+ "char": "🏺",
+ "name": "amphora"
+ },
+ {
+ "no": 1723,
+ "code": "1F30D",
+ "char": "🌍",
+ "name": "globe showing Europe-Africa"
+ },
+ {
+ "no": 1724,
+ "code": "1F30E",
+ "char": "🌎",
+ "name": "globe showing Americas"
+ },
+ {
+ "no": 1725,
+ "code": "1F30F",
+ "char": "🌏",
+ "name": "globe showing Asia-Australia"
+ },
+ {
+ "no": 1726,
+ "code": "1F310",
+ "char": "🌐",
+ "name": "globe with meridians"
+ },
+ {
+ "no": 1727,
+ "code": "1F5FA",
+ "char": "🗺",
+ "name": "world map"
+ },
+ {
+ "no": 1728,
+ "code": "1F5FE",
+ "char": "🗾",
+ "name": "map of Japan"
+ },
+ {
+ "no": 1729,
+ "code": "1F3D4",
+ "char": "🏔",
+ "name": "snow-capped mountain"
+ },
+ {
+ "no": 1730,
+ "code": "26F0",
+ "char": "⛰",
+ "name": "mountain"
+ },
+ {
+ "no": 1731,
+ "code": "1F30B",
+ "char": "🌋",
+ "name": "volcano"
+ },
+ {
+ "no": 1732,
+ "code": "1F5FB",
+ "char": "🗻",
+ "name": "mount fuji"
+ },
+ {
+ "no": 1733,
+ "code": "1F3D5",
+ "char": "🏕",
+ "name": "camping"
+ },
+ {
+ "no": 1734,
+ "code": "1F3D6",
+ "char": "🏖",
+ "name": "beach with umbrella"
+ },
+ {
+ "no": 1735,
+ "code": "1F3DC",
+ "char": "🏜",
+ "name": "desert"
+ },
+ {
+ "no": 1736,
+ "code": "1F3DD",
+ "char": "🏝",
+ "name": "desert island"
+ },
+ {
+ "no": 1737,
+ "code": "1F3DE",
+ "char": "🏞",
+ "name": "national park"
+ },
+ {
+ "no": 1738,
+ "code": "1F3DF",
+ "char": "🏟",
+ "name": "stadium"
+ },
+ {
+ "no": 1739,
+ "code": "1F3DB",
+ "char": "🏛",
+ "name": "classical building"
+ },
+ {
+ "no": 1740,
+ "code": "1F3D7",
+ "char": "🏗",
+ "name": "building construction"
+ },
+ {
+ "no": 1741,
+ "code": "1F3D8",
+ "char": "🏘",
+ "name": "houses"
+ },
+ {
+ "no": 1742,
+ "code": "1F3D9",
+ "char": "🏙",
+ "name": "cityscape"
+ },
+ {
+ "no": 1743,
+ "code": "1F3DA",
+ "char": "🏚",
+ "name": "derelict house"
+ },
+ {
+ "no": 1744,
+ "code": "1F3E0",
+ "char": "🏠",
+ "name": "house"
+ },
+ {
+ "no": 1745,
+ "code": "1F3E1",
+ "char": "🏡",
+ "name": "house with garden"
+ },
+ {
+ "no": 1746,
+ "code": "1F3E2",
+ "char": "🏢",
+ "name": "office building"
+ },
+ {
+ "no": 1747,
+ "code": "1F3E3",
+ "char": "🏣",
+ "name": "Japanese post office"
+ },
+ {
+ "no": 1748,
+ "code": "1F3E4",
+ "char": "🏤",
+ "name": "post office"
+ },
+ {
+ "no": 1749,
+ "code": "1F3E5",
+ "char": "🏥",
+ "name": "hospital"
+ },
+ {
+ "no": 1750,
+ "code": "1F3E6",
+ "char": "🏦",
+ "name": "bank"
+ },
+ {
+ "no": 1751,
+ "code": "1F3E8",
+ "char": "🏨",
+ "name": "hotel"
+ },
+ {
+ "no": 1752,
+ "code": "1F3E9",
+ "char": "🏩",
+ "name": "love hotel"
+ },
+ {
+ "no": 1753,
+ "code": "1F3EA",
+ "char": "🏪",
+ "name": "convenience store"
+ },
+ {
+ "no": 1754,
+ "code": "1F3EB",
+ "char": "🏫",
+ "name": "school"
+ },
+ {
+ "no": 1755,
+ "code": "1F3EC",
+ "char": "🏬",
+ "name": "department store"
+ },
+ {
+ "no": 1756,
+ "code": "1F3ED",
+ "char": "🏭",
+ "name": "factory"
+ },
+ {
+ "no": 1757,
+ "code": "1F3EF",
+ "char": "🏯",
+ "name": "Japanese castle"
+ },
+ {
+ "no": 1758,
+ "code": "1F3F0",
+ "char": "🏰",
+ "name": "castle"
+ },
+ {
+ "no": 1759,
+ "code": "1F492",
+ "char": "💒",
+ "name": "wedding"
+ },
+ {
+ "no": 1760,
+ "code": "1F5FC",
+ "char": "🗼",
+ "name": "Tokyo tower"
+ },
+ {
+ "no": 1761,
+ "code": "1F5FD",
+ "char": "🗽",
+ "name": "Statue of Liberty"
+ },
+ {
+ "no": 1762,
+ "code": "26EA",
+ "char": "⛪",
+ "name": "church"
+ },
+ {
+ "no": 1763,
+ "code": "1F54C",
+ "char": "🕌",
+ "name": "mosque"
+ },
+ {
+ "no": 1764,
+ "code": "1F54D",
+ "char": "🕍",
+ "name": "synagogue"
+ },
+ {
+ "no": 1765,
+ "code": "26E9",
+ "char": "⛩",
+ "name": "shinto shrine"
+ },
+ {
+ "no": 1766,
+ "code": "1F54B",
+ "char": "🕋",
+ "name": "kaaba"
+ },
+ {
+ "no": 1767,
+ "code": "26F2",
+ "char": "⛲",
+ "name": "fountain"
+ },
+ {
+ "no": 1768,
+ "code": "26FA",
+ "char": "⛺",
+ "name": "tent"
+ },
+ {
+ "no": 1769,
+ "code": "1F301",
+ "char": "🌁",
+ "name": "foggy"
+ },
+ {
+ "no": 1770,
+ "code": "1F303",
+ "char": "🌃",
+ "name": "night with stars"
+ },
+ {
+ "no": 1771,
+ "code": "1F304",
+ "char": "🌄",
+ "name": "sunrise over mountains"
+ },
+ {
+ "no": 1772,
+ "code": "1F305",
+ "char": "🌅",
+ "name": "sunrise"
+ },
+ {
+ "no": 1773,
+ "code": "1F306",
+ "char": "🌆",
+ "name": "cityscape at dusk"
+ },
+ {
+ "no": 1774,
+ "code": "1F307",
+ "char": "🌇",
+ "name": "sunset"
+ },
+ {
+ "no": 1775,
+ "code": "1F309",
+ "char": "🌉",
+ "name": "bridge at night"
+ },
+ {
+ "no": 1776,
+ "code": "2668",
+ "char": "♨",
+ "name": "hot springs"
+ },
+ {
+ "no": 1777,
+ "code": "1F30C",
+ "char": "🌌",
+ "name": "milky way"
+ },
+ {
+ "no": 1778,
+ "code": "1F3A0",
+ "char": "🎠",
+ "name": "carousel horse"
+ },
+ {
+ "no": 1779,
+ "code": "1F3A1",
+ "char": "🎡",
+ "name": "ferris wheel"
+ },
+ {
+ "no": 1780,
+ "code": "1F3A2",
+ "char": "🎢",
+ "name": "roller coaster"
+ },
+ {
+ "no": 1781,
+ "code": "1F488",
+ "char": "💈",
+ "name": "barber pole"
+ },
+ {
+ "no": 1782,
+ "code": "1F3AA",
+ "char": "🎪",
+ "name": "circus tent"
+ },
+ {
+ "no": 1783,
+ "code": "1F3AD",
+ "char": "🎭",
+ "name": "performing arts"
+ },
+ {
+ "no": 1784,
+ "code": "1F5BC",
+ "char": "🖼",
+ "name": "framed picture"
+ },
+ {
+ "no": 1785,
+ "code": "1F3A8",
+ "char": "🎨",
+ "name": "artist palette"
+ },
+ {
+ "no": 1786,
+ "code": "1F3B0",
+ "char": "🎰",
+ "name": "slot machine"
+ },
+ {
+ "no": 1787,
+ "code": "1F682",
+ "char": "🚂",
+ "name": "locomotive"
+ },
+ {
+ "no": 1788,
+ "code": "1F683",
+ "char": "🚃",
+ "name": "railway car"
+ },
+ {
+ "no": 1789,
+ "code": "1F684",
+ "char": "🚄",
+ "name": "high-speed train"
+ },
+ {
+ "no": 1790,
+ "code": "1F685",
+ "char": "🚅",
+ "name": "bullet train"
+ },
+ {
+ "no": 1791,
+ "code": "1F686",
+ "char": "🚆",
+ "name": "train"
+ },
+ {
+ "no": 1792,
+ "code": "1F687",
+ "char": "🚇",
+ "name": "metro"
+ },
+ {
+ "no": 1793,
+ "code": "1F688",
+ "char": "🚈",
+ "name": "light rail"
+ },
+ {
+ "no": 1794,
+ "code": "1F689",
+ "char": "🚉",
+ "name": "station"
+ },
+ {
+ "no": 1795,
+ "code": "1F68A",
+ "char": "🚊",
+ "name": "tram"
+ },
+ {
+ "no": 1796,
+ "code": "1F69D",
+ "char": "🚝",
+ "name": "monorail"
+ },
+ {
+ "no": 1797,
+ "code": "1F69E",
+ "char": "🚞",
+ "name": "mountain railway"
+ },
+ {
+ "no": 1798,
+ "code": "1F68B",
+ "char": "🚋",
+ "name": "tram car"
+ },
+ {
+ "no": 1799,
+ "code": "1F68C",
+ "char": "🚌",
+ "name": "bus"
+ },
+ {
+ "no": 1800,
+ "code": "1F68D",
+ "char": "🚍",
+ "name": "oncoming bus"
+ },
+ {
+ "no": 1801,
+ "code": "1F68E",
+ "char": "🚎",
+ "name": "trolleybus"
+ },
+ {
+ "no": 1802,
+ "code": "1F690",
+ "char": "🚐",
+ "name": "minibus"
+ },
+ {
+ "no": 1803,
+ "code": "1F691",
+ "char": "🚑",
+ "name": "ambulance"
+ },
+ {
+ "no": 1804,
+ "code": "1F692",
+ "char": "🚒",
+ "name": "fire engine"
+ },
+ {
+ "no": 1805,
+ "code": "1F693",
+ "char": "🚓",
+ "name": "police car"
+ },
+ {
+ "no": 1806,
+ "code": "1F694",
+ "char": "🚔",
+ "name": "oncoming police car"
+ },
+ {
+ "no": 1807,
+ "code": "1F695",
+ "char": "🚕",
+ "name": "taxi"
+ },
+ {
+ "no": 1808,
+ "code": "1F696",
+ "char": "🚖",
+ "name": "oncoming taxi"
+ },
+ {
+ "no": 1809,
+ "code": "1F697",
+ "char": "🚗",
+ "name": "automobile"
+ },
+ {
+ "no": 1810,
+ "code": "1F698",
+ "char": "🚘",
+ "name": "oncoming automobile"
+ },
+ {
+ "no": 1811,
+ "code": "1F699",
+ "char": "🚙",
+ "name": "sport utility vehicle"
+ },
+ {
+ "no": 1812,
+ "code": "1F69A",
+ "char": "🚚",
+ "name": "delivery truck"
+ },
+ {
+ "no": 1813,
+ "code": "1F69B",
+ "char": "🚛",
+ "name": "articulated lorry"
+ },
+ {
+ "no": 1814,
+ "code": "1F69C",
+ "char": "🚜",
+ "name": "tractor"
+ },
+ {
+ "no": 1815,
+ "code": "1F6B2",
+ "char": "🚲",
+ "name": "bicycle"
+ },
+ {
+ "no": 1816,
+ "code": "1F6F4",
+ "char": "🛴",
+ "name": "kick scooter"
+ },
+ {
+ "no": 1817,
+ "code": "1F6F5",
+ "char": "🛵",
+ "name": "motor scooter"
+ },
+ {
+ "no": 1818,
+ "code": "1F68F",
+ "char": "🚏",
+ "name": "bus stop"
+ },
+ {
+ "no": 1819,
+ "code": "1F6E3",
+ "char": "🛣",
+ "name": "motorway"
+ },
+ {
+ "no": 1820,
+ "code": "1F6E4",
+ "char": "🛤",
+ "name": "railway track"
+ },
+ {
+ "no": 1821,
+ "code": "26FD",
+ "char": "⛽",
+ "name": "fuel pump"
+ },
+ {
+ "no": 1822,
+ "code": "1F6A8",
+ "char": "🚨",
+ "name": "police car light"
+ },
+ {
+ "no": 1823,
+ "code": "1F6A5",
+ "char": "🚥",
+ "name": "horizontal traffic light"
+ },
+ {
+ "no": 1824,
+ "code": "1F6A6",
+ "char": "🚦",
+ "name": "vertical traffic light"
+ },
+ {
+ "no": 1825,
+ "code": "1F6A7",
+ "char": "🚧",
+ "name": "construction"
+ },
+ {
+ "no": 1826,
+ "code": "1F6D1",
+ "char": "🛑",
+ "name": "stop sign"
+ },
+ {
+ "no": 1827,
+ "code": "2693",
+ "char": "⚓",
+ "name": "anchor"
+ },
+ {
+ "no": 1828,
+ "code": "26F5",
+ "char": "⛵",
+ "name": "sailboat"
+ },
+ {
+ "no": 1829,
+ "code": "1F6F6",
+ "char": "🛶",
+ "name": "canoe"
+ },
+ {
+ "no": 1830,
+ "code": "1F6A4",
+ "char": "🚤",
+ "name": "speedboat"
+ },
+ {
+ "no": 1831,
+ "code": "1F6F3",
+ "char": "🛳",
+ "name": "passenger ship"
+ },
+ {
+ "no": 1832,
+ "code": "26F4",
+ "char": "⛴",
+ "name": "ferry"
+ },
+ {
+ "no": 1833,
+ "code": "1F6E5",
+ "char": "🛥",
+ "name": "motor boat"
+ },
+ {
+ "no": 1834,
+ "code": "1F6A2",
+ "char": "🚢",
+ "name": "ship"
+ },
+ {
+ "no": 1835,
+ "code": "2708",
+ "char": "✈",
+ "name": "airplane"
+ },
+ {
+ "no": 1836,
+ "code": "1F6E9",
+ "char": "🛩",
+ "name": "small airplane"
+ },
+ {
+ "no": 1837,
+ "code": "1F6EB",
+ "char": "🛫",
+ "name": "airplane departure"
+ },
+ {
+ "no": 1838,
+ "code": "1F6EC",
+ "char": "🛬",
+ "name": "airplane arrival"
+ },
+ {
+ "no": 1839,
+ "code": "1F4BA",
+ "char": "💺",
+ "name": "seat"
+ },
+ {
+ "no": 1840,
+ "code": "1F681",
+ "char": "🚁",
+ "name": "helicopter"
+ },
+ {
+ "no": 1841,
+ "code": "1F69F",
+ "char": "🚟",
+ "name": "suspension railway"
+ },
+ {
+ "no": 1842,
+ "code": "1F6A0",
+ "char": "🚠",
+ "name": "mountain cableway"
+ },
+ {
+ "no": 1843,
+ "code": "1F6A1",
+ "char": "🚡",
+ "name": "aerial tramway"
+ },
+ {
+ "no": 1844,
+ "code": "1F6F0",
+ "char": "🛰",
+ "name": "satellite"
+ },
+ {
+ "no": 1845,
+ "code": "1F680",
+ "char": "🚀",
+ "name": "rocket"
+ },
+ {
+ "no": 1846,
+ "code": "1F6F8",
+ "char": "🛸",
+ "name": "⊛ flying saucer"
+ },
+ {
+ "no": 1847,
+ "code": "1F6CE",
+ "char": "🛎",
+ "name": "bellhop bell"
+ },
+ {
+ "no": 1848,
+ "code": "1F6AA",
+ "char": "🚪",
+ "name": "door"
+ },
+ {
+ "no": 1849,
+ "code": "1F6CF",
+ "char": "🛏",
+ "name": "bed"
+ },
+ {
+ "no": 1850,
+ "code": "1F6CB",
+ "char": "🛋",
+ "name": "couch and lamp"
+ },
+ {
+ "no": 1851,
+ "code": "1F6BD",
+ "char": "🚽",
+ "name": "toilet"
+ },
+ {
+ "no": 1852,
+ "code": "1F6BF",
+ "char": "🚿",
+ "name": "shower"
+ },
+ {
+ "no": 1853,
+ "code": "1F6C1",
+ "char": "🛁",
+ "name": "bathtub"
+ },
+ {
+ "no": 1854,
+ "code": "231B",
+ "char": "⌛",
+ "name": "hourglass done"
+ },
+ {
+ "no": 1855,
+ "code": "23F3",
+ "char": "⏳",
+ "name": "hourglass not done"
+ },
+ {
+ "no": 1856,
+ "code": "231A",
+ "char": "⌚",
+ "name": "watch"
+ },
+ {
+ "no": 1857,
+ "code": "23F0",
+ "char": "⏰",
+ "name": "alarm clock"
+ },
+ {
+ "no": 1858,
+ "code": "23F1",
+ "char": "⏱",
+ "name": "stopwatch"
+ },
+ {
+ "no": 1859,
+ "code": "23F2",
+ "char": "⏲",
+ "name": "timer clock"
+ },
+ {
+ "no": 1860,
+ "code": "1F570",
+ "char": "🕰",
+ "name": "mantelpiece clock"
+ },
+ {
+ "no": 1861,
+ "code": "1F55B",
+ "char": "🕛",
+ "name": "twelve o’clock"
+ },
+ {
+ "no": 1862,
+ "code": "1F567",
+ "char": "🕧",
+ "name": "twelve-thirty"
+ },
+ {
+ "no": 1863,
+ "code": "1F550",
+ "char": "🕐",
+ "name": "one o’clock"
+ },
+ {
+ "no": 1864,
+ "code": "1F55C",
+ "char": "🕜",
+ "name": "one-thirty"
+ },
+ {
+ "no": 1865,
+ "code": "1F551",
+ "char": "🕑",
+ "name": "two o’clock"
+ },
+ {
+ "no": 1866,
+ "code": "1F55D",
+ "char": "🕝",
+ "name": "two-thirty"
+ },
+ {
+ "no": 1867,
+ "code": "1F552",
+ "char": "🕒",
+ "name": "three o’clock"
+ },
+ {
+ "no": 1868,
+ "code": "1F55E",
+ "char": "🕞",
+ "name": "three-thirty"
+ },
+ {
+ "no": 1869,
+ "code": "1F553",
+ "char": "🕓",
+ "name": "four o’clock"
+ },
+ {
+ "no": 1870,
+ "code": "1F55F",
+ "char": "🕟",
+ "name": "four-thirty"
+ },
+ {
+ "no": 1871,
+ "code": "1F554",
+ "char": "🕔",
+ "name": "five o’clock"
+ },
+ {
+ "no": 1872,
+ "code": "1F560",
+ "char": "🕠",
+ "name": "five-thirty"
+ },
+ {
+ "no": 1873,
+ "code": "1F555",
+ "char": "🕕",
+ "name": "six o’clock"
+ },
+ {
+ "no": 1874,
+ "code": "1F561",
+ "char": "🕡",
+ "name": "six-thirty"
+ },
+ {
+ "no": 1875,
+ "code": "1F556",
+ "char": "🕖",
+ "name": "seven o’clock"
+ },
+ {
+ "no": 1876,
+ "code": "1F562",
+ "char": "🕢",
+ "name": "seven-thirty"
+ },
+ {
+ "no": 1877,
+ "code": "1F557",
+ "char": "🕗",
+ "name": "eight o’clock"
+ },
+ {
+ "no": 1878,
+ "code": "1F563",
+ "char": "🕣",
+ "name": "eight-thirty"
+ },
+ {
+ "no": 1879,
+ "code": "1F558",
+ "char": "🕘",
+ "name": "nine o’clock"
+ },
+ {
+ "no": 1880,
+ "code": "1F564",
+ "char": "🕤",
+ "name": "nine-thirty"
+ },
+ {
+ "no": 1881,
+ "code": "1F559",
+ "char": "🕙",
+ "name": "ten o’clock"
+ },
+ {
+ "no": 1882,
+ "code": "1F565",
+ "char": "🕥",
+ "name": "ten-thirty"
+ },
+ {
+ "no": 1883,
+ "code": "1F55A",
+ "char": "🕚",
+ "name": "eleven o’clock"
+ },
+ {
+ "no": 1884,
+ "code": "1F566",
+ "char": "🕦",
+ "name": "eleven-thirty"
+ },
+ {
+ "no": 1885,
+ "code": "1F311",
+ "char": "🌑",
+ "name": "new moon"
+ },
+ {
+ "no": 1886,
+ "code": "1F312",
+ "char": "🌒",
+ "name": "waxing crescent moon"
+ },
+ {
+ "no": 1887,
+ "code": "1F313",
+ "char": "🌓",
+ "name": "first quarter moon"
+ },
+ {
+ "no": 1888,
+ "code": "1F314",
+ "char": "🌔",
+ "name": "waxing gibbous moon"
+ },
+ {
+ "no": 1889,
+ "code": "1F315",
+ "char": "🌕",
+ "name": "full moon"
+ },
+ {
+ "no": 1890,
+ "code": "1F316",
+ "char": "🌖",
+ "name": "waning gibbous moon"
+ },
+ {
+ "no": 1891,
+ "code": "1F317",
+ "char": "🌗",
+ "name": "last quarter moon"
+ },
+ {
+ "no": 1892,
+ "code": "1F318",
+ "char": "🌘",
+ "name": "waning crescent moon"
+ },
+ {
+ "no": 1893,
+ "code": "1F319",
+ "char": "🌙",
+ "name": "crescent moon"
+ },
+ {
+ "no": 1894,
+ "code": "1F31A",
+ "char": "🌚",
+ "name": "new moon face"
+ },
+ {
+ "no": 1895,
+ "code": "1F31B",
+ "char": "🌛",
+ "name": "first quarter moon face"
+ },
+ {
+ "no": 1896,
+ "code": "1F31C",
+ "char": "🌜",
+ "name": "last quarter moon face"
+ },
+ {
+ "no": 1897,
+ "code": "1F321",
+ "char": "🌡",
+ "name": "thermometer"
+ },
+ {
+ "no": 1898,
+ "code": "2600",
+ "char": "☀",
+ "name": "sun"
+ },
+ {
+ "no": 1899,
+ "code": "1F31D",
+ "char": "🌝",
+ "name": "full moon face"
+ },
+ {
+ "no": 1900,
+ "code": "1F31E",
+ "char": "🌞",
+ "name": "sun with face"
+ },
+ {
+ "no": 1901,
+ "code": "2B50",
+ "char": "⭐",
+ "name": "white medium star"
+ },
+ {
+ "no": 1902,
+ "code": "1F31F",
+ "char": "🌟",
+ "name": "glowing star"
+ },
+ {
+ "no": 1903,
+ "code": "1F320",
+ "char": "🌠",
+ "name": "shooting star"
+ },
+ {
+ "no": 1904,
+ "code": "2601",
+ "char": "☁",
+ "name": "cloud"
+ },
+ {
+ "no": 1905,
+ "code": "26C5",
+ "char": "⛅",
+ "name": "sun behind cloud"
+ },
+ {
+ "no": 1906,
+ "code": "26C8",
+ "char": "⛈",
+ "name": "cloud with lightning and rain"
+ },
+ {
+ "no": 1907,
+ "code": "1F324",
+ "char": "🌤",
+ "name": "sun behind small cloud"
+ },
+ {
+ "no": 1908,
+ "code": "1F325",
+ "char": "🌥",
+ "name": "sun behind large cloud"
+ },
+ {
+ "no": 1909,
+ "code": "1F326",
+ "char": "🌦",
+ "name": "sun behind rain cloud"
+ },
+ {
+ "no": 1910,
+ "code": "1F327",
+ "char": "🌧",
+ "name": "cloud with rain"
+ },
+ {
+ "no": 1911,
+ "code": "1F328",
+ "char": "🌨",
+ "name": "cloud with snow"
+ },
+ {
+ "no": 1912,
+ "code": "1F329",
+ "char": "🌩",
+ "name": "cloud with lightning"
+ },
+ {
+ "no": 1913,
+ "code": "1F32A",
+ "char": "🌪",
+ "name": "tornado"
+ },
+ {
+ "no": 1914,
+ "code": "1F32B",
+ "char": "🌫",
+ "name": "fog"
+ },
+ {
+ "no": 1915,
+ "code": "1F32C",
+ "char": "🌬",
+ "name": "wind face"
+ },
+ {
+ "no": 1916,
+ "code": "1F300",
+ "char": "🌀",
+ "name": "cyclone"
+ },
+ {
+ "no": 1917,
+ "code": "1F308",
+ "char": "🌈",
+ "name": "rainbow"
+ },
+ {
+ "no": 1918,
+ "code": "1F302",
+ "char": "🌂",
+ "name": "closed umbrella"
+ },
+ {
+ "no": 1919,
+ "code": "2602",
+ "char": "☂",
+ "name": "umbrella"
+ },
+ {
+ "no": 1920,
+ "code": "2614",
+ "char": "☔",
+ "name": "umbrella with rain drops"
+ },
+ {
+ "no": 1921,
+ "code": "26F1",
+ "char": "⛱",
+ "name": "umbrella on ground"
+ },
+ {
+ "no": 1922,
+ "code": "26A1",
+ "char": "⚡",
+ "name": "high voltage"
+ },
+ {
+ "no": 1923,
+ "code": "2744",
+ "char": "❄",
+ "name": "snowflake"
+ },
+ {
+ "no": 1924,
+ "code": "2603",
+ "char": "☃",
+ "name": "snowman"
+ },
+ {
+ "no": 1925,
+ "code": "26C4",
+ "char": "⛄",
+ "name": "snowman without snow"
+ },
+ {
+ "no": 1926,
+ "code": "2604",
+ "char": "☄",
+ "name": "comet"
+ },
+ {
+ "no": 1927,
+ "code": "1F525",
+ "char": "🔥",
+ "name": "fire"
+ },
+ {
+ "no": 1928,
+ "code": "1F4A7",
+ "char": "💧",
+ "name": "droplet"
+ },
+ {
+ "no": 1929,
+ "code": "1F30A",
+ "char": "🌊",
+ "name": "water wave"
+ },
+ {
+ "no": 1930,
+ "code": "1F383",
+ "char": "🎃",
+ "name": "jack-o-lantern"
+ },
+ {
+ "no": 1931,
+ "code": "1F384",
+ "char": "🎄",
+ "name": "Christmas tree"
+ },
+ {
+ "no": 1932,
+ "code": "1F386",
+ "char": "🎆",
+ "name": "fireworks"
+ },
+ {
+ "no": 1933,
+ "code": "1F387",
+ "char": "🎇",
+ "name": "sparkler"
+ },
+ {
+ "no": 1934,
+ "code": "2728",
+ "char": "✨",
+ "name": "sparkles"
+ },
+ {
+ "no": 1935,
+ "code": "1F388",
+ "char": "🎈",
+ "name": "balloon"
+ },
+ {
+ "no": 1936,
+ "code": "1F389",
+ "char": "🎉",
+ "name": "party popper"
+ },
+ {
+ "no": 1937,
+ "code": "1F38A",
+ "char": "🎊",
+ "name": "confetti ball"
+ },
+ {
+ "no": 1938,
+ "code": "1F38B",
+ "char": "🎋",
+ "name": "tanabata tree"
+ },
+ {
+ "no": 1939,
+ "code": "1F38D",
+ "char": "🎍",
+ "name": "pine decoration"
+ },
+ {
+ "no": 1940,
+ "code": "1F38E",
+ "char": "🎎",
+ "name": "Japanese dolls"
+ },
+ {
+ "no": 1941,
+ "code": "1F38F",
+ "char": "🎏",
+ "name": "carp streamer"
+ },
+ {
+ "no": 1942,
+ "code": "1F390",
+ "char": "🎐",
+ "name": "wind chime"
+ },
+ {
+ "no": 1943,
+ "code": "1F391",
+ "char": "🎑",
+ "name": "moon viewing ceremony"
+ },
+ {
+ "no": 1944,
+ "code": "1F380",
+ "char": "🎀",
+ "name": "ribbon"
+ },
+ {
+ "no": 1945,
+ "code": "1F381",
+ "char": "🎁",
+ "name": "wrapped gift"
+ },
+ {
+ "no": 1946,
+ "code": "1F397",
+ "char": "🎗",
+ "name": "reminder ribbon"
+ },
+ {
+ "no": 1947,
+ "code": "1F39F",
+ "char": "🎟",
+ "name": "admission tickets"
+ },
+ {
+ "no": 1948,
+ "code": "1F3AB",
+ "char": "🎫",
+ "name": "ticket"
+ },
+ {
+ "no": 1949,
+ "code": "1F396",
+ "char": "🎖",
+ "name": "military medal"
+ },
+ {
+ "no": 1950,
+ "code": "1F3C6",
+ "char": "🏆",
+ "name": "trophy"
+ },
+ {
+ "no": 1951,
+ "code": "1F3C5",
+ "char": "🏅",
+ "name": "sports medal"
+ },
+ {
+ "no": 1952,
+ "code": "1F947",
+ "char": "🥇",
+ "name": "1st place medal"
+ },
+ {
+ "no": 1953,
+ "code": "1F948",
+ "char": "🥈",
+ "name": "2nd place medal"
+ },
+ {
+ "no": 1954,
+ "code": "1F949",
+ "char": "🥉",
+ "name": "3rd place medal"
+ },
+ {
+ "no": 1955,
+ "code": "26BD",
+ "char": "⚽",
+ "name": "soccer ball"
+ },
+ {
+ "no": 1956,
+ "code": "26BE",
+ "char": "⚾",
+ "name": "baseball"
+ },
+ {
+ "no": 1957,
+ "code": "1F3C0",
+ "char": "🏀",
+ "name": "basketball"
+ },
+ {
+ "no": 1958,
+ "code": "1F3D0",
+ "char": "🏐",
+ "name": "volleyball"
+ },
+ {
+ "no": 1959,
+ "code": "1F3C8",
+ "char": "🏈",
+ "name": "american football"
+ },
+ {
+ "no": 1960,
+ "code": "1F3C9",
+ "char": "🏉",
+ "name": "rugby football"
+ },
+ {
+ "no": 1961,
+ "code": "1F3BE",
+ "char": "🎾",
+ "name": "tennis"
+ },
+ {
+ "no": 1962,
+ "code": "1F3B1",
+ "char": "🎱",
+ "name": "pool 8 ball"
+ },
+ {
+ "no": 1963,
+ "code": "1F3B3",
+ "char": "🎳",
+ "name": "bowling"
+ },
+ {
+ "no": 1964,
+ "code": "1F3CF",
+ "char": "🏏",
+ "name": "cricket game"
+ },
+ {
+ "no": 1965,
+ "code": "1F3D1",
+ "char": "🏑",
+ "name": "field hockey"
+ },
+ {
+ "no": 1966,
+ "code": "1F3D2",
+ "char": "🏒",
+ "name": "ice hockey"
+ },
+ {
+ "no": 1967,
+ "code": "1F3D3",
+ "char": "🏓",
+ "name": "ping pong"
+ },
+ {
+ "no": 1968,
+ "code": "1F3F8",
+ "char": "🏸",
+ "name": "badminton"
+ },
+ {
+ "no": 1969,
+ "code": "1F94A",
+ "char": "🥊",
+ "name": "boxing glove"
+ },
+ {
+ "no": 1970,
+ "code": "1F94B",
+ "char": "🥋",
+ "name": "martial arts uniform"
+ },
+ {
+ "no": 1971,
+ "code": "1F945",
+ "char": "🥅",
+ "name": "goal net"
+ },
+ {
+ "no": 1972,
+ "code": "1F3AF",
+ "char": "🎯",
+ "name": "direct hit"
+ },
+ {
+ "no": 1973,
+ "code": "26F3",
+ "char": "⛳",
+ "name": "flag in hole"
+ },
+ {
+ "no": 1974,
+ "code": "26F8",
+ "char": "⛸",
+ "name": "ice skate"
+ },
+ {
+ "no": 1975,
+ "code": "1F3A3",
+ "char": "🎣",
+ "name": "fishing pole"
+ },
+ {
+ "no": 1976,
+ "code": "1F3BD",
+ "char": "🎽",
+ "name": "running shirt"
+ },
+ {
+ "no": 1977,
+ "code": "1F3BF",
+ "char": "🎿",
+ "name": "skis"
+ },
+ {
+ "no": 1978,
+ "code": "1F6F7",
+ "char": "🛷",
+ "name": "⊛ sled"
+ },
+ {
+ "no": 1979,
+ "code": "1F94C",
+ "char": "🥌",
+ "name": "⊛ curling stone"
+ },
+ {
+ "no": 1980,
+ "code": "1F3AE",
+ "char": "🎮",
+ "name": "video game"
+ },
+ {
+ "no": 1981,
+ "code": "1F579",
+ "char": "🕹",
+ "name": "joystick"
+ },
+ {
+ "no": 1982,
+ "code": "1F3B2",
+ "char": "🎲",
+ "name": "game die"
+ },
+ {
+ "no": 1983,
+ "code": "2660",
+ "char": "♠",
+ "name": "spade suit"
+ },
+ {
+ "no": 1984,
+ "code": "2665",
+ "char": "♥",
+ "name": "heart suit"
+ },
+ {
+ "no": 1985,
+ "code": "2666",
+ "char": "♦",
+ "name": "diamond suit"
+ },
+ {
+ "no": 1986,
+ "code": "2663",
+ "char": "♣",
+ "name": "club suit"
+ },
+ {
+ "no": 1987,
+ "code": "1F0CF",
+ "char": "🃏",
+ "name": "joker"
+ },
+ {
+ "no": 1988,
+ "code": "1F004",
+ "char": "🀄",
+ "name": "mahjong red dragon"
+ },
+ {
+ "no": 1989,
+ "code": "1F3B4",
+ "char": "🎴",
+ "name": "flower playing cards"
+ },
+ {
+ "no": 1990,
+ "code": "1F507",
+ "char": "🔇",
+ "name": "muted speaker"
+ },
+ {
+ "no": 1991,
+ "code": "1F508",
+ "char": "🔈",
+ "name": "speaker low volume"
+ },
+ {
+ "no": 1992,
+ "code": "1F509",
+ "char": "🔉",
+ "name": "speaker medium volume"
+ },
+ {
+ "no": 1993,
+ "code": "1F50A",
+ "char": "🔊",
+ "name": "speaker high volume"
+ },
+ {
+ "no": 1994,
+ "code": "1F4E2",
+ "char": "📢",
+ "name": "loudspeaker"
+ },
+ {
+ "no": 1995,
+ "code": "1F4E3",
+ "char": "📣",
+ "name": "megaphone"
+ },
+ {
+ "no": 1996,
+ "code": "1F4EF",
+ "char": "📯",
+ "name": "postal horn"
+ },
+ {
+ "no": 1997,
+ "code": "1F514",
+ "char": "🔔",
+ "name": "bell"
+ },
+ {
+ "no": 1998,
+ "code": "1F515",
+ "char": "🔕",
+ "name": "bell with slash"
+ },
+ {
+ "no": 1999,
+ "code": "1F3BC",
+ "char": "🎼",
+ "name": "musical score"
+ },
+ {
+ "no": 2000,
+ "code": "1F3B5",
+ "char": "🎵",
+ "name": "musical note"
+ },
+ {
+ "no": 2001,
+ "code": "1F3B6",
+ "char": "🎶",
+ "name": "musical notes"
+ },
+ {
+ "no": 2002,
+ "code": "1F399",
+ "char": "🎙",
+ "name": "studio microphone"
+ },
+ {
+ "no": 2003,
+ "code": "1F39A",
+ "char": "🎚",
+ "name": "level slider"
+ },
+ {
+ "no": 2004,
+ "code": "1F39B",
+ "char": "🎛",
+ "name": "control knobs"
+ },
+ {
+ "no": 2005,
+ "code": "1F3A4",
+ "char": "🎤",
+ "name": "microphone"
+ },
+ {
+ "no": 2006,
+ "code": "1F3A7",
+ "char": "🎧",
+ "name": "headphone"
+ },
+ {
+ "no": 2007,
+ "code": "1F4FB",
+ "char": "📻",
+ "name": "radio"
+ },
+ {
+ "no": 2008,
+ "code": "1F3B7",
+ "char": "🎷",
+ "name": "saxophone"
+ },
+ {
+ "no": 2009,
+ "code": "1F3B8",
+ "char": "🎸",
+ "name": "guitar"
+ },
+ {
+ "no": 2010,
+ "code": "1F3B9",
+ "char": "🎹",
+ "name": "musical keyboard"
+ },
+ {
+ "no": 2011,
+ "code": "1F3BA",
+ "char": "🎺",
+ "name": "trumpet"
+ },
+ {
+ "no": 2012,
+ "code": "1F3BB",
+ "char": "🎻",
+ "name": "violin"
+ },
+ {
+ "no": 2013,
+ "code": "1F941",
+ "char": "🥁",
+ "name": "drum"
+ },
+ {
+ "no": 2014,
+ "code": "1F4F1",
+ "char": "📱",
+ "name": "mobile phone"
+ },
+ {
+ "no": 2015,
+ "code": "1F4F2",
+ "char": "📲",
+ "name": "mobile phone with arrow"
+ },
+ {
+ "no": 2016,
+ "code": "260E",
+ "char": "☎",
+ "name": "telephone"
+ },
+ {
+ "no": 2017,
+ "code": "1F4DE",
+ "char": "📞",
+ "name": "telephone receiver"
+ },
+ {
+ "no": 2018,
+ "code": "1F4DF",
+ "char": "📟",
+ "name": "pager"
+ },
+ {
+ "no": 2019,
+ "code": "1F4E0",
+ "char": "📠",
+ "name": "fax machine"
+ },
+ {
+ "no": 2020,
+ "code": "1F50B",
+ "char": "🔋",
+ "name": "battery"
+ },
+ {
+ "no": 2021,
+ "code": "1F50C",
+ "char": "🔌",
+ "name": "electric plug"
+ },
+ {
+ "no": 2022,
+ "code": "1F4BB",
+ "char": "💻",
+ "name": "laptop computer"
+ },
+ {
+ "no": 2023,
+ "code": "1F5A5",
+ "char": "🖥",
+ "name": "desktop computer"
+ },
+ {
+ "no": 2024,
+ "code": "1F5A8",
+ "char": "🖨",
+ "name": "printer"
+ },
+ {
+ "no": 2025,
+ "code": "2328",
+ "char": "⌨",
+ "name": "keyboard"
+ },
+ {
+ "no": 2026,
+ "code": "1F5B1",
+ "char": "🖱",
+ "name": "computer mouse"
+ },
+ {
+ "no": 2027,
+ "code": "1F5B2",
+ "char": "🖲",
+ "name": "trackball"
+ },
+ {
+ "no": 2028,
+ "code": "1F4BD",
+ "char": "💽",
+ "name": "computer disk"
+ },
+ {
+ "no": 2029,
+ "code": "1F4BE",
+ "char": "💾",
+ "name": "floppy disk"
+ },
+ {
+ "no": 2030,
+ "code": "1F4BF",
+ "char": "💿",
+ "name": "optical disk"
+ },
+ {
+ "no": 2031,
+ "code": "1F4C0",
+ "char": "📀",
+ "name": "dvd"
+ },
+ {
+ "no": 2032,
+ "code": "1F3A5",
+ "char": "🎥",
+ "name": "movie camera"
+ },
+ {
+ "no": 2033,
+ "code": "1F39E",
+ "char": "🎞",
+ "name": "film frames"
+ },
+ {
+ "no": 2034,
+ "code": "1F4FD",
+ "char": "📽",
+ "name": "film projector"
+ },
+ {
+ "no": 2035,
+ "code": "1F3AC",
+ "char": "🎬",
+ "name": "clapper board"
+ },
+ {
+ "no": 2036,
+ "code": "1F4FA",
+ "char": "📺",
+ "name": "television"
+ },
+ {
+ "no": 2037,
+ "code": "1F4F7",
+ "char": "📷",
+ "name": "camera"
+ },
+ {
+ "no": 2038,
+ "code": "1F4F8",
+ "char": "📸",
+ "name": "camera with flash"
+ },
+ {
+ "no": 2039,
+ "code": "1F4F9",
+ "char": "📹",
+ "name": "video camera"
+ },
+ {
+ "no": 2040,
+ "code": "1F4FC",
+ "char": "📼",
+ "name": "videocassette"
+ },
+ {
+ "no": 2041,
+ "code": "1F50D",
+ "char": "🔍",
+ "name": "magnifying glass tilted left"
+ },
+ {
+ "no": 2042,
+ "code": "1F50E",
+ "char": "🔎",
+ "name": "magnifying glass tilted right"
+ },
+ {
+ "no": 2043,
+ "code": "1F52C",
+ "char": "🔬",
+ "name": "microscope"
+ },
+ {
+ "no": 2044,
+ "code": "1F52D",
+ "char": "🔭",
+ "name": "telescope"
+ },
+ {
+ "no": 2045,
+ "code": "1F4E1",
+ "char": "📡",
+ "name": "satellite antenna"
+ },
+ {
+ "no": 2046,
+ "code": "1F56F",
+ "char": "🕯",
+ "name": "candle"
+ },
+ {
+ "no": 2047,
+ "code": "1F4A1",
+ "char": "💡",
+ "name": "light bulb"
+ },
+ {
+ "no": 2048,
+ "code": "1F526",
+ "char": "🔦",
+ "name": "flashlight"
+ },
+ {
+ "no": 2049,
+ "code": "1F3EE",
+ "char": "🏮",
+ "name": "red paper lantern"
+ },
+ {
+ "no": 2050,
+ "code": "1F4D4",
+ "char": "📔",
+ "name": "notebook with decorative cover"
+ },
+ {
+ "no": 2051,
+ "code": "1F4D5",
+ "char": "📕",
+ "name": "closed book"
+ },
+ {
+ "no": 2052,
+ "code": "1F4D6",
+ "char": "📖",
+ "name": "open book"
+ },
+ {
+ "no": 2053,
+ "code": "1F4D7",
+ "char": "📗",
+ "name": "green book"
+ },
+ {
+ "no": 2054,
+ "code": "1F4D8",
+ "char": "📘",
+ "name": "blue book"
+ },
+ {
+ "no": 2055,
+ "code": "1F4D9",
+ "char": "📙",
+ "name": "orange book"
+ },
+ {
+ "no": 2056,
+ "code": "1F4DA",
+ "char": "📚",
+ "name": "books"
+ },
+ {
+ "no": 2057,
+ "code": "1F4D3",
+ "char": "📓",
+ "name": "notebook"
+ },
+ {
+ "no": 2058,
+ "code": "1F4D2",
+ "char": "📒",
+ "name": "ledger"
+ },
+ {
+ "no": 2059,
+ "code": "1F4C3",
+ "char": "📃",
+ "name": "page with curl"
+ },
+ {
+ "no": 2060,
+ "code": "1F4DC",
+ "char": "📜",
+ "name": "scroll"
+ },
+ {
+ "no": 2061,
+ "code": "1F4C4",
+ "char": "📄",
+ "name": "page facing up"
+ },
+ {
+ "no": 2062,
+ "code": "1F4F0",
+ "char": "📰",
+ "name": "newspaper"
+ },
+ {
+ "no": 2063,
+ "code": "1F5DE",
+ "char": "🗞",
+ "name": "rolled-up newspaper"
+ },
+ {
+ "no": 2064,
+ "code": "1F4D1",
+ "char": "📑",
+ "name": "bookmark tabs"
+ },
+ {
+ "no": 2065,
+ "code": "1F516",
+ "char": "🔖",
+ "name": "bookmark"
+ },
+ {
+ "no": 2066,
+ "code": "1F3F7",
+ "char": "🏷",
+ "name": "label"
+ },
+ {
+ "no": 2067,
+ "code": "1F4B0",
+ "char": "💰",
+ "name": "money bag"
+ },
+ {
+ "no": 2068,
+ "code": "1F4B4",
+ "char": "💴",
+ "name": "yen banknote"
+ },
+ {
+ "no": 2069,
+ "code": "1F4B5",
+ "char": "💵",
+ "name": "dollar banknote"
+ },
+ {
+ "no": 2070,
+ "code": "1F4B6",
+ "char": "💶",
+ "name": "euro banknote"
+ },
+ {
+ "no": 2071,
+ "code": "1F4B7",
+ "char": "💷",
+ "name": "pound banknote"
+ },
+ {
+ "no": 2072,
+ "code": "1F4B8",
+ "char": "💸",
+ "name": "money with wings"
+ },
+ {
+ "no": 2073,
+ "code": "1F4B3",
+ "char": "💳",
+ "name": "credit card"
+ },
+ {
+ "no": 2074,
+ "code": "1F4B9",
+ "char": "💹",
+ "name": "chart increasing with yen"
+ },
+ {
+ "no": 2075,
+ "code": "1F4B1",
+ "char": "💱",
+ "name": "currency exchange"
+ },
+ {
+ "no": 2076,
+ "code": "1F4B2",
+ "char": "💲",
+ "name": "heavy dollar sign"
+ },
+ {
+ "no": 2077,
+ "code": "2709",
+ "char": "✉",
+ "name": "envelope"
+ },
+ {
+ "no": 2078,
+ "code": "1F4E7",
+ "char": "📧",
+ "name": "e-mail"
+ },
+ {
+ "no": 2079,
+ "code": "1F4E8",
+ "char": "📨",
+ "name": "incoming envelope"
+ },
+ {
+ "no": 2080,
+ "code": "1F4E9",
+ "char": "📩",
+ "name": "envelope with arrow"
+ },
+ {
+ "no": 2081,
+ "code": "1F4E4",
+ "char": "📤",
+ "name": "outbox tray"
+ },
+ {
+ "no": 2082,
+ "code": "1F4E5",
+ "char": "📥",
+ "name": "inbox tray"
+ },
+ {
+ "no": 2083,
+ "code": "1F4E6",
+ "char": "📦",
+ "name": "package"
+ },
+ {
+ "no": 2084,
+ "code": "1F4EB",
+ "char": "📫",
+ "name": "closed mailbox with raised flag"
+ },
+ {
+ "no": 2085,
+ "code": "1F4EA",
+ "char": "📪",
+ "name": "closed mailbox with lowered flag"
+ },
+ {
+ "no": 2086,
+ "code": "1F4EC",
+ "char": "📬",
+ "name": "open mailbox with raised flag"
+ },
+ {
+ "no": 2087,
+ "code": "1F4ED",
+ "char": "📭",
+ "name": "open mailbox with lowered flag"
+ },
+ {
+ "no": 2088,
+ "code": "1F4EE",
+ "char": "📮",
+ "name": "postbox"
+ },
+ {
+ "no": 2089,
+ "code": "1F5F3",
+ "char": "🗳",
+ "name": "ballot box with ballot"
+ },
+ {
+ "no": 2090,
+ "code": "270F",
+ "char": "✏",
+ "name": "pencil"
+ },
+ {
+ "no": 2091,
+ "code": "2712",
+ "char": "✒",
+ "name": "black nib"
+ },
+ {
+ "no": 2092,
+ "code": "1F58B",
+ "char": "🖋",
+ "name": "fountain pen"
+ },
+ {
+ "no": 2093,
+ "code": "1F58A",
+ "char": "🖊",
+ "name": "pen"
+ },
+ {
+ "no": 2094,
+ "code": "1F58C",
+ "char": "🖌",
+ "name": "paintbrush"
+ },
+ {
+ "no": 2095,
+ "code": "1F58D",
+ "char": "🖍",
+ "name": "crayon"
+ },
+ {
+ "no": 2096,
+ "code": "1F4DD",
+ "char": "📝",
+ "name": "memo"
+ },
+ {
+ "no": 2097,
+ "code": "1F4BC",
+ "char": "💼",
+ "name": "briefcase"
+ },
+ {
+ "no": 2098,
+ "code": "1F4C1",
+ "char": "📁",
+ "name": "file folder"
+ },
+ {
+ "no": 2099,
+ "code": "1F4C2",
+ "char": "📂",
+ "name": "open file folder"
+ },
+ {
+ "no": 2100,
+ "code": "1F5C2",
+ "char": "🗂",
+ "name": "card index dividers"
+ },
+ {
+ "no": 2101,
+ "code": "1F4C5",
+ "char": "📅",
+ "name": "calendar"
+ },
+ {
+ "no": 2102,
+ "code": "1F4C6",
+ "char": "📆",
+ "name": "tear-off calendar"
+ },
+ {
+ "no": 2103,
+ "code": "1F5D2",
+ "char": "🗒",
+ "name": "spiral notepad"
+ },
+ {
+ "no": 2104,
+ "code": "1F5D3",
+ "char": "🗓",
+ "name": "spiral calendar"
+ },
+ {
+ "no": 2105,
+ "code": "1F4C7",
+ "char": "📇",
+ "name": "card index"
+ },
+ {
+ "no": 2106,
+ "code": "1F4C8",
+ "char": "📈",
+ "name": "chart increasing"
+ },
+ {
+ "no": 2107,
+ "code": "1F4C9",
+ "char": "📉",
+ "name": "chart decreasing"
+ },
+ {
+ "no": 2108,
+ "code": "1F4CA",
+ "char": "📊",
+ "name": "bar chart"
+ },
+ {
+ "no": 2109,
+ "code": "1F4CB",
+ "char": "📋",
+ "name": "clipboard"
+ },
+ {
+ "no": 2110,
+ "code": "1F4CC",
+ "char": "📌",
+ "name": "pushpin"
+ },
+ {
+ "no": 2111,
+ "code": "1F4CD",
+ "char": "📍",
+ "name": "round pushpin"
+ },
+ {
+ "no": 2112,
+ "code": "1F4CE",
+ "char": "📎",
+ "name": "paperclip"
+ },
+ {
+ "no": 2113,
+ "code": "1F587",
+ "char": "🖇",
+ "name": "linked paperclips"
+ },
+ {
+ "no": 2114,
+ "code": "1F4CF",
+ "char": "📏",
+ "name": "straight ruler"
+ },
+ {
+ "no": 2115,
+ "code": "1F4D0",
+ "char": "📐",
+ "name": "triangular ruler"
+ },
+ {
+ "no": 2116,
+ "code": "2702",
+ "char": "✂",
+ "name": "scissors"
+ },
+ {
+ "no": 2117,
+ "code": "1F5C3",
+ "char": "🗃",
+ "name": "card file box"
+ },
+ {
+ "no": 2118,
+ "code": "1F5C4",
+ "char": "🗄",
+ "name": "file cabinet"
+ },
+ {
+ "no": 2119,
+ "code": "1F5D1",
+ "char": "🗑",
+ "name": "wastebasket"
+ },
+ {
+ "no": 2120,
+ "code": "1F512",
+ "char": "🔒",
+ "name": "locked"
+ },
+ {
+ "no": 2121,
+ "code": "1F513",
+ "char": "🔓",
+ "name": "unlocked"
+ },
+ {
+ "no": 2122,
+ "code": "1F50F",
+ "char": "🔏",
+ "name": "locked with pen"
+ },
+ {
+ "no": 2123,
+ "code": "1F510",
+ "char": "🔐",
+ "name": "locked with key"
+ },
+ {
+ "no": 2124,
+ "code": "1F511",
+ "char": "🔑",
+ "name": "key"
+ },
+ {
+ "no": 2125,
+ "code": "1F5DD",
+ "char": "🗝",
+ "name": "old key"
+ },
+ {
+ "no": 2126,
+ "code": "1F528",
+ "char": "🔨",
+ "name": "hammer"
+ },
+ {
+ "no": 2127,
+ "code": "26CF",
+ "char": "⛏",
+ "name": "pick"
+ },
+ {
+ "no": 2128,
+ "code": "2692",
+ "char": "⚒",
+ "name": "hammer and pick"
+ },
+ {
+ "no": 2129,
+ "code": "1F6E0",
+ "char": "🛠",
+ "name": "hammer and wrench"
+ },
+ {
+ "no": 2130,
+ "code": "1F5E1",
+ "char": "🗡",
+ "name": "dagger"
+ },
+ {
+ "no": 2131,
+ "code": "2694",
+ "char": "⚔",
+ "name": "crossed swords"
+ },
+ {
+ "no": 2132,
+ "code": "1F52B",
+ "char": "🔫",
+ "name": "pistol"
+ },
+ {
+ "no": 2133,
+ "code": "1F3F9",
+ "char": "🏹",
+ "name": "bow and arrow"
+ },
+ {
+ "no": 2134,
+ "code": "1F6E1",
+ "char": "🛡",
+ "name": "shield"
+ },
+ {
+ "no": 2135,
+ "code": "1F527",
+ "char": "🔧",
+ "name": "wrench"
+ },
+ {
+ "no": 2136,
+ "code": "1F529",
+ "char": "🔩",
+ "name": "nut and bolt"
+ },
+ {
+ "no": 2137,
+ "code": "2699",
+ "char": "⚙",
+ "name": "gear"
+ },
+ {
+ "no": 2138,
+ "code": "1F5DC",
+ "char": "🗜",
+ "name": "clamp"
+ },
+ {
+ "no": 2139,
+ "code": "2697",
+ "char": "⚗",
+ "name": "alembic"
+ },
+ {
+ "no": 2140,
+ "code": "2696",
+ "char": "⚖",
+ "name": "balance scale"
+ },
+ {
+ "no": 2141,
+ "code": "1F517",
+ "char": "🔗",
+ "name": "link"
+ },
+ {
+ "no": 2142,
+ "code": "26D3",
+ "char": "⛓",
+ "name": "chains"
+ },
+ {
+ "no": 2143,
+ "code": "1F489",
+ "char": "💉",
+ "name": "syringe"
+ },
+ {
+ "no": 2144,
+ "code": "1F48A",
+ "char": "💊",
+ "name": "pill"
+ },
+ {
+ "no": 2145,
+ "code": "1F6AC",
+ "char": "🚬",
+ "name": "cigarette"
+ },
+ {
+ "no": 2146,
+ "code": "26B0",
+ "char": "⚰",
+ "name": "coffin"
+ },
+ {
+ "no": 2147,
+ "code": "26B1",
+ "char": "⚱",
+ "name": "funeral urn"
+ },
+ {
+ "no": 2148,
+ "code": "1F5FF",
+ "char": "🗿",
+ "name": "moai"
+ },
+ {
+ "no": 2149,
+ "code": "1F6E2",
+ "char": "🛢",
+ "name": "oil drum"
+ },
+ {
+ "no": 2150,
+ "code": "1F52E",
+ "char": "🔮",
+ "name": "crystal ball"
+ },
+ {
+ "no": 2151,
+ "code": "1F6D2",
+ "char": "🛒",
+ "name": "shopping cart"
+ },
+ {
+ "no": 2152,
+ "code": "1F3E7",
+ "char": "🏧",
+ "name": "ATM sign"
+ },
+ {
+ "no": 2153,
+ "code": "1F6AE",
+ "char": "🚮",
+ "name": "litter in bin sign"
+ },
+ {
+ "no": 2154,
+ "code": "1F6B0",
+ "char": "🚰",
+ "name": "potable water"
+ },
+ {
+ "no": 2155,
+ "code": "267F",
+ "char": "♿",
+ "name": "wheelchair symbol"
+ },
+ {
+ "no": 2156,
+ "code": "1F6B9",
+ "char": "🚹",
+ "name": "men’s room"
+ },
+ {
+ "no": 2157,
+ "code": "1F6BA",
+ "char": "🚺",
+ "name": "women’s room"
+ },
+ {
+ "no": 2158,
+ "code": "1F6BB",
+ "char": "🚻",
+ "name": "restroom"
+ },
+ {
+ "no": 2159,
+ "code": "1F6BC",
+ "char": "🚼",
+ "name": "baby symbol"
+ },
+ {
+ "no": 2160,
+ "code": "1F6BE",
+ "char": "🚾",
+ "name": "water closet"
+ },
+ {
+ "no": 2161,
+ "code": "1F6C2",
+ "char": "🛂",
+ "name": "passport control"
+ },
+ {
+ "no": 2162,
+ "code": "1F6C3",
+ "char": "🛃",
+ "name": "customs"
+ },
+ {
+ "no": 2163,
+ "code": "1F6C4",
+ "char": "🛄",
+ "name": "baggage claim"
+ },
+ {
+ "no": 2164,
+ "code": "1F6C5",
+ "char": "🛅",
+ "name": "left luggage"
+ },
+ {
+ "no": 2165,
+ "code": "26A0",
+ "char": "⚠",
+ "name": "warning"
+ },
+ {
+ "no": 2166,
+ "code": "1F6B8",
+ "char": "🚸",
+ "name": "children crossing"
+ },
+ {
+ "no": 2167,
+ "code": "26D4",
+ "char": "⛔",
+ "name": "no entry"
+ },
+ {
+ "no": 2168,
+ "code": "1F6AB",
+ "char": "🚫",
+ "name": "prohibited"
+ },
+ {
+ "no": 2169,
+ "code": "1F6B3",
+ "char": "🚳",
+ "name": "no bicycles"
+ },
+ {
+ "no": 2170,
+ "code": "1F6AD",
+ "char": "🚭",
+ "name": "no smoking"
+ },
+ {
+ "no": 2171,
+ "code": "1F6AF",
+ "char": "🚯",
+ "name": "no littering"
+ },
+ {
+ "no": 2172,
+ "code": "1F6B1",
+ "char": "🚱",
+ "name": "non-potable water"
+ },
+ {
+ "no": 2173,
+ "code": "1F6B7",
+ "char": "🚷",
+ "name": "no pedestrians"
+ },
+ {
+ "no": 2174,
+ "code": "1F4F5",
+ "char": "📵",
+ "name": "no mobile phones"
+ },
+ {
+ "no": 2175,
+ "code": "1F51E",
+ "char": "🔞",
+ "name": "no one under eighteen"
+ },
+ {
+ "no": 2176,
+ "code": "2622",
+ "char": "☢",
+ "name": "radioactive"
+ },
+ {
+ "no": 2177,
+ "code": "2623",
+ "char": "☣",
+ "name": "biohazard"
+ },
+ {
+ "no": 2178,
+ "code": "2B06",
+ "char": "⬆",
+ "name": "up arrow"
+ },
+ {
+ "no": 2179,
+ "code": "2197",
+ "char": "↗",
+ "name": "up-right arrow"
+ },
+ {
+ "no": 2180,
+ "code": "27A1",
+ "char": "➡",
+ "name": "right arrow"
+ },
+ {
+ "no": 2181,
+ "code": "2198",
+ "char": "↘",
+ "name": "down-right arrow"
+ },
+ {
+ "no": 2182,
+ "code": "2B07",
+ "char": "⬇",
+ "name": "down arrow"
+ },
+ {
+ "no": 2183,
+ "code": "2199",
+ "char": "↙",
+ "name": "down-left arrow"
+ },
+ {
+ "no": 2184,
+ "code": "2B05",
+ "char": "⬅",
+ "name": "left arrow"
+ },
+ {
+ "no": 2185,
+ "code": "2196",
+ "char": "↖",
+ "name": "up-left arrow"
+ },
+ {
+ "no": 2186,
+ "code": "2195",
+ "char": "↕",
+ "name": "up-down arrow"
+ },
+ {
+ "no": 2187,
+ "code": "2194",
+ "char": "↔",
+ "name": "left-right arrow"
+ },
+ {
+ "no": 2188,
+ "code": "21A9",
+ "char": "↩",
+ "name": "right arrow curving left"
+ },
+ {
+ "no": 2189,
+ "code": "21AA",
+ "char": "↪",
+ "name": "left arrow curving right"
+ },
+ {
+ "no": 2190,
+ "code": "2934",
+ "char": "⤴",
+ "name": "right arrow curving up"
+ },
+ {
+ "no": 2191,
+ "code": "2935",
+ "char": "⤵",
+ "name": "right arrow curving down"
+ },
+ {
+ "no": 2192,
+ "code": "1F503",
+ "char": "🔃",
+ "name": "clockwise vertical arrows"
+ },
+ {
+ "no": 2193,
+ "code": "1F504",
+ "char": "🔄",
+ "name": "counterclockwise arrows button"
+ },
+ {
+ "no": 2194,
+ "code": "1F519",
+ "char": "🔙",
+ "name": "BACK arrow"
+ },
+ {
+ "no": 2195,
+ "code": "1F51A",
+ "char": "🔚",
+ "name": "END arrow"
+ },
+ {
+ "no": 2196,
+ "code": "1F51B",
+ "char": "🔛",
+ "name": "ON! arrow"
+ },
+ {
+ "no": 2197,
+ "code": "1F51C",
+ "char": "🔜",
+ "name": "SOON arrow"
+ },
+ {
+ "no": 2198,
+ "code": "1F51D",
+ "char": "🔝",
+ "name": "TOP arrow"
+ },
+ {
+ "no": 2199,
+ "code": "1F6D0",
+ "char": "🛐",
+ "name": "place of worship"
+ },
+ {
+ "no": 2200,
+ "code": "269B",
+ "char": "⚛",
+ "name": "atom symbol"
+ },
+ {
+ "no": 2201,
+ "code": "1F549",
+ "char": "🕉",
+ "name": "om"
+ },
+ {
+ "no": 2202,
+ "code": "2721",
+ "char": "✡",
+ "name": "star of David"
+ },
+ {
+ "no": 2203,
+ "code": "2638",
+ "char": "☸",
+ "name": "wheel of dharma"
+ },
+ {
+ "no": 2204,
+ "code": "262F",
+ "char": "☯",
+ "name": "yin yang"
+ },
+ {
+ "no": 2205,
+ "code": "271D",
+ "char": "✝",
+ "name": "latin cross"
+ },
+ {
+ "no": 2206,
+ "code": "2626",
+ "char": "☦",
+ "name": "orthodox cross"
+ },
+ {
+ "no": 2207,
+ "code": "262A",
+ "char": "☪",
+ "name": "star and crescent"
+ },
+ {
+ "no": 2208,
+ "code": "262E",
+ "char": "☮",
+ "name": "peace symbol"
+ },
+ {
+ "no": 2209,
+ "code": "1F54E",
+ "char": "🕎",
+ "name": "menorah"
+ },
+ {
+ "no": 2210,
+ "code": "1F52F",
+ "char": "🔯",
+ "name": "dotted six-pointed star"
+ },
+ {
+ "no": 2211,
+ "code": "2648",
+ "char": "♈",
+ "name": "Aries"
+ },
+ {
+ "no": 2212,
+ "code": "2649",
+ "char": "♉",
+ "name": "Taurus"
+ },
+ {
+ "no": 2213,
+ "code": "264A",
+ "char": "♊",
+ "name": "Gemini"
+ },
+ {
+ "no": 2214,
+ "code": "264B",
+ "char": "♋",
+ "name": "Cancer"
+ },
+ {
+ "no": 2215,
+ "code": "264C",
+ "char": "♌",
+ "name": "Leo"
+ },
+ {
+ "no": 2216,
+ "code": "264D",
+ "char": "♍",
+ "name": "Virgo"
+ },
+ {
+ "no": 2217,
+ "code": "264E",
+ "char": "♎",
+ "name": "Libra"
+ },
+ {
+ "no": 2218,
+ "code": "264F",
+ "char": "♏",
+ "name": "Scorpius"
+ },
+ {
+ "no": 2219,
+ "code": "2650",
+ "char": "♐",
+ "name": "Sagittarius"
+ },
+ {
+ "no": 2220,
+ "code": "2651",
+ "char": "♑",
+ "name": "Capricorn"
+ },
+ {
+ "no": 2221,
+ "code": "2652",
+ "char": "♒",
+ "name": "Aquarius"
+ },
+ {
+ "no": 2222,
+ "code": "2653",
+ "char": "♓",
+ "name": "Pisces"
+ },
+ {
+ "no": 2223,
+ "code": "26CE",
+ "char": "⛎",
+ "name": "Ophiuchus"
+ },
+ {
+ "no": 2224,
+ "code": "1F500",
+ "char": "🔀",
+ "name": "shuffle tracks button"
+ },
+ {
+ "no": 2225,
+ "code": "1F501",
+ "char": "🔁",
+ "name": "repeat button"
+ },
+ {
+ "no": 2226,
+ "code": "1F502",
+ "char": "🔂",
+ "name": "repeat single button"
+ },
+ {
+ "no": 2227,
+ "code": "25B6",
+ "char": "▶",
+ "name": "play button"
+ },
+ {
+ "no": 2228,
+ "code": "23E9",
+ "char": "⏩",
+ "name": "fast-forward button"
+ },
+ {
+ "no": 2229,
+ "code": "23ED",
+ "char": "⏭",
+ "name": "next track button"
+ },
+ {
+ "no": 2230,
+ "code": "23EF",
+ "char": "⏯",
+ "name": "play or pause button"
+ },
+ {
+ "no": 2231,
+ "code": "25C0",
+ "char": "◀",
+ "name": "reverse button"
+ },
+ {
+ "no": 2232,
+ "code": "23EA",
+ "char": "⏪",
+ "name": "fast reverse button"
+ },
+ {
+ "no": 2233,
+ "code": "23EE",
+ "char": "⏮",
+ "name": "last track button"
+ },
+ {
+ "no": 2234,
+ "code": "1F53C",
+ "char": "🔼",
+ "name": "up button"
+ },
+ {
+ "no": 2235,
+ "code": "23EB",
+ "char": "⏫",
+ "name": "fast up button"
+ },
+ {
+ "no": 2236,
+ "code": "1F53D",
+ "char": "🔽",
+ "name": "down button"
+ },
+ {
+ "no": 2237,
+ "code": "23EC",
+ "char": "⏬",
+ "name": "fast down button"
+ },
+ {
+ "no": 2238,
+ "code": "23F8",
+ "char": "⏸",
+ "name": "pause button"
+ },
+ {
+ "no": 2239,
+ "code": "23F9",
+ "char": "⏹",
+ "name": "stop button"
+ },
+ {
+ "no": 2240,
+ "code": "23FA",
+ "char": "⏺",
+ "name": "record button"
+ },
+ {
+ "no": 2241,
+ "code": "23CF",
+ "char": "⏏",
+ "name": "eject button"
+ },
+ {
+ "no": 2242,
+ "code": "1F3A6",
+ "char": "🎦",
+ "name": "cinema"
+ },
+ {
+ "no": 2243,
+ "code": "1F505",
+ "char": "🔅",
+ "name": "dim button"
+ },
+ {
+ "no": 2244,
+ "code": "1F506",
+ "char": "🔆",
+ "name": "bright button"
+ },
+ {
+ "no": 2245,
+ "code": "1F4F6",
+ "char": "📶",
+ "name": "antenna bars"
+ },
+ {
+ "no": 2246,
+ "code": "1F4F3",
+ "char": "📳",
+ "name": "vibration mode"
+ },
+ {
+ "no": 2247,
+ "code": "1F4F4",
+ "char": "📴",
+ "name": "mobile phone off"
+ },
+ {
+ "no": 2248,
+ "code": "2640",
+ "char": "♀",
+ "name": "female sign"
+ },
+ {
+ "no": 2249,
+ "code": "2642",
+ "char": "♂",
+ "name": "male sign"
+ },
+ {
+ "no": 2250,
+ "code": "2695",
+ "char": "⚕",
+ "name": "medical symbol"
+ },
+ {
+ "no": 2251,
+ "code": "267B",
+ "char": "♻",
+ "name": "recycling symbol"
+ },
+ {
+ "no": 2252,
+ "code": "269C",
+ "char": "⚜",
+ "name": "fleur-de-lis"
+ },
+ {
+ "no": 2253,
+ "code": "1F531",
+ "char": "🔱",
+ "name": "trident emblem"
+ },
+ {
+ "no": 2254,
+ "code": "1F4DB",
+ "char": "📛",
+ "name": "name badge"
+ },
+ {
+ "no": 2255,
+ "code": "1F530",
+ "char": "🔰",
+ "name": "Japanese symbol for beginner"
+ },
+ {
+ "no": 2256,
+ "code": "2B55",
+ "char": "⭕",
+ "name": "heavy large circle"
+ },
+ {
+ "no": 2257,
+ "code": "2705",
+ "char": "✅",
+ "name": "white heavy check mark"
+ },
+ {
+ "no": 2258,
+ "code": "2611",
+ "char": "☑",
+ "name": "ballot box with check"
+ },
+ {
+ "no": 2259,
+ "code": "2714",
+ "char": "✔",
+ "name": "heavy check mark"
+ },
+ {
+ "no": 2260,
+ "code": "2716",
+ "char": "✖",
+ "name": "heavy multiplication x"
+ },
+ {
+ "no": 2261,
+ "code": "274C",
+ "char": "❌",
+ "name": "cross mark"
+ },
+ {
+ "no": 2262,
+ "code": "274E",
+ "char": "❎",
+ "name": "cross mark button"
+ },
+ {
+ "no": 2263,
+ "code": "2795",
+ "char": "➕",
+ "name": "heavy plus sign"
+ },
+ {
+ "no": 2264,
+ "code": "2796",
+ "char": "➖",
+ "name": "heavy minus sign"
+ },
+ {
+ "no": 2265,
+ "code": "2797",
+ "char": "➗",
+ "name": "heavy division sign"
+ },
+ {
+ "no": 2266,
+ "code": "27B0",
+ "char": "➰",
+ "name": "curly loop"
+ },
+ {
+ "no": 2267,
+ "code": "27BF",
+ "char": "➿",
+ "name": "double curly loop"
+ },
+ {
+ "no": 2268,
+ "code": "303D",
+ "char": "〽",
+ "name": "part alternation mark"
+ },
+ {
+ "no": 2269,
+ "code": "2733",
+ "char": "✳",
+ "name": "eight-spoked asterisk"
+ },
+ {
+ "no": 2270,
+ "code": "2734",
+ "char": "✴",
+ "name": "eight-pointed star"
+ },
+ {
+ "no": 2271,
+ "code": "2747",
+ "char": "❇",
+ "name": "sparkle"
+ },
+ {
+ "no": 2272,
+ "code": "203C",
+ "char": "‼",
+ "name": "double exclamation mark"
+ },
+ {
+ "no": 2273,
+ "code": "2049",
+ "char": "⁉",
+ "name": "exclamation question mark"
+ },
+ {
+ "no": 2274,
+ "code": "2753",
+ "char": "❓",
+ "name": "question mark"
+ },
+ {
+ "no": 2275,
+ "code": "2754",
+ "char": "❔",
+ "name": "white question mark"
+ },
+ {
+ "no": 2276,
+ "code": "2755",
+ "char": "❕",
+ "name": "white exclamation mark"
+ },
+ {
+ "no": 2277,
+ "code": "2757",
+ "char": "❗",
+ "name": "exclamation mark"
+ },
+ {
+ "no": 2278,
+ "code": "3030",
+ "char": "〰",
+ "name": "wavy dash"
+ },
+ {
+ "no": 2279,
+ "code": "00A9",
+ "char": "©",
+ "name": "copyright"
+ },
+ {
+ "no": 2280,
+ "code": "00AE",
+ "char": "®",
+ "name": "registered"
+ },
+ {
+ "no": 2281,
+ "code": "2122",
+ "char": "™",
+ "name": "trade mark"
+ },
+ {
+ "no": 2282,
+ "code": "0023 FE0F 20E3",
+ "char": "#️⃣",
+ "name": "keycap: #"
+ },
+ {
+ "no": 2283,
+ "code": "002A FE0F 20E3",
+ "char": "*️⃣",
+ "name": "keycap: *"
+ },
+ {
+ "no": 2284,
+ "code": "0030 FE0F 20E3",
+ "char": "0️⃣",
+ "name": "keycap: 0"
+ },
+ {
+ "no": 2285,
+ "code": "0031 FE0F 20E3",
+ "char": "1️⃣",
+ "name": "keycap: 1"
+ },
+ {
+ "no": 2286,
+ "code": "0032 FE0F 20E3",
+ "char": "2️⃣",
+ "name": "keycap: 2"
+ },
+ {
+ "no": 2287,
+ "code": "0033 FE0F 20E3",
+ "char": "3️⃣",
+ "name": "keycap: 3"
+ },
+ {
+ "no": 2288,
+ "code": "0034 FE0F 20E3",
+ "char": "4️⃣",
+ "name": "keycap: 4"
+ },
+ {
+ "no": 2289,
+ "code": "0035 FE0F 20E3",
+ "char": "5️⃣",
+ "name": "keycap: 5"
+ },
+ {
+ "no": 2290,
+ "code": "0036 FE0F 20E3",
+ "char": "6️⃣",
+ "name": "keycap: 6"
+ },
+ {
+ "no": 2291,
+ "code": "0037 FE0F 20E3",
+ "char": "7️⃣",
+ "name": "keycap: 7"
+ },
+ {
+ "no": 2292,
+ "code": "0038 FE0F 20E3",
+ "char": "8️⃣",
+ "name": "keycap: 8"
+ },
+ {
+ "no": 2293,
+ "code": "0039 FE0F 20E3",
+ "char": "9️⃣",
+ "name": "keycap: 9"
+ },
+ {
+ "no": 2294,
+ "code": "1F51F",
+ "char": "🔟",
+ "name": "keycap 10"
+ },
+ {
+ "no": 2295,
+ "code": "1F4AF",
+ "char": "💯",
+ "name": "hundred points"
+ },
+ {
+ "no": 2296,
+ "code": "1F520",
+ "char": "🔠",
+ "name": "input latin uppercase"
+ },
+ {
+ "no": 2297,
+ "code": "1F521",
+ "char": "🔡",
+ "name": "input latin lowercase"
+ },
+ {
+ "no": 2298,
+ "code": "1F522",
+ "char": "🔢",
+ "name": "input numbers"
+ },
+ {
+ "no": 2299,
+ "code": "1F523",
+ "char": "🔣",
+ "name": "input symbols"
+ },
+ {
+ "no": 2300,
+ "code": "1F524",
+ "char": "🔤",
+ "name": "input latin letters"
+ },
+ {
+ "no": 2301,
+ "code": "1F170",
+ "char": "🅰",
+ "name": "A button (blood type)"
+ },
+ {
+ "no": 2302,
+ "code": "1F18E",
+ "char": "🆎",
+ "name": "AB button (blood type)"
+ },
+ {
+ "no": 2303,
+ "code": "1F171",
+ "char": "🅱",
+ "name": "B button (blood type)"
+ },
+ {
+ "no": 2304,
+ "code": "1F191",
+ "char": "🆑",
+ "name": "CL button"
+ },
+ {
+ "no": 2305,
+ "code": "1F192",
+ "char": "🆒",
+ "name": "COOL button"
+ },
+ {
+ "no": 2306,
+ "code": "1F193",
+ "char": "🆓",
+ "name": "FREE button"
+ },
+ {
+ "no": 2307,
+ "code": "2139",
+ "char": "ℹ",
+ "name": "information"
+ },
+ {
+ "no": 2308,
+ "code": "1F194",
+ "char": "🆔",
+ "name": "ID button"
+ },
+ {
+ "no": 2309,
+ "code": "24C2",
+ "char": "Ⓜ",
+ "name": "circled M"
+ },
+ {
+ "no": 2310,
+ "code": "1F195",
+ "char": "🆕",
+ "name": "NEW button"
+ },
+ {
+ "no": 2311,
+ "code": "1F196",
+ "char": "🆖",
+ "name": "NG button"
+ },
+ {
+ "no": 2312,
+ "code": "1F17E",
+ "char": "🅾",
+ "name": "O button (blood type)"
+ },
+ {
+ "no": 2313,
+ "code": "1F197",
+ "char": "🆗",
+ "name": "OK button"
+ },
+ {
+ "no": 2314,
+ "code": "1F17F",
+ "char": "🅿",
+ "name": "P button"
+ },
+ {
+ "no": 2315,
+ "code": "1F198",
+ "char": "🆘",
+ "name": "SOS button"
+ },
+ {
+ "no": 2316,
+ "code": "1F199",
+ "char": "🆙",
+ "name": "UP! button"
+ },
+ {
+ "no": 2317,
+ "code": "1F19A",
+ "char": "🆚",
+ "name": "VS button"
+ },
+ {
+ "no": 2318,
+ "code": "1F201",
+ "char": "🈁",
+ "name": "Japanese “here” button"
+ },
+ {
+ "no": 2319,
+ "code": "1F202",
+ "char": "🈂",
+ "name": "Japanese “service charge” button"
+ },
+ {
+ "no": 2320,
+ "code": "1F237",
+ "char": "🈷",
+ "name": "Japanese “monthly amount” button"
+ },
+ {
+ "no": 2321,
+ "code": "1F236",
+ "char": "🈶",
+ "name": "Japanese “not free of charge” button"
+ },
+ {
+ "no": 2322,
+ "code": "1F22F",
+ "char": "🈯",
+ "name": "Japanese “reserved” button"
+ },
+ {
+ "no": 2323,
+ "code": "1F250",
+ "char": "🉐",
+ "name": "Japanese “bargain” button"
+ },
+ {
+ "no": 2324,
+ "code": "1F239",
+ "char": "🈹",
+ "name": "Japanese “discount” button"
+ },
+ {
+ "no": 2325,
+ "code": "1F21A",
+ "char": "🈚",
+ "name": "Japanese “free of charge” button"
+ },
+ {
+ "no": 2326,
+ "code": "1F232",
+ "char": "🈲",
+ "name": "Japanese “prohibited” button"
+ },
+ {
+ "no": 2327,
+ "code": "1F251",
+ "char": "🉑",
+ "name": "Japanese “acceptable” button"
+ },
+ {
+ "no": 2328,
+ "code": "1F238",
+ "char": "🈸",
+ "name": "Japanese “application” button"
+ },
+ {
+ "no": 2329,
+ "code": "1F234",
+ "char": "🈴",
+ "name": "Japanese “passing grade” button"
+ },
+ {
+ "no": 2330,
+ "code": "1F233",
+ "char": "🈳",
+ "name": "Japanese “vacancy” button"
+ },
+ {
+ "no": 2331,
+ "code": "3297",
+ "char": "㊗",
+ "name": "Japanese “congratulations” button"
+ },
+ {
+ "no": 2332,
+ "code": "3299",
+ "char": "㊙",
+ "name": "Japanese “secret” button"
+ },
+ {
+ "no": 2333,
+ "code": "1F23A",
+ "char": "🈺",
+ "name": "Japanese “open for business” button"
+ },
+ {
+ "no": 2334,
+ "code": "1F235",
+ "char": "🈵",
+ "name": "Japanese “no vacancy” button"
+ },
+ {
+ "no": 2335,
+ "code": "25AA",
+ "char": "▪",
+ "name": "black small square"
+ },
+ {
+ "no": 2336,
+ "code": "25AB",
+ "char": "▫",
+ "name": "white small square"
+ },
+ {
+ "no": 2337,
+ "code": "25FB",
+ "char": "◻",
+ "name": "white medium square"
+ },
+ {
+ "no": 2338,
+ "code": "25FC",
+ "char": "◼",
+ "name": "black medium square"
+ },
+ {
+ "no": 2339,
+ "code": "25FD",
+ "char": "◽",
+ "name": "white medium-small square"
+ },
+ {
+ "no": 2340,
+ "code": "25FE",
+ "char": "◾",
+ "name": "black medium-small square"
+ },
+ {
+ "no": 2341,
+ "code": "2B1B",
+ "char": "⬛",
+ "name": "black large square"
+ },
+ {
+ "no": 2342,
+ "code": "2B1C",
+ "char": "⬜",
+ "name": "white large square"
+ },
+ {
+ "no": 2343,
+ "code": "1F536",
+ "char": "🔶",
+ "name": "large orange diamond"
+ },
+ {
+ "no": 2344,
+ "code": "1F537",
+ "char": "🔷",
+ "name": "large blue diamond"
+ },
+ {
+ "no": 2345,
+ "code": "1F538",
+ "char": "🔸",
+ "name": "small orange diamond"
+ },
+ {
+ "no": 2346,
+ "code": "1F539",
+ "char": "🔹",
+ "name": "small blue diamond"
+ },
+ {
+ "no": 2347,
+ "code": "1F53A",
+ "char": "🔺",
+ "name": "red triangle pointed up"
+ },
+ {
+ "no": 2348,
+ "code": "1F53B",
+ "char": "🔻",
+ "name": "red triangle pointed down"
+ },
+ {
+ "no": 2349,
+ "code": "1F4A0",
+ "char": "💠",
+ "name": "diamond with a dot"
+ },
+ {
+ "no": 2350,
+ "code": "1F518",
+ "char": "🔘",
+ "name": "radio button"
+ },
+ {
+ "no": 2351,
+ "code": "1F532",
+ "char": "🔲",
+ "name": "black square button"
+ },
+ {
+ "no": 2352,
+ "code": "1F533",
+ "char": "🔳",
+ "name": "white square button"
+ },
+ {
+ "no": 2353,
+ "code": "26AA",
+ "char": "⚪",
+ "name": "white circle"
+ },
+ {
+ "no": 2354,
+ "code": "26AB",
+ "char": "⚫",
+ "name": "black circle"
+ },
+ {
+ "no": 2355,
+ "code": "1F534",
+ "char": "🔴",
+ "name": "red circle"
+ },
+ {
+ "no": 2356,
+ "code": "1F535",
+ "char": "🔵",
+ "name": "blue circle"
+ },
+ {
+ "no": 2357,
+ "code": "1F3C1",
+ "char": "🏁",
+ "name": "chequered flag"
+ },
+ {
+ "no": 2358,
+ "code": "1F6A9",
+ "char": "🚩",
+ "name": "triangular flag"
+ },
+ {
+ "no": 2359,
+ "code": "1F38C",
+ "char": "🎌",
+ "name": "crossed flags"
+ },
+ {
+ "no": 2360,
+ "code": "1F3F4",
+ "char": "🏴",
+ "name": "black flag"
+ },
+ {
+ "no": 2361,
+ "code": "1F3F3",
+ "char": "🏳",
+ "name": "white flag"
+ },
+ {
+ "no": 2362,
+ "code": "1F3F3 FE0F 200D 1F308",
+ "char": "🏳️‍🌈",
+ "name": "rainbow flag"
+ },
+ {
+ "no": 2363,
+ "code": "1F1E6 1F1E8",
+ "char": "🇦🇨",
+ "name": "Ascension Island"
+ },
+ {
+ "no": 2364,
+ "code": "1F1E6 1F1E9",
+ "char": "🇦🇩",
+ "name": "Andorra"
+ },
+ {
+ "no": 2365,
+ "code": "1F1E6 1F1EA",
+ "char": "🇦🇪",
+ "name": "United Arab Emirates"
+ },
+ {
+ "no": 2366,
+ "code": "1F1E6 1F1EB",
+ "char": "🇦🇫",
+ "name": "Afghanistan"
+ },
+ {
+ "no": 2367,
+ "code": "1F1E6 1F1EC",
+ "char": "🇦🇬",
+ "name": "Antigua & Barbuda"
+ },
+ {
+ "no": 2368,
+ "code": "1F1E6 1F1EE",
+ "char": "🇦🇮",
+ "name": "Anguilla"
+ },
+ {
+ "no": 2369,
+ "code": "1F1E6 1F1F1",
+ "char": "🇦🇱",
+ "name": "Albania"
+ },
+ {
+ "no": 2370,
+ "code": "1F1E6 1F1F2",
+ "char": "🇦🇲",
+ "name": "Armenia"
+ },
+ {
+ "no": 2371,
+ "code": "1F1E6 1F1F4",
+ "char": "🇦🇴",
+ "name": "Angola"
+ },
+ {
+ "no": 2372,
+ "code": "1F1E6 1F1F6",
+ "char": "🇦🇶",
+ "name": "Antarctica"
+ },
+ {
+ "no": 2373,
+ "code": "1F1E6 1F1F7",
+ "char": "🇦🇷",
+ "name": "Argentina"
+ },
+ {
+ "no": 2374,
+ "code": "1F1E6 1F1F8",
+ "char": "🇦🇸",
+ "name": "American Samoa"
+ },
+ {
+ "no": 2375,
+ "code": "1F1E6 1F1F9",
+ "char": "🇦🇹",
+ "name": "Austria"
+ },
+ {
+ "no": 2376,
+ "code": "1F1E6 1F1FA",
+ "char": "🇦🇺",
+ "name": "Australia"
+ },
+ {
+ "no": 2377,
+ "code": "1F1E6 1F1FC",
+ "char": "🇦🇼",
+ "name": "Aruba"
+ },
+ {
+ "no": 2378,
+ "code": "1F1E6 1F1FD",
+ "char": "🇦🇽",
+ "name": "Åland Islands"
+ },
+ {
+ "no": 2379,
+ "code": "1F1E6 1F1FF",
+ "char": "🇦🇿",
+ "name": "Azerbaijan"
+ },
+ {
+ "no": 2380,
+ "code": "1F1E7 1F1E6",
+ "char": "🇧🇦",
+ "name": "Bosnia & Herzegovina"
+ },
+ {
+ "no": 2381,
+ "code": "1F1E7 1F1E7",
+ "char": "🇧🇧",
+ "name": "Barbados"
+ },
+ {
+ "no": 2382,
+ "code": "1F1E7 1F1E9",
+ "char": "🇧🇩",
+ "name": "Bangladesh"
+ },
+ {
+ "no": 2383,
+ "code": "1F1E7 1F1EA",
+ "char": "🇧🇪",
+ "name": "Belgium"
+ },
+ {
+ "no": 2384,
+ "code": "1F1E7 1F1EB",
+ "char": "🇧🇫",
+ "name": "Burkina Faso"
+ },
+ {
+ "no": 2385,
+ "code": "1F1E7 1F1EC",
+ "char": "🇧🇬",
+ "name": "Bulgaria"
+ },
+ {
+ "no": 2386,
+ "code": "1F1E7 1F1ED",
+ "char": "🇧🇭",
+ "name": "Bahrain"
+ },
+ {
+ "no": 2387,
+ "code": "1F1E7 1F1EE",
+ "char": "🇧🇮",
+ "name": "Burundi"
+ },
+ {
+ "no": 2388,
+ "code": "1F1E7 1F1EF",
+ "char": "🇧🇯",
+ "name": "Benin"
+ },
+ {
+ "no": 2389,
+ "code": "1F1E7 1F1F1",
+ "char": "🇧🇱",
+ "name": "St. Barthélemy"
+ },
+ {
+ "no": 2390,
+ "code": "1F1E7 1F1F2",
+ "char": "🇧🇲",
+ "name": "Bermuda"
+ },
+ {
+ "no": 2391,
+ "code": "1F1E7 1F1F3",
+ "char": "🇧🇳",
+ "name": "Brunei"
+ },
+ {
+ "no": 2392,
+ "code": "1F1E7 1F1F4",
+ "char": "🇧🇴",
+ "name": "Bolivia"
+ },
+ {
+ "no": 2393,
+ "code": "1F1E7 1F1F6",
+ "char": "🇧🇶",
+ "name": "Caribbean Netherlands"
+ },
+ {
+ "no": 2394,
+ "code": "1F1E7 1F1F7",
+ "char": "🇧🇷",
+ "name": "Brazil"
+ },
+ {
+ "no": 2395,
+ "code": "1F1E7 1F1F8",
+ "char": "🇧🇸",
+ "name": "Bahamas"
+ },
+ {
+ "no": 2396,
+ "code": "1F1E7 1F1F9",
+ "char": "🇧🇹",
+ "name": "Bhutan"
+ },
+ {
+ "no": 2397,
+ "code": "1F1E7 1F1FB",
+ "char": "🇧🇻",
+ "name": "Bouvet Island"
+ },
+ {
+ "no": 2398,
+ "code": "1F1E7 1F1FC",
+ "char": "🇧🇼",
+ "name": "Botswana"
+ },
+ {
+ "no": 2399,
+ "code": "1F1E7 1F1FE",
+ "char": "🇧🇾",
+ "name": "Belarus"
+ },
+ {
+ "no": 2400,
+ "code": "1F1E7 1F1FF",
+ "char": "🇧🇿",
+ "name": "Belize"
+ },
+ {
+ "no": 2401,
+ "code": "1F1E8 1F1E6",
+ "char": "🇨🇦",
+ "name": "Canada"
+ },
+ {
+ "no": 2402,
+ "code": "1F1E8 1F1E8",
+ "char": "🇨🇨",
+ "name": "Cocos (Keeling) Islands"
+ },
+ {
+ "no": 2403,
+ "code": "1F1E8 1F1E9",
+ "char": "🇨🇩",
+ "name": "Congo - Kinshasa"
+ },
+ {
+ "no": 2404,
+ "code": "1F1E8 1F1EB",
+ "char": "🇨🇫",
+ "name": "Central African Republic"
+ },
+ {
+ "no": 2405,
+ "code": "1F1E8 1F1EC",
+ "char": "🇨🇬",
+ "name": "Congo - Brazzaville"
+ },
+ {
+ "no": 2406,
+ "code": "1F1E8 1F1ED",
+ "char": "🇨🇭",
+ "name": "Switzerland"
+ },
+ {
+ "no": 2407,
+ "code": "1F1E8 1F1EE",
+ "char": "🇨🇮",
+ "name": "Côte d’Ivoire"
+ },
+ {
+ "no": 2408,
+ "code": "1F1E8 1F1F0",
+ "char": "🇨🇰",
+ "name": "Cook Islands"
+ },
+ {
+ "no": 2409,
+ "code": "1F1E8 1F1F1",
+ "char": "🇨🇱",
+ "name": "Chile"
+ },
+ {
+ "no": 2410,
+ "code": "1F1E8 1F1F2",
+ "char": "🇨🇲",
+ "name": "Cameroon"
+ },
+ {
+ "no": 2411,
+ "code": "1F1E8 1F1F3",
+ "char": "🇨🇳",
+ "name": "China"
+ },
+ {
+ "no": 2412,
+ "code": "1F1E8 1F1F4",
+ "char": "🇨🇴",
+ "name": "Colombia"
+ },
+ {
+ "no": 2413,
+ "code": "1F1E8 1F1F5",
+ "char": "🇨🇵",
+ "name": "Clipperton Island"
+ },
+ {
+ "no": 2414,
+ "code": "1F1E8 1F1F7",
+ "char": "🇨🇷",
+ "name": "Costa Rica"
+ },
+ {
+ "no": 2415,
+ "code": "1F1E8 1F1FA",
+ "char": "🇨🇺",
+ "name": "Cuba"
+ },
+ {
+ "no": 2416,
+ "code": "1F1E8 1F1FB",
+ "char": "🇨🇻",
+ "name": "Cape Verde"
+ },
+ {
+ "no": 2417,
+ "code": "1F1E8 1F1FC",
+ "char": "🇨🇼",
+ "name": "Curaçao"
+ },
+ {
+ "no": 2418,
+ "code": "1F1E8 1F1FD",
+ "char": "🇨🇽",
+ "name": "Christmas Island"
+ },
+ {
+ "no": 2419,
+ "code": "1F1E8 1F1FE",
+ "char": "🇨🇾",
+ "name": "Cyprus"
+ },
+ {
+ "no": 2420,
+ "code": "1F1E8 1F1FF",
+ "char": "🇨🇿",
+ "name": "Czechia"
+ },
+ {
+ "no": 2421,
+ "code": "1F1E9 1F1EA",
+ "char": "🇩🇪",
+ "name": "Germany"
+ },
+ {
+ "no": 2422,
+ "code": "1F1E9 1F1EC",
+ "char": "🇩🇬",
+ "name": "Diego Garcia"
+ },
+ {
+ "no": 2423,
+ "code": "1F1E9 1F1EF",
+ "char": "🇩🇯",
+ "name": "Djibouti"
+ },
+ {
+ "no": 2424,
+ "code": "1F1E9 1F1F0",
+ "char": "🇩🇰",
+ "name": "Denmark"
+ },
+ {
+ "no": 2425,
+ "code": "1F1E9 1F1F2",
+ "char": "🇩🇲",
+ "name": "Dominica"
+ },
+ {
+ "no": 2426,
+ "code": "1F1E9 1F1F4",
+ "char": "🇩🇴",
+ "name": "Dominican Republic"
+ },
+ {
+ "no": 2427,
+ "code": "1F1E9 1F1FF",
+ "char": "🇩🇿",
+ "name": "Algeria"
+ },
+ {
+ "no": 2428,
+ "code": "1F1EA 1F1E6",
+ "char": "🇪🇦",
+ "name": "Ceuta & Melilla"
+ },
+ {
+ "no": 2429,
+ "code": "1F1EA 1F1E8",
+ "char": "🇪🇨",
+ "name": "Ecuador"
+ },
+ {
+ "no": 2430,
+ "code": "1F1EA 1F1EA",
+ "char": "🇪🇪",
+ "name": "Estonia"
+ },
+ {
+ "no": 2431,
+ "code": "1F1EA 1F1EC",
+ "char": "🇪🇬",
+ "name": "Egypt"
+ },
+ {
+ "no": 2432,
+ "code": "1F1EA 1F1ED",
+ "char": "🇪🇭",
+ "name": "Western Sahara"
+ },
+ {
+ "no": 2433,
+ "code": "1F1EA 1F1F7",
+ "char": "🇪🇷",
+ "name": "Eritrea"
+ },
+ {
+ "no": 2434,
+ "code": "1F1EA 1F1F8",
+ "char": "🇪🇸",
+ "name": "Spain"
+ },
+ {
+ "no": 2435,
+ "code": "1F1EA 1F1F9",
+ "char": "🇪🇹",
+ "name": "Ethiopia"
+ },
+ {
+ "no": 2436,
+ "code": "1F1EA 1F1FA",
+ "char": "🇪🇺",
+ "name": "European Union"
+ },
+ {
+ "no": 2437,
+ "code": "1F1EB 1F1EE",
+ "char": "🇫🇮",
+ "name": "Finland"
+ },
+ {
+ "no": 2438,
+ "code": "1F1EB 1F1EF",
+ "char": "🇫🇯",
+ "name": "Fiji"
+ },
+ {
+ "no": 2439,
+ "code": "1F1EB 1F1F0",
+ "char": "🇫🇰",
+ "name": "Falkland Islands"
+ },
+ {
+ "no": 2440,
+ "code": "1F1EB 1F1F2",
+ "char": "🇫🇲",
+ "name": "Micronesia"
+ },
+ {
+ "no": 2441,
+ "code": "1F1EB 1F1F4",
+ "char": "🇫🇴",
+ "name": "Faroe Islands"
+ },
+ {
+ "no": 2442,
+ "code": "1F1EB 1F1F7",
+ "char": "🇫🇷",
+ "name": "France"
+ },
+ {
+ "no": 2443,
+ "code": "1F1EC 1F1E6",
+ "char": "🇬🇦",
+ "name": "Gabon"
+ },
+ {
+ "no": 2444,
+ "code": "1F1EC 1F1E7",
+ "char": "🇬🇧",
+ "name": "United Kingdom"
+ },
+ {
+ "no": 2445,
+ "code": "1F1EC 1F1E9",
+ "char": "🇬🇩",
+ "name": "Grenada"
+ },
+ {
+ "no": 2446,
+ "code": "1F1EC 1F1EA",
+ "char": "🇬🇪",
+ "name": "Georgia"
+ },
+ {
+ "no": 2447,
+ "code": "1F1EC 1F1EB",
+ "char": "🇬🇫",
+ "name": "French Guiana"
+ },
+ {
+ "no": 2448,
+ "code": "1F1EC 1F1EC",
+ "char": "🇬🇬",
+ "name": "Guernsey"
+ },
+ {
+ "no": 2449,
+ "code": "1F1EC 1F1ED",
+ "char": "🇬🇭",
+ "name": "Ghana"
+ },
+ {
+ "no": 2450,
+ "code": "1F1EC 1F1EE",
+ "char": "🇬🇮",
+ "name": "Gibraltar"
+ },
+ {
+ "no": 2451,
+ "code": "1F1EC 1F1F1",
+ "char": "🇬🇱",
+ "name": "Greenland"
+ },
+ {
+ "no": 2452,
+ "code": "1F1EC 1F1F2",
+ "char": "🇬🇲",
+ "name": "Gambia"
+ },
+ {
+ "no": 2453,
+ "code": "1F1EC 1F1F3",
+ "char": "🇬🇳",
+ "name": "Guinea"
+ },
+ {
+ "no": 2454,
+ "code": "1F1EC 1F1F5",
+ "char": "🇬🇵",
+ "name": "Guadeloupe"
+ },
+ {
+ "no": 2455,
+ "code": "1F1EC 1F1F6",
+ "char": "🇬🇶",
+ "name": "Equatorial Guinea"
+ },
+ {
+ "no": 2456,
+ "code": "1F1EC 1F1F7",
+ "char": "🇬🇷",
+ "name": "Greece"
+ },
+ {
+ "no": 2457,
+ "code": "1F1EC 1F1F8",
+ "char": "🇬🇸",
+ "name": "South Georgia & South Sandwich Islands"
+ },
+ {
+ "no": 2458,
+ "code": "1F1EC 1F1F9",
+ "char": "🇬🇹",
+ "name": "Guatemala"
+ },
+ {
+ "no": 2459,
+ "code": "1F1EC 1F1FA",
+ "char": "🇬🇺",
+ "name": "Guam"
+ },
+ {
+ "no": 2460,
+ "code": "1F1EC 1F1FC",
+ "char": "🇬🇼",
+ "name": "Guinea-Bissau"
+ },
+ {
+ "no": 2461,
+ "code": "1F1EC 1F1FE",
+ "char": "🇬🇾",
+ "name": "Guyana"
+ },
+ {
+ "no": 2462,
+ "code": "1F1ED 1F1F0",
+ "char": "🇭🇰",
+ "name": "Hong Kong SAR China"
+ },
+ {
+ "no": 2463,
+ "code": "1F1ED 1F1F2",
+ "char": "🇭🇲",
+ "name": "Heard & McDonald Islands"
+ },
+ {
+ "no": 2464,
+ "code": "1F1ED 1F1F3",
+ "char": "🇭🇳",
+ "name": "Honduras"
+ },
+ {
+ "no": 2465,
+ "code": "1F1ED 1F1F7",
+ "char": "🇭🇷",
+ "name": "Croatia"
+ },
+ {
+ "no": 2466,
+ "code": "1F1ED 1F1F9",
+ "char": "🇭🇹",
+ "name": "Haiti"
+ },
+ {
+ "no": 2467,
+ "code": "1F1ED 1F1FA",
+ "char": "🇭🇺",
+ "name": "Hungary"
+ },
+ {
+ "no": 2468,
+ "code": "1F1EE 1F1E8",
+ "char": "🇮🇨",
+ "name": "Canary Islands"
+ },
+ {
+ "no": 2469,
+ "code": "1F1EE 1F1E9",
+ "char": "🇮🇩",
+ "name": "Indonesia"
+ },
+ {
+ "no": 2470,
+ "code": "1F1EE 1F1EA",
+ "char": "🇮🇪",
+ "name": "Ireland"
+ },
+ {
+ "no": 2471,
+ "code": "1F1EE 1F1F1",
+ "char": "🇮🇱",
+ "name": "Israel"
+ },
+ {
+ "no": 2472,
+ "code": "1F1EE 1F1F2",
+ "char": "🇮🇲",
+ "name": "Isle of Man"
+ },
+ {
+ "no": 2473,
+ "code": "1F1EE 1F1F3",
+ "char": "🇮🇳",
+ "name": "India"
+ },
+ {
+ "no": 2474,
+ "code": "1F1EE 1F1F4",
+ "char": "🇮🇴",
+ "name": "British Indian Ocean Territory"
+ },
+ {
+ "no": 2475,
+ "code": "1F1EE 1F1F6",
+ "char": "🇮🇶",
+ "name": "Iraq"
+ },
+ {
+ "no": 2476,
+ "code": "1F1EE 1F1F7",
+ "char": "🇮🇷",
+ "name": "Iran"
+ },
+ {
+ "no": 2477,
+ "code": "1F1EE 1F1F8",
+ "char": "🇮🇸",
+ "name": "Iceland"
+ },
+ {
+ "no": 2478,
+ "code": "1F1EE 1F1F9",
+ "char": "🇮🇹",
+ "name": "Italy"
+ },
+ {
+ "no": 2479,
+ "code": "1F1EF 1F1EA",
+ "char": "🇯🇪",
+ "name": "Jersey"
+ },
+ {
+ "no": 2480,
+ "code": "1F1EF 1F1F2",
+ "char": "🇯🇲",
+ "name": "Jamaica"
+ },
+ {
+ "no": 2481,
+ "code": "1F1EF 1F1F4",
+ "char": "🇯🇴",
+ "name": "Jordan"
+ },
+ {
+ "no": 2482,
+ "code": "1F1EF 1F1F5",
+ "char": "🇯🇵",
+ "name": "Japan"
+ },
+ {
+ "no": 2483,
+ "code": "1F1F0 1F1EA",
+ "char": "🇰🇪",
+ "name": "Kenya"
+ },
+ {
+ "no": 2484,
+ "code": "1F1F0 1F1EC",
+ "char": "🇰🇬",
+ "name": "Kyrgyzstan"
+ },
+ {
+ "no": 2485,
+ "code": "1F1F0 1F1ED",
+ "char": "🇰🇭",
+ "name": "Cambodia"
+ },
+ {
+ "no": 2486,
+ "code": "1F1F0 1F1EE",
+ "char": "🇰🇮",
+ "name": "Kiribati"
+ },
+ {
+ "no": 2487,
+ "code": "1F1F0 1F1F2",
+ "char": "🇰🇲",
+ "name": "Comoros"
+ },
+ {
+ "no": 2488,
+ "code": "1F1F0 1F1F3",
+ "char": "🇰🇳",
+ "name": "St. Kitts & Nevis"
+ },
+ {
+ "no": 2489,
+ "code": "1F1F0 1F1F5",
+ "char": "🇰🇵",
+ "name": "North Korea"
+ },
+ {
+ "no": 2490,
+ "code": "1F1F0 1F1F7",
+ "char": "🇰🇷",
+ "name": "South Korea"
+ },
+ {
+ "no": 2491,
+ "code": "1F1F0 1F1FC",
+ "char": "🇰🇼",
+ "name": "Kuwait"
+ },
+ {
+ "no": 2492,
+ "code": "1F1F0 1F1FE",
+ "char": "🇰🇾",
+ "name": "Cayman Islands"
+ },
+ {
+ "no": 2493,
+ "code": "1F1F0 1F1FF",
+ "char": "🇰🇿",
+ "name": "Kazakhstan"
+ },
+ {
+ "no": 2494,
+ "code": "1F1F1 1F1E6",
+ "char": "🇱🇦",
+ "name": "Laos"
+ },
+ {
+ "no": 2495,
+ "code": "1F1F1 1F1E7",
+ "char": "🇱🇧",
+ "name": "Lebanon"
+ },
+ {
+ "no": 2496,
+ "code": "1F1F1 1F1E8",
+ "char": "🇱🇨",
+ "name": "St. Lucia"
+ },
+ {
+ "no": 2497,
+ "code": "1F1F1 1F1EE",
+ "char": "🇱🇮",
+ "name": "Liechtenstein"
+ },
+ {
+ "no": 2498,
+ "code": "1F1F1 1F1F0",
+ "char": "🇱🇰",
+ "name": "Sri Lanka"
+ },
+ {
+ "no": 2499,
+ "code": "1F1F1 1F1F7",
+ "char": "🇱🇷",
+ "name": "Liberia"
+ },
+ {
+ "no": 2500,
+ "code": "1F1F1 1F1F8",
+ "char": "🇱🇸",
+ "name": "Lesotho"
+ },
+ {
+ "no": 2501,
+ "code": "1F1F1 1F1F9",
+ "char": "🇱🇹",
+ "name": "Lithuania"
+ },
+ {
+ "no": 2502,
+ "code": "1F1F1 1F1FA",
+ "char": "🇱🇺",
+ "name": "Luxembourg"
+ },
+ {
+ "no": 2503,
+ "code": "1F1F1 1F1FB",
+ "char": "🇱🇻",
+ "name": "Latvia"
+ },
+ {
+ "no": 2504,
+ "code": "1F1F1 1F1FE",
+ "char": "🇱🇾",
+ "name": "Libya"
+ },
+ {
+ "no": 2505,
+ "code": "1F1F2 1F1E6",
+ "char": "🇲🇦",
+ "name": "Morocco"
+ },
+ {
+ "no": 2506,
+ "code": "1F1F2 1F1E8",
+ "char": "🇲🇨",
+ "name": "Monaco"
+ },
+ {
+ "no": 2507,
+ "code": "1F1F2 1F1E9",
+ "char": "🇲🇩",
+ "name": "Moldova"
+ },
+ {
+ "no": 2508,
+ "code": "1F1F2 1F1EA",
+ "char": "🇲🇪",
+ "name": "Montenegro"
+ },
+ {
+ "no": 2509,
+ "code": "1F1F2 1F1EB",
+ "char": "🇲🇫",
+ "name": "St. Martin"
+ },
+ {
+ "no": 2510,
+ "code": "1F1F2 1F1EC",
+ "char": "🇲🇬",
+ "name": "Madagascar"
+ },
+ {
+ "no": 2511,
+ "code": "1F1F2 1F1ED",
+ "char": "🇲🇭",
+ "name": "Marshall Islands"
+ },
+ {
+ "no": 2512,
+ "code": "1F1F2 1F1F0",
+ "char": "🇲🇰",
+ "name": "Macedonia"
+ },
+ {
+ "no": 2513,
+ "code": "1F1F2 1F1F1",
+ "char": "🇲🇱",
+ "name": "Mali"
+ },
+ {
+ "no": 2514,
+ "code": "1F1F2 1F1F2",
+ "char": "🇲🇲",
+ "name": "Myanmar (Burma)"
+ },
+ {
+ "no": 2515,
+ "code": "1F1F2 1F1F3",
+ "char": "🇲🇳",
+ "name": "Mongolia"
+ },
+ {
+ "no": 2516,
+ "code": "1F1F2 1F1F4",
+ "char": "🇲🇴",
+ "name": "Macau SAR China"
+ },
+ {
+ "no": 2517,
+ "code": "1F1F2 1F1F5",
+ "char": "🇲🇵",
+ "name": "Northern Mariana Islands"
+ },
+ {
+ "no": 2518,
+ "code": "1F1F2 1F1F6",
+ "char": "🇲🇶",
+ "name": "Martinique"
+ },
+ {
+ "no": 2519,
+ "code": "1F1F2 1F1F7",
+ "char": "🇲🇷",
+ "name": "Mauritania"
+ },
+ {
+ "no": 2520,
+ "code": "1F1F2 1F1F8",
+ "char": "🇲🇸",
+ "name": "Montserrat"
+ },
+ {
+ "no": 2521,
+ "code": "1F1F2 1F1F9",
+ "char": "🇲🇹",
+ "name": "Malta"
+ },
+ {
+ "no": 2522,
+ "code": "1F1F2 1F1FA",
+ "char": "🇲🇺",
+ "name": "Mauritius"
+ },
+ {
+ "no": 2523,
+ "code": "1F1F2 1F1FB",
+ "char": "🇲🇻",
+ "name": "Maldives"
+ },
+ {
+ "no": 2524,
+ "code": "1F1F2 1F1FC",
+ "char": "🇲🇼",
+ "name": "Malawi"
+ },
+ {
+ "no": 2525,
+ "code": "1F1F2 1F1FD",
+ "char": "🇲🇽",
+ "name": "Mexico"
+ },
+ {
+ "no": 2526,
+ "code": "1F1F2 1F1FE",
+ "char": "🇲🇾",
+ "name": "Malaysia"
+ },
+ {
+ "no": 2527,
+ "code": "1F1F2 1F1FF",
+ "char": "🇲🇿",
+ "name": "Mozambique"
+ },
+ {
+ "no": 2528,
+ "code": "1F1F3 1F1E6",
+ "char": "🇳🇦",
+ "name": "Namibia"
+ },
+ {
+ "no": 2529,
+ "code": "1F1F3 1F1E8",
+ "char": "🇳🇨",
+ "name": "New Caledonia"
+ },
+ {
+ "no": 2530,
+ "code": "1F1F3 1F1EA",
+ "char": "🇳🇪",
+ "name": "Niger"
+ },
+ {
+ "no": 2531,
+ "code": "1F1F3 1F1EB",
+ "char": "🇳🇫",
+ "name": "Norfolk Island"
+ },
+ {
+ "no": 2532,
+ "code": "1F1F3 1F1EC",
+ "char": "🇳🇬",
+ "name": "Nigeria"
+ },
+ {
+ "no": 2533,
+ "code": "1F1F3 1F1EE",
+ "char": "🇳🇮",
+ "name": "Nicaragua"
+ },
+ {
+ "no": 2534,
+ "code": "1F1F3 1F1F1",
+ "char": "🇳🇱",
+ "name": "Netherlands"
+ },
+ {
+ "no": 2535,
+ "code": "1F1F3 1F1F4",
+ "char": "🇳🇴",
+ "name": "Norway"
+ },
+ {
+ "no": 2536,
+ "code": "1F1F3 1F1F5",
+ "char": "🇳🇵",
+ "name": "Nepal"
+ },
+ {
+ "no": 2537,
+ "code": "1F1F3 1F1F7",
+ "char": "🇳🇷",
+ "name": "Nauru"
+ },
+ {
+ "no": 2538,
+ "code": "1F1F3 1F1FA",
+ "char": "🇳🇺",
+ "name": "Niue"
+ },
+ {
+ "no": 2539,
+ "code": "1F1F3 1F1FF",
+ "char": "🇳🇿",
+ "name": "New Zealand"
+ },
+ {
+ "no": 2540,
+ "code": "1F1F4 1F1F2",
+ "char": "🇴🇲",
+ "name": "Oman"
+ },
+ {
+ "no": 2541,
+ "code": "1F1F5 1F1E6",
+ "char": "🇵🇦",
+ "name": "Panama"
+ },
+ {
+ "no": 2542,
+ "code": "1F1F5 1F1EA",
+ "char": "🇵🇪",
+ "name": "Peru"
+ },
+ {
+ "no": 2543,
+ "code": "1F1F5 1F1EB",
+ "char": "🇵🇫",
+ "name": "French Polynesia"
+ },
+ {
+ "no": 2544,
+ "code": "1F1F5 1F1EC",
+ "char": "🇵🇬",
+ "name": "Papua New Guinea"
+ },
+ {
+ "no": 2545,
+ "code": "1F1F5 1F1ED",
+ "char": "🇵🇭",
+ "name": "Philippines"
+ },
+ {
+ "no": 2546,
+ "code": "1F1F5 1F1F0",
+ "char": "🇵🇰",
+ "name": "Pakistan"
+ },
+ {
+ "no": 2547,
+ "code": "1F1F5 1F1F1",
+ "char": "🇵🇱",
+ "name": "Poland"
+ },
+ {
+ "no": 2548,
+ "code": "1F1F5 1F1F2",
+ "char": "🇵🇲",
+ "name": "St. Pierre & Miquelon"
+ },
+ {
+ "no": 2549,
+ "code": "1F1F5 1F1F3",
+ "char": "🇵🇳",
+ "name": "Pitcairn Islands"
+ },
+ {
+ "no": 2550,
+ "code": "1F1F5 1F1F7",
+ "char": "🇵🇷",
+ "name": "Puerto Rico"
+ },
+ {
+ "no": 2551,
+ "code": "1F1F5 1F1F8",
+ "char": "🇵🇸",
+ "name": "Palestinian Territories"
+ },
+ {
+ "no": 2552,
+ "code": "1F1F5 1F1F9",
+ "char": "🇵🇹",
+ "name": "Portugal"
+ },
+ {
+ "no": 2553,
+ "code": "1F1F5 1F1FC",
+ "char": "🇵🇼",
+ "name": "Palau"
+ },
+ {
+ "no": 2554,
+ "code": "1F1F5 1F1FE",
+ "char": "🇵🇾",
+ "name": "Paraguay"
+ },
+ {
+ "no": 2555,
+ "code": "1F1F6 1F1E6",
+ "char": "🇶🇦",
+ "name": "Qatar"
+ },
+ {
+ "no": 2556,
+ "code": "1F1F7 1F1EA",
+ "char": "🇷🇪",
+ "name": "Réunion"
+ },
+ {
+ "no": 2557,
+ "code": "1F1F7 1F1F4",
+ "char": "🇷🇴",
+ "name": "Romania"
+ },
+ {
+ "no": 2558,
+ "code": "1F1F7 1F1F8",
+ "char": "🇷🇸",
+ "name": "Serbia"
+ },
+ {
+ "no": 2559,
+ "code": "1F1F7 1F1FA",
+ "char": "🇷🇺",
+ "name": "Russia"
+ },
+ {
+ "no": 2560,
+ "code": "1F1F7 1F1FC",
+ "char": "🇷🇼",
+ "name": "Rwanda"
+ },
+ {
+ "no": 2561,
+ "code": "1F1F8 1F1E6",
+ "char": "🇸🇦",
+ "name": "Saudi Arabia"
+ },
+ {
+ "no": 2562,
+ "code": "1F1F8 1F1E7",
+ "char": "🇸🇧",
+ "name": "Solomon Islands"
+ },
+ {
+ "no": 2563,
+ "code": "1F1F8 1F1E8",
+ "char": "🇸🇨",
+ "name": "Seychelles"
+ },
+ {
+ "no": 2564,
+ "code": "1F1F8 1F1E9",
+ "char": "🇸🇩",
+ "name": "Sudan"
+ },
+ {
+ "no": 2565,
+ "code": "1F1F8 1F1EA",
+ "char": "🇸🇪",
+ "name": "Sweden"
+ },
+ {
+ "no": 2566,
+ "code": "1F1F8 1F1EC",
+ "char": "🇸🇬",
+ "name": "Singapore"
+ },
+ {
+ "no": 2567,
+ "code": "1F1F8 1F1ED",
+ "char": "🇸🇭",
+ "name": "St. Helena"
+ },
+ {
+ "no": 2568,
+ "code": "1F1F8 1F1EE",
+ "char": "🇸🇮",
+ "name": "Slovenia"
+ },
+ {
+ "no": 2569,
+ "code": "1F1F8 1F1EF",
+ "char": "🇸🇯",
+ "name": "Svalbard & Jan Mayen"
+ },
+ {
+ "no": 2570,
+ "code": "1F1F8 1F1F0",
+ "char": "🇸🇰",
+ "name": "Slovakia"
+ },
+ {
+ "no": 2571,
+ "code": "1F1F8 1F1F1",
+ "char": "🇸🇱",
+ "name": "Sierra Leone"
+ },
+ {
+ "no": 2572,
+ "code": "1F1F8 1F1F2",
+ "char": "🇸🇲",
+ "name": "San Marino"
+ },
+ {
+ "no": 2573,
+ "code": "1F1F8 1F1F3",
+ "char": "🇸🇳",
+ "name": "Senegal"
+ },
+ {
+ "no": 2574,
+ "code": "1F1F8 1F1F4",
+ "char": "🇸🇴",
+ "name": "Somalia"
+ },
+ {
+ "no": 2575,
+ "code": "1F1F8 1F1F7",
+ "char": "🇸🇷",
+ "name": "Suriname"
+ },
+ {
+ "no": 2576,
+ "code": "1F1F8 1F1F8",
+ "char": "🇸🇸",
+ "name": "South Sudan"
+ },
+ {
+ "no": 2577,
+ "code": "1F1F8 1F1F9",
+ "char": "🇸🇹",
+ "name": "São Tomé & Príncipe"
+ },
+ {
+ "no": 2578,
+ "code": "1F1F8 1F1FB",
+ "char": "🇸🇻",
+ "name": "El Salvador"
+ },
+ {
+ "no": 2579,
+ "code": "1F1F8 1F1FD",
+ "char": "🇸🇽",
+ "name": "Sint Maarten"
+ },
+ {
+ "no": 2580,
+ "code": "1F1F8 1F1FE",
+ "char": "🇸🇾",
+ "name": "Syria"
+ },
+ {
+ "no": 2581,
+ "code": "1F1F8 1F1FF",
+ "char": "🇸🇿",
+ "name": "Swaziland"
+ },
+ {
+ "no": 2582,
+ "code": "1F1F9 1F1E6",
+ "char": "🇹🇦",
+ "name": "Tristan da Cunha"
+ },
+ {
+ "no": 2583,
+ "code": "1F1F9 1F1E8",
+ "char": "🇹🇨",
+ "name": "Turks & Caicos Islands"
+ },
+ {
+ "no": 2584,
+ "code": "1F1F9 1F1E9",
+ "char": "🇹🇩",
+ "name": "Chad"
+ },
+ {
+ "no": 2585,
+ "code": "1F1F9 1F1EB",
+ "char": "🇹🇫",
+ "name": "French Southern Territories"
+ },
+ {
+ "no": 2586,
+ "code": "1F1F9 1F1EC",
+ "char": "🇹🇬",
+ "name": "Togo"
+ },
+ {
+ "no": 2587,
+ "code": "1F1F9 1F1ED",
+ "char": "🇹🇭",
+ "name": "Thailand"
+ },
+ {
+ "no": 2588,
+ "code": "1F1F9 1F1EF",
+ "char": "🇹🇯",
+ "name": "Tajikistan"
+ },
+ {
+ "no": 2589,
+ "code": "1F1F9 1F1F0",
+ "char": "🇹🇰",
+ "name": "Tokelau"
+ },
+ {
+ "no": 2590,
+ "code": "1F1F9 1F1F1",
+ "char": "🇹🇱",
+ "name": "Timor-Leste"
+ },
+ {
+ "no": 2591,
+ "code": "1F1F9 1F1F2",
+ "char": "🇹🇲",
+ "name": "Turkmenistan"
+ },
+ {
+ "no": 2592,
+ "code": "1F1F9 1F1F3",
+ "char": "🇹🇳",
+ "name": "Tunisia"
+ },
+ {
+ "no": 2593,
+ "code": "1F1F9 1F1F4",
+ "char": "🇹🇴",
+ "name": "Tonga"
+ },
+ {
+ "no": 2594,
+ "code": "1F1F9 1F1F7",
+ "char": "🇹🇷",
+ "name": "Turkey"
+ },
+ {
+ "no": 2595,
+ "code": "1F1F9 1F1F9",
+ "char": "🇹🇹",
+ "name": "Trinidad & Tobago"
+ },
+ {
+ "no": 2596,
+ "code": "1F1F9 1F1FB",
+ "char": "🇹🇻",
+ "name": "Tuvalu"
+ },
+ {
+ "no": 2597,
+ "code": "1F1F9 1F1FC",
+ "char": "🇹🇼",
+ "name": "Taiwan"
+ },
+ {
+ "no": 2598,
+ "code": "1F1F9 1F1FF",
+ "char": "🇹🇿",
+ "name": "Tanzania"
+ },
+ {
+ "no": 2599,
+ "code": "1F1FA 1F1E6",
+ "char": "🇺🇦",
+ "name": "Ukraine"
+ },
+ {
+ "no": 2600,
+ "code": "1F1FA 1F1EC",
+ "char": "🇺🇬",
+ "name": "Uganda"
+ },
+ {
+ "no": 2601,
+ "code": "1F1FA 1F1F2",
+ "char": "🇺🇲",
+ "name": "U.S. Outlying Islands"
+ },
+ {
+ "no": 2602,
+ "code": "1F1FA 1F1F3",
+ "char": "🇺🇳",
+ "name": "United Nations"
+ },
+ {
+ "no": 2603,
+ "code": "1F1FA 1F1F8",
+ "char": "🇺🇸",
+ "name": "United States"
+ },
+ {
+ "no": 2604,
+ "code": "1F1FA 1F1FE",
+ "char": "🇺🇾",
+ "name": "Uruguay"
+ },
+ {
+ "no": 2605,
+ "code": "1F1FA 1F1FF",
+ "char": "🇺🇿",
+ "name": "Uzbekistan"
+ },
+ {
+ "no": 2606,
+ "code": "1F1FB 1F1E6",
+ "char": "🇻🇦",
+ "name": "Vatican City"
+ },
+ {
+ "no": 2607,
+ "code": "1F1FB 1F1E8",
+ "char": "🇻🇨",
+ "name": "St. Vincent & Grenadines"
+ },
+ {
+ "no": 2608,
+ "code": "1F1FB 1F1EA",
+ "char": "🇻🇪",
+ "name": "Venezuela"
+ },
+ {
+ "no": 2609,
+ "code": "1F1FB 1F1EC",
+ "char": "🇻🇬",
+ "name": "British Virgin Islands"
+ },
+ {
+ "no": 2610,
+ "code": "1F1FB 1F1EE",
+ "char": "🇻🇮",
+ "name": "U.S. Virgin Islands"
+ },
+ {
+ "no": 2611,
+ "code": "1F1FB 1F1F3",
+ "char": "🇻🇳",
+ "name": "Vietnam"
+ },
+ {
+ "no": 2612,
+ "code": "1F1FB 1F1FA",
+ "char": "🇻🇺",
+ "name": "Vanuatu"
+ },
+ {
+ "no": 2613,
+ "code": "1F1FC 1F1EB",
+ "char": "🇼🇫",
+ "name": "Wallis & Futuna"
+ },
+ {
+ "no": 2614,
+ "code": "1F1FC 1F1F8",
+ "char": "🇼🇸",
+ "name": "Samoa"
+ },
+ {
+ "no": 2615,
+ "code": "1F1FD 1F1F0",
+ "char": "🇽🇰",
+ "name": "Kosovo"
+ },
+ {
+ "no": 2616,
+ "code": "1F1FE 1F1EA",
+ "char": "🇾🇪",
+ "name": "Yemen"
+ },
+ {
+ "no": 2617,
+ "code": "1F1FE 1F1F9",
+ "char": "🇾🇹",
+ "name": "Mayotte"
+ },
+ {
+ "no": 2618,
+ "code": "1F1FF 1F1E6",
+ "char": "🇿🇦",
+ "name": "South Africa"
+ },
+ {
+ "no": 2619,
+ "code": "1F1FF 1F1F2",
+ "char": "🇿🇲",
+ "name": "Zambia"
+ },
+ {
+ "no": 2620,
+ "code": "1F1FF 1F1FC",
+ "char": "🇿🇼",
+ "name": "Zimbabwe"
+ },
+ {
+ "no": 2621,
+ "code": "1F3F4 E0067 E0062 E0065 E006E E0067 E007F",
+ "char": "🏴󠁧󠁢󠁥󠁮󠁧󠁿",
+ "name": "⊛ England"
+ },
+ {
+ "no": 2622,
+ "code": "1F3F4 E0067 E0062 E0073 E0063 E0074 E007F",
+ "char": "🏴󠁧󠁢󠁳󠁣󠁴󠁿",
+ "name": "⊛ Scotland"
+ },
+ {
+ "no": 2623,
+ "code": "1F3F4 E0067 E0062 E0077 E006C E0073 E007F",
+ "char": "🏴󠁧󠁢󠁷󠁬󠁳󠁿",
+ "name": "⊛ Wales"
+ }
+]
diff --git a/data/gnome-shell-dbus-interfaces.gresource.xml b/data/gnome-shell-dbus-interfaces.gresource.xml
new file mode 100644
index 0000000..6682c46
--- /dev/null
+++ b/data/gnome-shell-dbus-interfaces.gresource.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/shell/dbus-interfaces">
+ <file preprocess="xml-stripblanks">net.hadess.PowerProfiles.xml</file>
+ <file preprocess="xml-stripblanks">net.hadess.SensorProxy.xml</file>
+ <file preprocess="xml-stripblanks">net.reactivated.Fprint.Device.xml</file>
+ <file preprocess="xml-stripblanks">net.reactivated.Fprint.Manager.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.Application.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.bolt1.Device.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.bolt1.Manager.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.DBus.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.GeoClue2.Agent.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.GeoClue2.Manager.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.impl.portal.Access.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.impl.portal.PermissionStore.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.impl.portal.Request.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.login1.Manager.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.login1.Session.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.login1.User.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.ModemManager1.Modem.Modem3gpp.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.ModemManager1.Modem.ModemCdma.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.ModemManager1.Modem.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.ModemManager.Modem.Cdma.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.ModemManager.Modem.Gsm.Network.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.Notifications.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.PackageKit.Offline.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.realmd.Provider.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.realmd.Realm.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.realmd.Service.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.UPower.Device.xml</file>
+ <file preprocess="xml-stripblanks">org.freedesktop.UPower.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Mutter.ScreenCast.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.ScreenSaver.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SessionManager.EndSessionDialog.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SessionManager.Inhibitor.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SessionManager.Presence.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SessionManager.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SettingsDaemon.Color.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SettingsDaemon.Power.Screen.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SettingsDaemon.Rfkill.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.SettingsDaemon.Wacom.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.AudioDeviceSelection.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.CalendarServer.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.ClocksIntegration.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.Extensions.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.Introspect.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.HotplugSniffer.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.PerfHelper.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.PortalHelper.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.Screencast.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.Screenshot.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.Wacom.PadOsd.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.WeatherIntegration.xml</file>
+ <file preprocess="xml-stripblanks">org.gnome.Shell.xml</file>
+ <file preprocess="xml-stripblanks">org.Gtk.MountOperationHandler.xml</file>
+ <file preprocess="xml-stripblanks">org.gtk.Notifications.xml</file>
+ <file preprocess="xml-stripblanks">org.mpris.MediaPlayer2.Player.xml</file>
+ <file preprocess="xml-stripblanks">org.mpris.MediaPlayer2.xml</file>
+ </gresource>
+</gresources>
diff --git a/data/gnome-shell-icons.gresource.xml b/data/gnome-shell-icons.gresource.xml
new file mode 100644
index 0000000..9b4e6f3
--- /dev/null
+++ b/data/gnome-shell-icons.gresource.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/shell/icons">
+ <file>scalable/actions/color-pick.svg</file>
+ <file>scalable/actions/carousel-arrow-next-symbolic.svg</file>
+ <file>scalable/actions/carousel-arrow-previous-symbolic.svg</file>
+ <file>scalable/actions/dark-mode-symbolic.svg</file>
+ <file>scalable/actions/pointer-double-click-symbolic.svg</file>
+ <file>scalable/actions/pointer-drag-symbolic.svg</file>
+ <file>scalable/actions/pointer-primary-click-symbolic.svg</file>
+ <file>scalable/actions/pointer-secondary-click-symbolic.svg</file>
+ <file>scalable/actions/preview-close-symbolic.svg</file>
+ <file>scalable/actions/screenshot-ui-area-symbolic.svg</file>
+ <file>scalable/actions/screenshot-ui-display-symbolic.svg</file>
+ <file>scalable/actions/screenshot-ui-show-pointer-symbolic.svg</file>
+ <file>scalable/actions/screenshot-ui-window-symbolic.svg</file>
+ <file>scalable/actions/record-screen-symbolic.svg</file>
+ <file>scalable/actions/screencast-recorded-symbolic.svg</file>
+ <file>scalable/actions/screenshot-recorded-symbolic.svg</file>
+ <file>scalable/status/keyboard-caps-lock-symbolic.svg</file>
+ <file>scalable/status/keyboard-enter-symbolic.svg</file>
+ <file>scalable/status/keyboard-hide-symbolic.svg</file>
+ <file>scalable/status/keyboard-layout-symbolic.svg</file>
+ <file>scalable/status/keyboard-shift-symbolic.svg</file>
+ <file>scalable/status/message-indicator-symbolic.svg</file>
+ <file>scalable/status/no-events-symbolic.svg</file>
+ <file>scalable/status/no-notifications-symbolic.svg</file>
+ <file>scalable/status/screen-privacy-disabled-symbolic.svg</file>
+ <file>scalable/status/screen-privacy-symbolic.svg</file>
+ <file>scalable/status/stop-symbolic.svg</file>
+ </gresource>
+</gresources>
+
diff --git a/data/gnome-shell-osk-layouts.gresource.xml b/data/gnome-shell-osk-layouts.gresource.xml
new file mode 100644
index 0000000..b511291
--- /dev/null
+++ b/data/gnome-shell-osk-layouts.gresource.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/shell/osk-layouts">
+ <file>am.json</file>
+ <file>ara.json</file>
+ <file>at.json</file>
+ <file>be.json</file>
+ <file>bg.json</file>
+ <file>by.json</file>
+ <file>ca.json</file>
+ <file>ch.json</file>
+ <file>ch+fr.json</file>
+ <file>cz.json</file>
+ <file>de.json</file>
+ <file>dk.json</file>
+ <file>ee.json</file>
+ <file>epo.json</file>
+ <file>es+cat.json</file>
+ <file>es.json</file>
+ <file>fi.json</file>
+ <file>fr.json</file>
+ <file>ge.json</file>
+ <file>gr.json</file>
+ <file>hr.json</file>
+ <file>hu.json</file>
+ <file>id.json</file>
+ <file>il.json</file>
+ <file>in+bolnagri.json</file>
+ <file>in+mal.json</file>
+ <file>ir.json</file>
+ <file>is.json</file>
+ <file>it.json</file>
+ <file>ke.json</file>
+ <file>kg.json</file>
+ <file>kh.json</file>
+ <file>kr.json</file>
+ <file>la.json</file>
+ <file>latam.json</file>
+ <file>lt.json</file>
+ <file>lv.json</file>
+ <file>mk.json</file>
+ <file>mn.json</file>
+ <file>my.json</file>
+ <file>nl.json</file>
+ <file>no.json</file>
+ <file>ph.json</file>
+ <file>pl.json</file>
+ <file>pt.json</file>
+ <file>ro.json</file>
+ <file>rs.json</file>
+ <file>ru.json</file>
+ <file>se.json</file>
+ <file>si.json</file>
+ <file>sk.json</file>
+ <file>th.json</file>
+ <file>tr.json</file>
+ <file>ua.json</file>
+ <file>uk.json</file>
+ <file>us.json</file>
+ <file>us-extended.json</file>
+ <file>vn.json</file>
+ <file>za.json</file>
+ <file>emoji.json</file>
+ </gresource>
+</gresources>
diff --git a/data/gnome-shell-overrides-migration.desktop.in b/data/gnome-shell-overrides-migration.desktop.in
new file mode 100644
index 0000000..99452e6
--- /dev/null
+++ b/data/gnome-shell-overrides-migration.desktop.in
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=GNOME settings overrides migration
+NoDisplay=true
+Exec=@libexecdir@/gnome-shell-overrides-migration.sh
diff --git a/data/gnome-shell-theme.gresource.xml b/data/gnome-shell-theme.gresource.xml
new file mode 100644
index 0000000..24b3be8
--- /dev/null
+++ b/data/gnome-shell-theme.gresource.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/shell/theme">
+ <file>calendar-today.svg</file>
+ <file>calendar-today-light.svg</file>
+ <file>checkbox.svg</file>
+ <file>checkbox-focused.svg</file>
+ <file>checkbox-off-focused-light.svg</file>
+ <file>checkbox-off-focused.svg</file>
+ <file>checkbox-off-light.svg</file>
+ <file>checkbox-off.svg</file>
+ <file>gnome-shell.css</file>
+ <file>gnome-shell-high-contrast.css</file>
+ <file>gnome-shell-start.svg</file>
+ <file>pad-osd.css</file>
+ <file>process-working.svg</file>
+ <file>toggle-off.svg</file>
+ <file>toggle-off-hc.svg</file>
+ <file>toggle-off-light.svg</file>
+ <file>toggle-on.svg</file>
+ <file>toggle-on-hc.svg</file>
+ <file>toggle-on-light.svg</file>
+ <file>workspace-placeholder.svg</file>
+ </gresource>
+</gresources>
diff --git a/data/gnome-shell.portal b/data/gnome-shell.portal
new file mode 100644
index 0000000..a7cd0d5
--- /dev/null
+++ b/data/gnome-shell.portal
@@ -0,0 +1,4 @@
+[portal]
+DBusName=org.gnome.Shell.Portal
+Interfaces=org.freedesktop.impl.portal.Access
+UseIn=gnome
diff --git a/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg b/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
new file mode 100644
index 0000000..496be6b
--- /dev/null
+++ b/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="10.23" y1="87.43" x2="133.236" y2="88.679" gradientTransform="translate(-8 -16)"><stop offset="0" stop-color="#208757"/><stop offset=".077" stop-color="#2ec27e"/><stop offset=".147" stop-color="#208a5a"/><stop offset=".198" stop-color="#26a269"/><stop offset=".364" stop-color="#1c774d"/><stop offset=".407" stop-color="#26a269"/><stop offset=".493" stop-color="#26a269"/><stop offset=".576" stop-color="#26a269"/><stop offset=".606" stop-color="#2ec27e"/><stop offset=".681" stop-color="#26a269"/><stop offset=".784" stop-color="#1d7a4e"/><stop offset=".945" stop-color="#28ab6f"/><stop offset="1" stop-color="#48d493"/></linearGradient></defs><path d="M21.965 18.363v4l2.039 17.75c.418 3.637 1.055 7.282.844 10.938-.106 1.828-.465 3.668-1.309 5.293-.426.812-.969 1.57-1.644 2.191-.676.621-1.485 1.106-2.364 1.356-1.047.297-2.156.261-3.238.164-1.094-.098-2.227-.282-3.137-.903-.394-.273-.73-.617-1.082-.945-.351-.328-.726-.645-1.168-.832-.691-.297-1.492-.254-2.207-.023-.715.23-1.355.64-1.972 1.066-1.188.824-2.325 1.758-3.184 2.922-1.734 2.344-2.203 5.46-1.711 8.336.367 2.152 1.258 4.238 2.688 5.89.722.836 1.582 1.563 2.566 2.063.98.504 2.09.773 3.195.71 1.446-.085 2.79-.73 4.114-1.327 1.32-.594 2.718-1.16 4.168-1.067a5.113 5.113 0 012.332.758 5.958 5.958 0 011.773 1.707c.848 1.242 1.234 2.742 1.531 4.219 1.832 9.133.778 18.82-2.98 27.344v4c6.812 2.347 13.8 4.199 20.886 5.535 2.356.441 4.801.824 7.13.246 1.163-.29 2.28-.832 3.148-1.66a5.39 5.39 0 001.441-2.34c.266-.887.278-1.828.254-2.754L54 110c-.426.09-.875.059-1.285-.082a2.751 2.751 0 01-1.16-.8 3.768 3.768 0 01-.7-1.231c-.316-.895-.351-1.864-.355-2.813-.008-1.57.063-3.187.684-4.629.629-1.465 1.793-2.652 3.117-3.535 2.64-1.758 5.898-2.375 9.07-2.414 2.91-.035 5.918.414 8.387 1.953 1.238.77 2.316 1.809 3.043 3.07.722 1.262 1.078 2.739.953 4.188-.098 1.117-.477 2.2-1.02 3.18A9.862 9.862 0 0172 110c.012.996.02 1.992.02 2.988.003.555.003 1.114.07 1.664.07.551.21 1.098.476 1.586.383.7 1.012 1.239 1.692 1.657.68.414 1.422.722 2.176.984 4.207 1.46 8.793 1.562 13.203.922a40.756 40.756 0 0015.86-5.88l-.005-4.003a60.146 60.146 0 01-3.433-25.465c.125-1.512.312-3.039.894-4.441.29-.7.68-1.364 1.18-1.93.504-.566 1.12-1.039 1.82-1.332.82-.344 1.727-.434 2.613-.367.887.07 1.75.297 2.598.57 1.688.547 3.344 1.297 5.117 1.418 1.492.098 2.996-.266 4.332-.937a9.894 9.894 0 004.016-3.715 9.91 9.91 0 001.418-5.285l.176-2.258a16.406 16.406 0 00-3.075-6.477c-.785-.996-1.707-1.914-2.835-2.496a5.247 5.247 0 00-1.805-.558 4.18 4.18 0 00-1.875.214c-.988.364-1.774 1.125-2.703 1.614-1.032.543-2.203.738-3.364.824-1.148.086-2.324.07-3.425-.274-1.48-.464-2.743-1.52-3.602-2.812-.855-1.293-1.332-2.805-1.59-4.328-.574-3.399-.117-6.871.266-10.297a227.56 227.56 0 001.34-19.973 497.333 497.333 0 01-21.118-5.117c-1.355-.36-2.718-.726-4.113-.894-1.394-.165-2.836-.118-4.168.332a7.108 7.108 0 00-2.93 1.894v4c0 .414.016.828.11 1.235.094.402.258.789.445 1.156.371.738.82 1.433 1.313 2.097.98 1.329 2.136 2.563 2.765 4.094.688 1.676.668 3.606.07 5.317-.597 1.707-1.75 3.203-3.179 4.312-1.43 1.113-3.133 1.852-4.895 2.262-1.765.414-3.593.508-5.402.406-2.926-.164-5.906-.875-8.25-2.633-1.172-.883-2.164-2.015-2.793-3.34-.625-1.324-.879-2.828-.668-4.277.293-1.973 1.399-3.71 2.45-5.406.421-.684.831-1.38 1.078-2.14.242-.763.296-1.571.308-2.372L54.633 18a1.89 1.89 0 01-1.695.777c-.516-.047-.989-.3-1.41-.601-.419-.301-.801-.653-1.231-.938-.871-.578-1.914-.855-2.957-.933-1.043-.075-2.09.039-3.125.191-2.403.356-4.77.91-7.176 1.266-2.402.351-4.832.46-7.262.496zm0 0" fill="url(#a)"/><path d="M21.965 18.363l2.039 17.746c.426 3.715 1.16 7.414 1.094 11.149-.035 1.867-.34 3.77-1.239 5.41-.449.816-1.047 1.562-1.785 2.133-.738.574-1.617.972-2.543 1.09-1.504.195-2.996-.344-4.379-.961-1.379-.621-2.75-1.344-4.246-1.555-1.465-.21-2.984.094-4.293.777-1.308.688-2.406 1.746-3.207 2.989-1.601 2.484-1.972 5.605-1.574 8.535.3 2.219 1.05 4.433 2.512 6.133.73.847 1.633 1.558 2.656 2.011 1.023.457 2.168.657 3.281.52 1.54-.192 2.926-1 4.324-1.676.704-.336 1.422-.644 2.176-.828.754-.184 1.551-.238 2.309-.066.82.183 1.566.628 2.164 1.218.601.586 1.05 1.313 1.375 2.086.64 1.551.762 3.258.84 4.934a123.2 123.2 0 01-2.25 29.965 133.42 133.42 0 0020.886 5.53c2.352.427 4.793.782 7.11.196 1.16-.293 2.27-.828 3.152-1.633.883-.804 1.528-1.89 1.711-3.074.133-.879.012-1.789-.25-2.64-.262-.852-.668-1.657-1.101-2.438-.868-1.559-1.887-3.086-2.227-4.84-.3-1.558-.023-3.207.676-4.633.703-1.425 1.816-2.629 3.12-3.535 2.614-1.804 5.9-2.383 9.075-2.41 2.91-.023 5.918.414 8.39 1.953 1.235.77 2.313 1.809 3.04 3.07.73 1.258 1.097 2.743.953 4.188-.117 1.113-.524 2.18-1.024 3.18-.5 1.004-1.093 1.957-1.609 2.949-.512.996-.95 2.047-1.11 3.152-.156 1.11-.019 2.29.555 3.25.41.684 1.02 1.23 1.696 1.649.675.422 1.418.722 2.168.992a30.23 30.23 0 0015.183 1.332 30.128 30.128 0 0013.88-6.293l-2.587-19.371c-.453-3.406-1.14-6.813-1.047-10.246.043-1.719.34-3.461 1.141-4.98a6.796 6.796 0 011.578-2.02 5.338 5.338 0 012.262-1.18c.8-.183 1.637-.164 2.441-.02.809.145 1.59.41 2.352.708 1.527.597 3.023 1.34 4.648 1.558 1.5.203 3.055-.062 4.426-.699 1.375-.64 2.566-1.648 3.469-2.863 1.808-2.434 2.418-5.625 2.047-8.63-.305-2.448-1.258-4.862-2.953-6.655-.848-.895-1.875-1.63-3.016-2.098-1.14-.473-2.395-.684-3.621-.563-1.637.157-3.153.875-4.688 1.461-.765.297-1.55.559-2.355.707-.809.149-1.649.176-2.45-.004-1.214-.27-2.296-1.007-3.081-1.972-.786-.965-1.286-2.14-1.547-3.36-.524-2.43-.125-4.953.23-7.414a199.18 199.18 0 002-24.914 119.325 119.325 0 00-22.3-4.867c-2.329-.281-4.75-.48-6.97.274-1.113.378-2.152 1-2.933 1.875-.781.87-1.289 2.011-1.312 3.183-.02.824.199 1.645.543 2.395.347.75.812 1.441 1.312 2.097 1 1.317 2.148 2.559 2.773 4.09.688 1.676.676 3.606.082 5.32-.593 1.711-1.746 3.207-3.175 4.32-1.434 1.114-3.137 1.852-4.903 2.263-1.765.41-3.593.5-5.406.394-2.918-.172-5.894-.89-8.23-2.652-1.168-.88-2.157-2.016-2.79-3.332-.632-1.317-.906-2.82-.69-4.266.296-1.965 1.437-3.68 2.398-5.418.48-.871.925-1.77 1.199-2.723.277-.953.379-1.976.168-2.945-.219-1.016-.774-1.941-1.512-2.672-.738-.726-1.652-1.261-2.629-1.617-1.949-.71-4.078-.707-6.148-.586a58.229 58.229 0 00-22.254 5.867zm0 0" fill="#33d17a"/></svg> \ No newline at end of file
diff --git a/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg b/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
new file mode 100644
index 0000000..4208a4d
--- /dev/null
+++ b/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M6.5 1.031c-.371 0-.742-.035-1.11.016-.367.05-.73.203-.972.476-.125.141-.215.309-.266.485-.047.18-.054.367-.02.55.032.184.102.356.192.516.09.164.203.309.317.457L5 4H2a1.8 1.8 0 00-.41.035.791.791 0 00-.36.195.791.791 0 00-.195.36C1 4.723 1 4.863 1 5v2.75l.77-.344c.265-.117.542-.23.832-.242.289-.016.586.074.812.254.227.18.383.441.465.723.082.277.101.57.121.859.02.316.04.637-.016.95-.058.312-.199.616-.43.831a1.264 1.264 0 01-.874.32c-.317-.007-.618-.128-.91-.257L1 10.5V14c0 .137.004.277.035.41a.791.791 0 00.195.36c.098.097.227.16.36.195.133.035.273.035.41.035h3l-.328-.68c-.14-.293-.274-.597-.29-.922-.015-.32.095-.652.31-.894.214-.242.523-.39.84-.453.316-.067.644-.059.968-.059.324 0 .652-.008.969.059.316.062.625.21.84.453.214.242.324.574.308.894-.015.325-.148.63-.289.922L8 15h3a1.8 1.8 0 00.41-.035.791.791 0 00.36-.195.791.791 0 00.195-.36C12 14.277 12 14.137 12 14v-3.563l.703.297c.29.125.59.239.902.246.313.004.63-.101.864-.308.238-.203.386-.496.46-.8C15 9.565 15 9.25 15 8.937c0-.313 0-.63-.07-.934-.075-.305-.223-.598-.461-.8a1.288 1.288 0 00-.864-.31c-.312.008-.613.122-.902.247L12 7.437V5a1.8 1.8 0 00-.035-.41.791.791 0 00-.195-.36.791.791 0 00-.36-.195C11.277 4 11.137 4 11 4H8l.36-.469c.113-.148.226-.293.316-.457.09-.16.16-.332.191-.515a1.248 1.248 0 00-.02-.551 1.256 1.256 0 00-.265-.485c-.242-.273-.605-.425-.973-.476-.367-.05-.738-.016-1.109-.016zm0 0" fill="#474747"/></svg> \ No newline at end of file
diff --git a/data/icons/meson.build b/data/icons/meson.build
new file mode 100644
index 0000000..eff6e4b
--- /dev/null
+++ b/data/icons/meson.build
@@ -0,0 +1 @@
+install_subdir('hicolor', install_dir: icondir)
diff --git a/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg b/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
new file mode 100644
index 0000000..c8091b2
--- /dev/null
+++ b/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 10.832031 1.039062 c 0.386719 0.085938 0.722657 0.324219 0.9375 0.660157 l 6 9.5 c 0.339844 0.558593 0.308594 1.113281 0 1.601562 l -6 9.5 c -0.445312 0.699219 -1.371093 0.910157 -2.070312 0.46875 c -0.699219 -0.445312 -0.90625 -1.371093 -0.464844 -2.070312 l 5.492187 -8.699219 l -5.492187 -8.699219 c -0.441406 -0.699219 -0.234375 -1.625 0.464844 -2.070312 c 0.335937 -0.210938 0.742187 -0.28125 1.132812 -0.191407 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg b/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
new file mode 100644
index 0000000..85ad3ae
--- /dev/null
+++ b/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 13.167969 1.035156 c -0.386719 0.089844 -0.722657 0.328125 -0.9375 0.664063 l -6 9.5 c -0.308594 0.488281 -0.308594 1.113281 0 1.601562 l 6 9.5 c 0.445312 0.699219 1.371093 0.910157 2.070312 0.464844 c 0.699219 -0.441406 0.90625 -1.367187 0.464844 -2.066406 l -5.492187 -8.699219 l 5.492187 -8.699219 c 0.441406 -0.699219 0.234375 -1.625 -0.464844 -2.070312 c -0.335937 -0.210938 -0.742187 -0.28125 -1.132812 -0.195313 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/color-pick.svg b/data/icons/scalable/actions/color-pick.svg
new file mode 100644
index 0000000..d9af690
--- /dev/null
+++ b/data/icons/scalable/actions/color-pick.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="5.4116011mm"
+ height="5.1374583mm"
+ viewBox="0 0 5.4116011 5.1374583"
+ version="1.1"
+ id="svg5595"
+ inkscape:version="0.92.4 (unknown)"
+ sodipodi:docname="color-pick.svg">
+ <defs
+ id="defs5589">
+ <filter
+ inkscape:collect="always"
+ x="-0.10291173"
+ width="1.2058235"
+ y="-0.065432459"
+ height="1.1308649"
+ id="filter5601"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.610872"
+ id="feGaussianBlur5603" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="39.387731"
+ inkscape:cy="12.554326"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata5592">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-103.12753,-146.26461)">
+ <circle
+ r="8.4810486"
+ cy="9.82623"
+ cx="10.226647"
+ id="circle7584"
+ style="color:#000000;display:inline;overflow:visible;opacity:0.6;vector-effect:none;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter:url(#filter5601)"
+ transform="matrix(0.26458333,0,0,0.26458333,103.12753,146.26461)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.26399338;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ d="m 108.07728,148.64122 c 0,1.2393 -1.00465,2.24394 -2.24395,2.24394 -1.23929,0 -2.24716,-1.00465 -2.25221,-2.24394 l -0.009,-2.24458 2.26136,6.4e-4 c 1.2393,3.4e-4 2.24395,1.00464 2.24395,2.24394 z"
+ id="path7523-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssscss" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#50dbb5;fill-opacity:1;stroke:none;stroke-width:0.36885914;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="path7482-1"
+ cx="105.83707"
+ cy="148.64352"
+ r="1.844296" />
+ </g>
+</svg>
diff --git a/data/icons/scalable/actions/dark-mode-symbolic.svg b/data/icons/scalable/actions/dark-mode-symbolic.svg
new file mode 100644
index 0000000..94eee23
--- /dev/null
+++ b/data/icons/scalable/actions/dark-mode-symbolic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 8 0 c -4.40625 0 -8 3.59375 -8 8 s 3.59375 8 8 8 s 8 -3.59375 8 -8 s -3.59375 -8 -8 -8 z m 0 1.941406 c 3.359375 0 6.058594 2.699219 6.058594 6.058594 s -2.699219 6.058594 -6.058594 6.058594 z m 0 0" fill="#222222"/></svg>
diff --git a/data/icons/scalable/actions/pointer-double-click-symbolic.svg b/data/icons/scalable/actions/pointer-double-click-symbolic.svg
new file mode 100644
index 0000000..f249aaa
--- /dev/null
+++ b/data/icons/scalable/actions/pointer-double-click-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="20px" viewBox="0 0 20 20" width="20px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 1 0 v 19.707031 l 4.242188 -4.144531 c 0.589843 1.191406 1.160156 2.386719 1.761718 3.570312 c 1.105469 1.640626 4.15625 0.464844 3.898438 -1.496093 c 0.007812 -0.46875 -0.40625 -0.90625 -0.4375 -1.3125 l 0.78125 -0.761719 c 0.585937 1.191406 1.15625 2.386719 1.757812 3.570312 c 1.105469 1.640626 4.15625 0.464844 3.898438 -1.496093 c -0.195313 -0.902344 -0.71875 -1.695313 -1.070313 -2.546875 l -0.714843 -1.539063 h 4.828124 l -12.945312 -13.550781 v 6.242188 z m 1.5 3.726562 l 6 6.242188 v -6.242188 l 7.921875 8.324219 h -3.664063 c 0.886719 1.902344 1.785157 3.800781 2.65625 5.707031 c 0.007813 0.625 -1.226562 0.980469 -1.324218 0.207032 l -2.410156 -4.917969 l -3.0625 2.984375 c 0.261718 0.609375 0.597656 1.191406 0.816406 1.816406 c -0.183594 0.601563 -1.269532 0.835938 -1.367188 0.066406 l -2.386718 -4.867187 l -3.179688 3.101563 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/pointer-drag-symbolic.svg b/data/icons/scalable/actions/pointer-drag-symbolic.svg
new file mode 100644
index 0000000..7ad8121
--- /dev/null
+++ b/data/icons/scalable/actions/pointer-drag-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="20px" viewBox="0 0 20 20" width="20px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 10.925781 2.320312 c -0.835937 0.074219 -1.816406 -0.136718 -2.445312 0.574219 c -0.179688 0.503907 -0.394531 0.730469 -0.945313 0.617188 c -0.796875 -0.050781 -1.703125 0.054687 -2.1875 0.773437 c -0.554687 0.832032 -0.316406 1.859375 -0.367187 2.792969 v 1.503906 c -0.511719 -0.320312 -1.132813 -0.132812 -1.699219 -0.183593 c -0.445312 -0.019532 -0.882812 0.027343 -1.320312 0.09375 c 0.058593 2.683593 0.074218 5.371093 0.121093 8.058593 c 0.09375 1.300781 1.230469 2.402344 2.546875 2.421875 c 0.632813 0.015625 1.480469 0.007813 2.222656 0.011719 c 3.222657 -0.011719 6.445313 0.050781 9.667969 -0.054687 c 1.160157 -0.121094 2.210938 -1.1875 2.070313 -2.398438 v -9.480469 c -0.707032 -0.9375 -1.816406 -1.78125 -3.058594 -1.570312 c -0.300781 -0.453125 -0.488281 -1.472657 -1.226562 -1.796875 c -0.355469 -0.292969 -0.839844 -0.109375 -1.261719 -0.164063 c -0.296875 -0.070312 -0.855469 0.195313 -0.867188 -0.25 c -0.160156 -0.523437 -0.71875 -0.910156 -1.25 -0.949219 z m -0.105469 1.503907 c 0.164063 0.269531 0.183594 0.753906 0.21875 1.125 c 0.007813 0.007812 0.019532 0.003906 0.027344 0.011719 c -0.007812 0 -0.019531 0 -0.027344 0 l 0.496094 5.898437 l 0.664063 -5.839844 l 1.34375 0.003907 c 0.535156 0.390624 0.414062 1.140624 0.554687 1.722656 c -0.011718 0.066406 0.007813 0.09375 0.015625 0.136718 l 0.011719 0.085938 l 0.480469 3.863281 l 0.664062 -3.917969 c 0.574219 -0.039062 1.15625 0.039063 1.558594 0.5 c 0.410156 0.21875 0.214844 0.691407 0.261719 1.058594 v 8.34375 c -0.339844 0.964844 -1.601563 0.546875 -2.375 0.660156 c -3.371094 0.011719 -6.742188 0.035157 -10.113282 -0.015624 c -0.976562 -0.027344 -1.140624 -1.070313 -1.039062 -1.839844 c -0.011719 -1.90625 -0.046875 -3.816406 -0.078125 -5.722656 c 0.324219 0.007812 0.675781 -0.011719 0.988281 0.011718 c 0.492188 0.914063 0.484375 2 0.507813 3.015625 c 0.492187 -0.007812 1.042969 0.039063 1.5 0 c 0.007812 -2.519531 -0.019531 -5.039062 0.011719 -7.558593 c 0.105468 -0.519532 0.730468 -0.308594 1.113281 -0.355469 h 0.675781 l 0.488281 5.847656 l 0.667969 -5.875 h -0.003906 c 0.03125 -0.382813 -0.148438 -0.894531 0.25 -1.121094 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/pointer-primary-click-symbolic.svg b/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
new file mode 100644
index 0000000..7a99169
--- /dev/null
+++ b/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="20px" viewBox="0 0 20 20" width="20px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 4 0 v 19.644531 l 4.242188 -4.140625 c 0.613281 1.214844 1.175781 2.460938 1.820312 3.65625 c 1.144531 1.476563 3.976562 0.390625 3.847656 -1.472656 c -0.09375 -0.824219 -0.59375 -1.523438 -0.898437 -2.277344 l -0.898438 -1.921875 h 5.269531 z m 1.5 3.726562 l 8.359375 8.261719 h -4.101563 c 0.886719 1.902344 1.78125 3.800781 2.660157 5.707031 c 0.035156 0.566407 -1.148438 0.988282 -1.28125 0.296876 l -2.457031 -5.011719 l -3.179688 3.105469 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg b/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
new file mode 100644
index 0000000..4fccfb8
--- /dev/null
+++ b/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="20px" viewBox="0 0 20 20" width="20px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 16 0 v 19.769531 l -4.242188 -4.140625 c -0.613281 1.214844 -1.175781 2.460938 -1.820312 3.65625 c -1.144531 1.476563 -3.976562 0.390625 -3.847656 -1.472656 c 0.09375 -0.824219 0.59375 -1.523438 0.898437 -2.277344 l 0.898438 -1.921875 h -5.269531 z m -1.5 3.726562 l -8.359375 8.386719 h 4.101563 c -0.886719 1.902344 -1.78125 3.800781 -2.660157 5.707031 c -0.035156 0.566407 1.148438 0.988282 1.28125 0.296876 l 2.457031 -5.011719 l 3.179688 3.105469 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/preview-close-symbolic.svg b/data/icons/scalable/actions/preview-close-symbolic.svg
new file mode 100644
index 0000000..34f0823
--- /dev/null
+++ b/data/icons/scalable/actions/preview-close-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 7 6 c -0.265625 0 -0.519531 0.105469 -0.707031 0.292969 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 l 4.292969 4.292969 l -4.292969 4.292969 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 s 1.023437 0.390625 1.414062 0 l 4.292969 -4.292969 l 4.292969 4.292969 c 0.390625 0.390625 1.023437 0.390625 1.414062 0 s 0.390625 -1.023437 0 -1.414062 l -4.292969 -4.292969 l 4.292969 -4.292969 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 s -0.519531 0.105469 -0.707031 0.292969 l -4.292969 4.292969 l -4.292969 -4.292969 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/record-screen-symbolic.svg b/data/icons/scalable/actions/record-screen-symbolic.svg
new file mode 100644
index 0000000..5e817ce
--- /dev/null
+++ b/data/icons/scalable/actions/record-screen-symbolic.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 2.175781 0 h 3.648438 c 1.203125 0 2.175781 0.972656 2.175781 2.175781 v 2.648438 c 0 1.203125 -0.972656 2.175781 -2.175781 2.175781 h -3.648438 c -1.203125 0 -2.175781 -0.972656 -2.175781 -2.175781 v -2.648438 c 0 -1.203125 0.972656 -2.175781 2.175781 -2.175781 z m 0 0"/>
+ <path d="m 7.796875 2.652344 l 2.050781 -1.523438 c 0.214844 -0.160156 0.503906 -0.1875 0.742188 -0.066406 c 0.242187 0.121094 0.394531 0.367188 0.394531 0.636719 v 3.605469 c 0 0.265624 -0.152344 0.511718 -0.394531 0.632812 c -0.238282 0.121094 -0.523438 0.09375 -0.742188 -0.066406 l -2.050781 -1.53125 c -0.265625 -0.199219 -0.421875 -0.511719 -0.421875 -0.84375 c 0 -0.332032 0.15625 -0.644532 0.421875 -0.84375 z m 0 0"/>
+ <path d="m 9.042969 7 h 2.914062 c 0.574219 0 1.042969 0.449219 1.042969 1 s -0.46875 1 -1.042969 1 h -2.914062 c -0.574219 0 -1.042969 -0.449219 -1.042969 -1 s 0.46875 -1 1.042969 -1 z m 0 0"/>
+ <path d="m 7.011719 8 c -1.113281 0 -2.011719 0.898438 -2.011719 2.011719 v 3.976562 c 0 1.113281 0.898438 2.011719 2.011719 2.011719 h 6.976562 c 1.113281 0 2.011719 -0.898438 2.011719 -2.011719 v -3.976562 c 0 -1.113281 -0.898438 -2.011719 -2.011719 -2.011719 z m 3.488281 1 c 1.378906 0 2.5 1.121094 2.5 2.5 s -1.121094 2.5 -2.5 2.5 s -2.5 -1.121094 -2.5 -2.5 s 1.121094 -2.5 2.5 -2.5 z m 0 0"/>
+ </g>
+</svg>
diff --git a/data/icons/scalable/actions/screencast-recorded-symbolic.svg b/data/icons/scalable/actions/screencast-recorded-symbolic.svg
new file mode 100644
index 0000000..cf522fd
--- /dev/null
+++ b/data/icons/scalable/actions/screencast-recorded-symbolic.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 6.929688 8.011719 h 4.140624 c 1.066407 0 1.929688 0.863281 1.929688 1.929687 v 3.140625 c 0 1.066407 -0.863281 1.929688 -1.929688 1.929688 h -4.140624 c -1.066407 0 -1.929688 -0.863281 -1.929688 -1.929688 v -3.140625 c 0 -1.066406 0.863281 -1.929687 1.929688 -1.929687 z m 0 0"/>
+ <path d="m 12.796875 10.664062 l 2.050781 -1.523437 c 0.214844 -0.160156 0.503906 -0.1875 0.742188 -0.066406 c 0.242187 0.121093 0.394531 0.367187 0.394531 0.636719 v 3.605468 c 0 0.265625 -0.152344 0.511719 -0.394531 0.632813 c -0.238282 0.121093 -0.523438 0.09375 -0.742188 -0.066407 l -2.050781 -1.53125 c -0.265625 -0.199218 -0.421875 -0.511718 -0.421875 -0.84375 c 0 -0.332031 0.15625 -0.644531 0.421875 -0.84375 z m 0 0"/>
+ <path d="m 0 4.011719 c 0 -1.652344 1.359375 -3.011719 3.011719 -3.011719 h 7.976562 c 1.652344 0 3.011719 1.359375 3.011719 3.011719 v 1.953125 c 0 0.554687 -0.449219 1 -1 1 s -1 -0.445313 -1 -1 v -1.953125 c 0 -0.578125 -0.433594 -1.011719 -1.011719 -1.011719 h -7.976562 c -0.578125 0 -1.011719 0.433594 -1.011719 1.011719 v 4.976562 c 0 0.578125 0.433594 1.011719 1.011719 1.011719 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 c -1.652344 0 -3.011719 -1.359375 -3.011719 -3.011719 z m 0 0"/>
+ </g>
+</svg>
diff --git a/data/icons/scalable/actions/screenshot-recorded-symbolic.svg b/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
new file mode 100644
index 0000000..db9338b
--- /dev/null
+++ b/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 9.042969 6 h 1.914062 c 0.574219 0 1.042969 0.449219 1.042969 1 s -0.46875 1 -1.042969 1 h -1.914062 c -0.574219 0 -1.042969 -0.449219 -1.042969 -1 s 0.46875 -1 1.042969 -1 z m 0 0"/>
+ <path d="m 7.011719 6.964844 c -1.113281 0 -2.011719 0.898437 -2.011719 2.011718 v 4.011719 c 0 1.113281 0.898438 2.011719 2.011719 2.011719 h 5.976562 c 1.113281 0 2.011719 -0.898438 2.011719 -2.011719 v -4.011719 c 0 -1.113281 -0.898438 -2.011718 -2.011719 -2.011718 z m 2.988281 2.035156 c 1.105469 0 2 0.894531 2 2 s -0.894531 2 -2 2 s -2 -0.894531 -2 -2 s 0.894531 -2 2 -2 z m 0 0"/>
+ <path d="m 0 4.011719 c 0 -1.652344 1.359375 -3.011719 3.011719 -3.011719 h 7.976562 c 1.652344 0 3.011719 1.359375 3.011719 3.011719 v 0.988281 c 0 0.550781 -0.449219 1 -1 1 s -1 -0.449219 -1 -1 v -0.988281 c 0 -0.578125 -0.433594 -1.011719 -1.011719 -1.011719 h -7.976562 c -0.578125 0 -1.011719 0.433594 -1.011719 1.011719 v 4.976562 c 0 0.578125 0.433594 1.011719 1.011719 1.011719 c 0.550781 0 1 0.449219 1 1 s -0.449219 1 -1 1 c -1.652344 0 -3.011719 -1.359375 -3.011719 -3.011719 z m 0 0"/>
+ </g>
+</svg>
diff --git a/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg b/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
new file mode 100644
index 0000000..6cf5870
--- /dev/null
+++ b/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="32px" viewBox="0 0 32 32" width="32px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 3.5 2 c -1.929688 0.007812 -3.4921875 1.570312 -3.5 3.5 c 0 1.386719 0.820312 2.59375 2 3.15625 v 3.34375 h 2 v -3.035156 c 1.53125 -0.230469 2.734375 -1.433594 2.964844 -2.964844 h 2.035156 v -2 h -2.34375 c -0.578125 -1.21875 -1.808594 -1.996094 -3.15625 -2 z m 25 0 c -1.347656 0.003906 -2.578125 0.78125 -3.15625 2 h -2.34375 v 2 h 2.035156 c 0.230469 1.53125 1.433594 2.734375 2.964844 2.964844 v 3.035156 h 2 v -3.34375 c 1.21875 -0.578125 1.996094 -1.808594 2 -3.15625 c 0 -1.921875 -1.578125 -3.5 -3.5 -3.5 z m -25 2 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m 7.5 0 v 2 h 4 v -2 z m 6 0 v 2 h 4 v -2 z m 11.5 0 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m -26.5 10 v 4 h 2 v -4 z m 26 0 v 4 h 2 v -4 z m -26 6 v 3.34375 c -1.21875 0.578125 -1.99609375 1.808594 -2 3.15625 c 0 1.921875 1.578125 3.5 3.5 3.5 c 1.347656 -0.003906 2.578125 -0.78125 3.15625 -2 h 2.34375 v -2 h -2.035156 c -0.230469 -1.53125 -1.433594 -2.734375 -2.964844 -2.964844 v -3.035156 z m 26 0 v 3.035156 c -1.53125 0.230469 -2.734375 1.433594 -2.964844 2.964844 h -2.035156 v 2 h 2.34375 c 0.578125 1.21875 1.808594 1.996094 3.15625 2 c 1.921875 0 3.5 -1.578125 3.5 -3.5 c -0.003906 -1.347656 -0.78125 -2.578125 -2 -3.15625 v -3.34375 z m -24.5 5 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m 25 0 c 0.839844 0 1.5 0.660156 1.5 1.5 s -0.660156 1.5 -1.5 1.5 s -1.5 -0.660156 -1.5 -1.5 s 0.660156 -1.5 1.5 -1.5 z m -17.5 1 v 2 h 4 v -2 z m 6 0 v 2 h 4 v -2 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg b/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
new file mode 100644
index 0000000..b8b3f4a
--- /dev/null
+++ b/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="32px" viewBox="0 0 32 32" width="32px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 4 4 c -1.660156 0 -3 1.339844 -3 3 v 14 c 0 1.660156 1.339844 3 3 3 h 10 v 3 h -3 c -1.09375 -0.003906 -2 0.90625 -2 2 h 14 c 0 -1.09375 -0.910156 -2 -2 -2 h -3 v -3 h 10 c 1.660156 0 3 -1.339844 3 -3 v -14 c 0 -1.660156 -1.339844 -3 -3 -3 z m 0 2 h 24 c 0.554688 0 1 0.445312 1 1 v 14 c 0 0.554688 -0.445312 1 -1 1 h -24 c -0.554688 0 -1 -0.445312 -1 -1 v -14 c 0 -0.554688 0.445312 -1 1 -1 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg b/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
new file mode 100644
index 0000000..36fab00
--- /dev/null
+++ b/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 2.953125 1.074219 l 2.417969 13.210937 l 3.238281 -2.398437 l 2.054687 2.648437 c 1.03125 1.433594 3.148438 -0.210937 2.011719 -1.5625 l -2.015625 -2.59375 l 2.984375 -2.175781 z m 0 0" fill="#2e3436"/>
+</svg>
diff --git a/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg b/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
new file mode 100644
index 0000000..b667bed
--- /dev/null
+++ b/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="32px" viewBox="0 0 32 32" width="32px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 3 3 c -1.644531 0 -3 1.355469 -3 3 v 14 c 0 1.644531 1.355469 3 3 3 h 4 v 3 c 0 1.644531 1.351562 3 3 3 h 18.996094 c 1.644531 0 3 -1.355469 3 -3 v -14 c 0 -1.644531 -1.355469 -3 -3 -3 h -4 v -3 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 18.996094 c 0.570312 0 1 0.429688 1 1 v 3 h -12.996094 c -1.648438 0 -3 1.355469 -3 3 v 9 h -4 c -0.570312 0 -1 -0.429688 -1 -1 v -14 c 0 -0.570312 0.429688 -1 1 -1 z m 7 6 h 18.996094 c 0.570312 0 1 0.429688 1 1 v 14 c 0 0.570312 -0.429688 1 -1 1 h -18.996094 c -0.574219 0 -1 -0.429688 -1 -1 v -14 c 0 -0.570312 0.425781 -1 1 -1 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg b/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
new file mode 100644
index 0000000..9efd394
--- /dev/null
+++ b/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 12 2 l -7.5 8 h 4.5 v 5 h 6 v -5 h 4.5 z m -3 16 v 3 h 6 v -3 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/keyboard-enter-symbolic.svg b/data/icons/scalable/status/keyboard-enter-symbolic.svg
new file mode 100644
index 0000000..7fe839b
--- /dev/null
+++ b/data/icons/scalable/status/keyboard-enter-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 19 6 v 6.003906 c 0.007812 0.996094 -1 0.996094 -1 0.996094 h -11.585938 l 1.292969 -1.292969 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 s -0.519531 0.105469 -0.707031 0.292969 l -3 3 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 l 3 3 c 0.390625 0.390625 1.023437 0.390625 1.414062 0 s 0.390625 -1.023437 0 -1.414062 l -1.289062 -1.292969 h 11.582031 c 3.007812 0 3 -3 3 -3 v -6 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/keyboard-hide-symbolic.svg b/data/icons/scalable/status/keyboard-hide-symbolic.svg
new file mode 100644
index 0000000..d18bfab
--- /dev/null
+++ b/data/icons/scalable/status/keyboard-hide-symbolic.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 2.49705,2.00665 c -0.554,0 -1,0.446 -1,1 v 11 c 0,0.554 0.446,1 1,1 h 19.0059 c 0.554,0 1,-0.446 1,-1 v -11 c 0,-0.554 -0.446,-1 -1,-1 z m 1.3653,2 h 1.6562 v 2 h -2 v -1.6074 c 0,-0.218 0.1538,-0.3926 0.3438,-0.3926 z m 2.6562,0 h 2 v 2 h -2 z m 3,0 h 2 v 2 h -2 z m 3,0 h 1.6563 c 0.19,0 0.3437,0.1746 0.3437,0.3926 v 1.6074 h -2 z m 2.9844,0 h 2 v 2 h -2 z m 3,0 h 2 v 2 h -2 z m -13.9844,3 h 2 v 2 h -2 z m 3,0 h 2 v 2 h -2 z m 3,0 h 2 v 2 h -2 z m 2.9844,0 h 2 v 2 h -2 z m 3,0 h 2 v 2 h -2 z m -9.6621,4 h 10.3125 c 0.19,0 0.3437,0.1746 0.3437,0.3926 v 1.2148 c 0,0.218 -0.1537,0.3926 -0.3437,0.3926 H 6.84085 c -0.19,0 -0.3438,-0.1746 -0.3438,-0.3926 v -1.2148 c 0,-0.218 0.1538,-0.3926 0.3438,-0.3926 z" fill="#241f31"/>
+ <path d="m 17,17.99335 -4.99512,4 -5.00488,-4 z" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/keyboard-layout-symbolic.svg b/data/icons/scalable/status/keyboard-layout-symbolic.svg
new file mode 100644
index 0000000..c93f935
--- /dev/null
+++ b/data/icons/scalable/status/keyboard-layout-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 2985,-2801.6382 c -0.2187,0 -0.4414,0.012 -0.6562,0.031 l -0.4063,2.0938 c -0.332,0.07 -0.6562,0.1758 -0.9687,0.3125 l -1.5313,-1.4648 c -0.3867,0.2265 -0.7266,0.5117 -1.0625,0.8085 l 0.9063,1.9063 c -0.2227,0.25 -0.4219,0.5234 -0.5938,0.8125 l -2.0937,-0.2773 c -0.1758,0.4101 -0.3125,0.8398 -0.4063,1.2773 l 1.8438,1 c -0.02,0.168 -0.027,0.332 -0.031,0.5 0,0.1719 0.016,0.332 0.031,0.5 l -1.8438,1 c 0.098,0.4453 0.2266,0.8711 0.4063,1.2812 l 2.0937,-0.2812 c 0.1719,0.2891 0.3711,0.5625 0.5938,0.8125 l -0.9063,1.9062 c 0.3359,0.3008 0.6758,0.5821 1.0625,0.8125 l 1.5313,-1.4687 c 0.3046,0.1367 0.6328,0.2383 0.9687,0.3125 l 0.4063,2.0937 c 0.4375,0.043 0.875,0.043 1.3125,0 l 0.4062,-2.0937 c 0.3359,-0.074 0.6641,-0.1758 0.9688,-0.3125 l 1.5312,1.4687 c 0.3867,-0.2304 0.7266,-0.5117 1.0625,-0.8125 l -0.9062,-1.9062 c 0.2226,-0.25 0.4218,-0.5234 0.5937,-0.8125 l 2.0938,0.2812 c 0.1757,-0.414 0.3125,-0.8398 0.4062,-1.2812 l -1.8437,-1 c 0.016,-0.168 0.031,-0.3281 0.031,-0.5 0,-0.1719 -0.016,-0.332 -0.031,-0.5 l 1.8437,-1 c -0.094,-0.4375 -0.2305,-0.8672 -0.4062,-1.2813 l -2.0938,0.2813 c -0.1719,-0.2891 -0.3672,-0.5625 -0.5937,-0.8125 l 0.9062,-1.9063 c -0.3359,-0.2968 -0.6758,-0.582 -1.0625,-0.8125 l -1.5312,1.4688 c -0.3125,-0.1367 -0.6368,-0.2422 -0.9688,-0.3125 l -0.4062,-2.0938 c -0.2188,-0.019 -0.4375,-0.031 -0.6563,-0.031 z m 0,4 c 1.6563,0 3,1.3437 3,3 0,1.6562 -1.3437,3 -3,3 -1.6562,0 -3,-1.3438 -3,-3 0,-1.6563 1.3438,-3 3,-3 z m 0,0" transform="matrix(1.5,0,0,1.5,-4465.5,4203.9569)" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/keyboard-shift-symbolic.svg b/data/icons/scalable/status/keyboard-shift-symbolic.svg
new file mode 100644
index 0000000..7255259
--- /dev/null
+++ b/data/icons/scalable/status/keyboard-shift-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 12 4 l -7.5 8 h 4.5 v 7 h 6 v -7 h 4.5 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/message-indicator-symbolic.svg b/data/icons/scalable/status/message-indicator-symbolic.svg
new file mode 100644
index 0000000..9873de5
--- /dev/null
+++ b/data/icons/scalable/status/message-indicator-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 12 8 c 0 2.210938 -1.789062 4 -4 4 s -4 -1.789062 -4 -4 s 1.789062 -4 4 -4 s 4 1.789062 4 4 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/no-events-symbolic.svg b/data/icons/scalable/status/no-events-symbolic.svg
new file mode 100644
index 0000000..9c7c889
--- /dev/null
+++ b/data/icons/scalable/status/no-events-symbolic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="64px" viewBox="0 0 64 64" width="64px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#241f31">
+ <path d="m 12 4 c -4.210938 0 -8 3.378906 -8 7.75 v 40.5 c 0 4.371094 3.789062 7.75 8 7.75 h 40 c 4.210938 0 8 -3.378906 8 -7.75 v -40.5 c 0 -4.371094 -3.789062 -7.75 -8 -7.75 z m -2 18 h 12 v 8 h -12 z m 16.125 0 h 11.875 v 8 h -11.875 z m 15.875 0 h 12 v 8 h -12 z m -32 12 h 12 v 8 h -12 z m 16.125 0 h 11.875 v 8 h -11.875 z m 15.875 0 h 12 v 8 h -12 z m -32 12 h 12 v 8 h -12 z m 16.125 0 h 11.875 v 8 h -11.875 z m 15.875 0 h 12 v 8 h -12 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 42 34 h 12 v 8 h -12 z m 0 0" fill-opacity="0.1"/>
+ </g>
+</svg>
diff --git a/data/icons/scalable/status/no-notifications-symbolic.svg b/data/icons/scalable/status/no-notifications-symbolic.svg
new file mode 100644
index 0000000..d30f7e1
--- /dev/null
+++ b/data/icons/scalable/status/no-notifications-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="64px" viewBox="0 0 64 64" width="64px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 32 0 c -3.3125 0 -6 2.6875 -6 6 c 0 0.304688 0.023438 0.601562 0.066406 0.894531 c -8.148437 2.527344 -14.066406 10.125 -14.066406 19.105469 v 18 h -2 c -2.203125 0 -4 1.796875 -4 4 s 1.796875 4 4 4 h 44 c 2.203125 0 4 -1.796875 4 -4 s -1.796875 -4 -4 -4 h -2 v -18 c 0 -8.980469 -5.917969 -16.578125 -14.066406 -19.105469 c 0.042968 -0.292969 0.066406 -0.589843 0.066406 -0.894531 c 0 -3.3125 -2.6875 -6 -6 -6 z m -8 56 c 0 2.859375 1.53125 5.5 4 6.921875 c 2.46875 1.4375 5.53125 1.4375 8 0 c 2.46875 -1.421875 4 -4.0625 4 -6.921875 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg b/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
new file mode 100644
index 0000000..f64ee0b
--- /dev/null
+++ b/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 1.53125 0.46875 l -1.0625 1.0625 l 14 14 l 1.0625 -1.0625 l -1.945312 -1.945312 c 0.847656 -0.527344 1.414062 -1.449219 1.414062 -2.523438 v -6 c 0 -1.660156 -1.339844 -3 -3 -3 h -8 c -0.554688 0 -1.070312 0.160156 -1.515625 0.421875 z m 2.53125 2.53125 h 0.199219 l -0.097657 0.097656 z m 2.675781 0 h 0.699219 l -1.6875 1.6875 l -0.351562 -0.351562 z m 2.824219 0 h 1.230469 l -3.367188 3.363281 l -0.613281 -0.613281 z m 2.609375 0.035156 c 0.316406 0.054688 0.578125 0.246094 0.714844 0.523438 l -4.132813 4.132812 l -0.617187 -0.617187 z m -11.171875 1.023438 v 5.941406 c 0 1.660156 1.339844 3 3 3 h 5.941406 l -2 -2 h -1.785156 l 0.894531 -0.894531 l -0.355469 -0.355469 l -1.25 1.25 h -1.238281 l 1.867188 -1.867188 l -0.707031 -0.707031 l -2.160157 2.15625 c -0.121093 -0.164062 -0.207031 -0.359375 -0.207031 -0.582031 v -0.4375 l 1.75 -1.75 l -1.0625 -1.0625 l -0.6875 0.6875 v -0.699219 l 0.339844 -0.339843 z m 12 0.09375 v 5.847656 c 0 0.535156 -0.417969 0.960938 -0.949219 0.988281 l -2.941406 -2.941406 z m -5 9.847656 c -5 0 -5 1 -5 1 c 0 1 1 1 1 1 h 8 c 0.328125 0 0.539062 -0.109375 0.6875 -0.253906 l -1.542969 -1.546875 c -0.730469 -0.113281 -1.71875 -0.199219 -3.144531 -0.199219 z m 0 0" fill="#241f31" fill-rule="evenodd"/>
+</svg>
diff --git a/data/icons/scalable/status/screen-privacy-symbolic.svg b/data/icons/scalable/status/screen-privacy-symbolic.svg
new file mode 100644
index 0000000..c14da9d
--- /dev/null
+++ b/data/icons/scalable/status/screen-privacy-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 4 1 c -1.660156 0 -3 1.339844 -3 3 v 6 c 0 1.660156 1.339844 3 3 3 h 8 c 1.660156 0 3 -1.339844 3 -3 v -6 c 0 -1.660156 -1.339844 -3 -3 -3 z m 0 2 h 0.261719 l -1.261719 1.261719 v -0.261719 c 0 -0.554688 0.445312 -1 1 -1 z m 2.738281 0 h 0.699219 l -4.4375 4.4375 v -0.699219 z m 2.824219 0 h 1.230469 l -7.585938 7.582031 c -0.121093 -0.164062 -0.207031 -0.359375 -0.207031 -0.582031 v -0.4375 z m 2.609375 0.035156 c 0.316406 0.054688 0.578125 0.246094 0.714844 0.523438 l -7.441407 7.441406 h -1.238281 z m 0.828125 1.121094 v 5.84375 c 0 0.554688 -0.445312 1 -1 1 h -5.84375 z m -5 9.84375 c -5 0 -5 1 -5 1 c 0 1 1 1 1 1 h 8 c 1 0 1 -1 1 -1 s 0 -1 -5 -1 z m 0 0" fill="#241f31"/>
+</svg>
diff --git a/data/icons/scalable/status/stop-symbolic.svg b/data/icons/scalable/status/stop-symbolic.svg
new file mode 100644
index 0000000..256276a
--- /dev/null
+++ b/data/icons/scalable/status/stop-symbolic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 4 4 h 8 v 8 h -8 z m 0 0" fill="#2e3436"/></svg>
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..30d4917
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,138 @@
+desktop_files = [
+ 'org.gnome.Shell.desktop',
+ 'org.gnome.Shell.Extensions.desktop',
+]
+service_files = []
+
+if have_networkmanager
+ desktop_files += 'org.gnome.Shell.PortalHelper.desktop'
+ service_files += 'org.gnome.Shell.PortalHelper.service'
+endif
+
+desktopconf = configuration_data()
+# We substitute in bindir so it works as an autostart
+# file when built in a non-system prefix
+desktopconf.set('bindir', bindir)
+desktopconf.set('systemd_hidden', have_systemd ? 'true' : 'false')
+
+foreach desktop_file : desktop_files
+ i18n.merge_file(
+ input: configure_file(
+ input: desktop_file + '.in.in',
+ output: desktop_file + '.in',
+ configuration: desktopconf
+ ),
+ output: desktop_file,
+ po_dir: po_dir,
+ install: true,
+ install_dir: desktopdir,
+ type: 'desktop'
+ )
+endforeach
+
+serviceconf = configuration_data()
+serviceconf.set('libexecdir', libexecdir)
+foreach service_file : service_files
+ configure_file(
+ input: service_file + '.in',
+ output: service_file,
+ configuration: serviceconf,
+ install_dir: servicedir
+ )
+endforeach
+
+theme_deps = []
+
+subdir('dbus-interfaces')
+subdir('icons')
+subdir('theme')
+
+data_resources = [
+ {'name': 'dbus-interfaces'},
+ {'name': 'icons'},
+ {'name': 'osk-layouts'},
+ {'name': 'theme', 'deps': theme_deps}
+]
+foreach resource : data_resources
+ name = resource.get('name')
+ deps = resource.get('deps', [])
+
+ gnome.compile_resources(
+ 'gnome-shell-' + name,
+ 'gnome-shell-@0@.gresource.xml'.format(name),
+ source_dir: name,
+ dependencies: deps,
+ gresource_bundle: true,
+ install: true,
+ install_dir: pkgdatadir
+ )
+endforeach
+
+perfconf = configuration_data()
+perfconf.set('datadir', datadir)
+configure_file(
+ input: 'perf-background.xml.in',
+ output: 'perf-background.xml',
+ configuration: perfconf,
+ install_dir: pkgdatadir
+)
+
+keybinding_files = [
+ '50-gnome-shell-launchers.xml',
+ '50-gnome-shell-screenshots.xml',
+ '50-gnome-shell-system.xml',
+]
+
+install_data('gnome-shell.portal', install_dir: portaldir)
+install_data(keybinding_files, install_dir: keysdir)
+
+
+schemaconf = configuration_data()
+schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
+schema = configure_file(
+ input: 'org.gnome.shell.gschema.xml.in',
+ output: 'org.gnome.shell.gschema.xml',
+ configuration: schemaconf,
+ install_dir: schemadir
+)
+install_data('00_org.gnome.shell.gschema.override', install_dir: schemadir)
+
+overrides_migration_conf = configuration_data()
+overrides_migration_conf.set('libexecdir', libexecdir)
+overrides_migration = configure_file(
+ input: 'gnome-shell-overrides-migration.desktop.in',
+ output: 'gnome-shell-overrides-migration.desktop',
+ configuration: overrides_migration_conf,
+ install_dir: autostartdir
+)
+
+if have_systemd
+ unitconf = configuration_data()
+ unitconf.set('bindir', bindir)
+
+ configure_file(
+ input: 'org.gnome.Shell@x11.service.in',
+ output: 'org.gnome.Shell@x11.service',
+ configuration: unitconf,
+ install_dir: systemduserunitdir
+ )
+
+ configure_file(
+ input: 'org.gnome.Shell@wayland.service.in',
+ output: 'org.gnome.Shell@wayland.service',
+ configuration: unitconf,
+ install_dir: systemduserunitdir
+ )
+
+ units = files('org.gnome.Shell.target',
+ 'org.gnome.Shell-disable-extensions.service')
+
+ install_data(units, install_dir: systemduserunitdir)
+endif
+
+# for unit tests - gnome.compile_schemas() only looks in srcdir
+custom_target('compile-schemas',
+ input: schema,
+ output: 'gschemas.compiled',
+ command: [find_program('glib-compile-schemas'), meson.current_build_dir()],
+ build_by_default: true)
diff --git a/data/org.gnome.Shell-disable-extensions.service b/data/org.gnome.Shell-disable-extensions.service
new file mode 100644
index 0000000..de91167
--- /dev/null
+++ b/data/org.gnome.Shell-disable-extensions.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Disable GNOME Shell extensions after failure
+# Note that this unit must not conflict with anything, and must
+# be able to run in parallel with the gnome-session-shutdown.target.
+DefaultDependencies=no
+
+# We want to disable extensions only if gnome-shell has flagged the extensions
+# to be a likely cause of trouble.
+ConditionPathExists=%t/gnome-shell-disable-extensions
+
+[Service]
+Type=simple
+# Disable extensions
+ExecStart=gsettings set org.gnome.shell disable-user-extensions true
+Restart=no
diff --git a/data/org.gnome.Shell-symbolic.Source.svg b/data/org.gnome.Shell-symbolic.Source.svg
new file mode 100644
index 0000000..b017734
--- /dev/null
+++ b/data/org.gnome.Shell-symbolic.Source.svg
@@ -0,0 +1,511 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="64"
+ height="64"
+ viewBox="0 0 64 64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+ sodipodi:docname="org.gnome.Shell-symbolic.Source.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="51.5"
+ inkscape:cy="258"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-midpoints="true"
+ inkscape:bbox-nodes="false"
+ inkscape:snap-global="true"
+ inkscape:pagecheckerboard="false"
+ showborder="false"
+ inkscape:snap-nodes="true"
+ inkscape:snap-others="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4514"
+ empspacing="4"
+ color="#5e57ff"
+ opacity="0.1254902"
+ empcolor="#5e57ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <g
+ inkscape:label="status"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-161.53331)">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;fill:#241f31;fill-opacity:1;stroke:none"
+ x="-4"
+ y="145.53331"
+ id="text12175"><tspan
+ sodipodi:role="line"
+ id="tspan12173"
+ x="-4"
+ y="145.53331"
+ style="font-size:16px;fill:#241f31;fill-opacity:1">status</tspan></text>
+ <g
+ id="g16183"
+ transform="translate(-288,-312)"
+ inkscape:label="notifications alerts calendar events">
+ <title
+ id="title20651">no-notifications</title>
+ <path
+ id="path81"
+ d="m 320,473.53331 c -3.3125,0 -6,2.6875 -6,6 0,0.30385 0.0228,0.60279 0.0664,0.89453 C 305.91768,482.95558 300,490.55273 300,499.53331 v 18 h -2 c -2.20312,0 -4,1.79688 -4,4 0,2.20312 1.79688,4 4,4 h 44 c 2.20312,0 4,-1.79688 4,-4 0,-2.20312 -1.79688,-4 -4,-4 h -2 v -18 c 0,-8.98058 -5.91768,-16.57773 -14.06641,-19.10547 0.0436,-0.29174 0.0664,-0.59068 0.0664,-0.89453 0,-3.3125 -2.6875,-6 -6,-6 z m -8,56 c 0,2.85938 1.53125,5.5 4,6.92188 2.46875,1.43749 5.53125,1.43749 8,0 2.46875,-1.42188 4,-4.0625 4,-6.92188 z"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ transform="scale(-1,1)"
+ y="473.53333"
+ x="-352"
+ height="64"
+ width="64"
+ id="rect15794"
+ style="fill:none" />
+ </g>
+ <g
+ id="g21075"
+ transform="translate(0,-320)"
+ inkscape:label="notifications alerts calendar events">
+ <title
+ id="title36429">message-indicator</title>
+ <rect
+ transform="scale(-1,1)"
+ y="601.53333"
+ x="-16"
+ height="16"
+ width="16"
+ id="rect20973"
+ style="fill:none" />
+ <path
+ d="M 12,609.53332 A 3.9999999,3.9999999 0 0 1 8.0000002,613.53331 3.9999999,3.9999999 0 0 1 4.0000003,609.53332 3.9999999,3.9999999 0 0 1 8.0000002,605.53334 3.9999999,3.9999999 0 0 1 12,609.53332 Z"
+ id="path4485"
+ style="fill:#241f31;fill-opacity:1;stroke-width:3.77953" />
+ </g>
+ <g
+ id="g36685"
+ inkscape:label="screen shield privacy active"
+ transform="translate(-40,-382)">
+ <title
+ id="title41631">screen-privacy</title>
+ <rect
+ transform="scale(-1,1)"
+ y="663.53333"
+ x="-76"
+ height="16"
+ width="16"
+ id="rect36558"
+ style="fill:none" />
+ <path
+ id="path113"
+ style="fill:#241f31;fill-opacity:1"
+ d="m 64,664.53331 c -1.660156,0 -3,1.33984 -3,3 v 6 c 0,1.66016 1.339844,3 3,3 h 8 c 1.660156,0 3,-1.33984 3,-3 v -6 c 0,-1.66016 -1.339844,-3 -3,-3 z m 0,2 h 0.261719 L 63,667.79503 v -0.26172 c 0,-0.55469 0.445312,-1 1,-1 z m 2.738281,0 H 67.4375 L 63,670.97081 v -0.69922 z m 2.824219,0 h 1.230469 l -7.585938,7.58203 C 63.085938,673.95128 63,673.75597 63,673.53331 v -0.4375 z m 2.609375,0.0352 c 0.316406,0.0547 0.578125,0.24609 0.714844,0.52343 l -7.441407,7.44141 H 64.207031 Z M 73,667.68956 v 5.84375 c 0,0.55469 -0.445312,1 -1,1 h -5.84375 z m -5,9.84375 c -5,0 -5,1 -5,1 0,1 1,1 1,1 h 8 c 1,0 1,-1 1,-1 0,0 0,-1 -5,-1 z" />
+ </g>
+ <g
+ id="g41416"
+ inkscape:label="status"
+ transform="translate(-40,-382)">
+ <title
+ id="title41633">screen-privacy-disabled</title>
+ <rect
+ transform="scale(-1,1)"
+ y="663.53333"
+ x="-96"
+ height="16"
+ width="16"
+ id="rect36687"
+ style="fill:none" />
+ <path
+ d="m 81.53125,664.00213 -1.0625,1.0625 14,14 1.0625,-1.0625 -1.945312,-1.94531 C 94.433594,675.52947 95,674.6076 95,673.53338 v -6 c 0,-1.66016 -1.339844,-3 -3,-3 h -8 c -0.554688,0 -1.070312,0.16016 -1.515625,0.42188 z m 2.53125,2.53125 h 0.199219 l -0.09766,0.0977 z m 2.675781,0 H 87.4375 l -1.6875,1.6875 -0.351562,-0.35156 z m 2.824219,0 h 1.230469 l -3.367188,3.36328 -0.613281,-0.61328 z m 2.609375,0.0352 c 0.316406,0.0547 0.578125,0.24609 0.714844,0.52343 l -4.132813,4.13282 -0.617187,-0.61719 z M 81,667.59197 v 5.94141 c 0,1.66016 1.339844,3 3,3 h 5.941406 l -2,-2 H 86.15625 l 0.894531,-0.89453 -0.355469,-0.35547 -1.25,1.25 h -1.238281 l 1.867188,-1.86719 -0.707031,-0.70703 -2.160157,2.15625 C 83.085938,673.95135 83,673.75604 83,673.53338 v -0.4375 l 1.75,-1.75 -1.0625,-1.0625 -0.6875,0.6875 v -0.69922 l 0.339844,-0.33984 z m 12,0.0937 v 5.84766 c 0,0.53516 -0.417969,0.96094 -0.949219,0.98828 l -2.941406,-2.9414 z m -5,9.84766 c -5,0 -5,1 -5,1 0,1 1,1 1,1 h 8 c 0.328125,0 0.539062,-0.10937 0.6875,-0.25391 l -1.542969,-1.54687 C 90.414062,677.61927 89.425781,677.53333 88,677.53333 Z m 0,0"
+ fill="#2e3436"
+ fill-rule="evenodd"
+ id="path113-6"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g53379"
+ inkscape:label="notifications alerts calendar events"
+ transform="translate(0,-360)">
+ <title
+ id="title58232">no-events</title>
+ <rect
+ transform="scale(-1,1)"
+ y="521.53333"
+ x="-144"
+ height="64"
+ width="64"
+ id="rect53237"
+ style="fill:none" />
+ <path
+ d="m 92,525.53331 c -4.20948,0 -8,3.38032 -8,7.75 v 40.5 c 0,4.36968 3.79052,7.75 8,7.75 h 40 c 4.20948,0 8,-3.38032 8,-7.75 v -40.5 c 0,-4.36968 -3.79052,-7.75 -8,-7.75 z m -2,18 h 12 v 8 H 90 Z m 16.125,0 H 118 v 8 h -11.875 z m 15.875,0 h 12 v 8 h -12 z m -32,12 h 12 v 8 H 90 Z m 16.125,0 H 118 v 8 h -11.875 z m 15.875,0 h 12 v 8 h -12 z m -32,12 h 12 v 8 H 90 Z m 16.125,0 H 118 v 8 h -11.875 z m 15.875,0 h 12 v 8 h -12 z"
+ id="path19157"
+ style="fill:#241f31;fill-opacity:0.35" />
+ <rect
+ height="7.9999971"
+ id="rect19159"
+ width="11.999997"
+ x="121.99993"
+ y="555.53333"
+ style="fill:#241f31;fill-opacity:0.1" />
+ </g>
+ <g
+ id="g8970"
+ transform="translate(-24,-194.46669)"
+ inkscape:label="on-screen keyboard keys">
+ <title
+ id="title14941">keyboard-shift</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="23.99999"
+ y="443.99997"
+ id="rect8636"
+ style="fill:none" />
+ <path
+ d="m 36,448 -7.5,8 H 33 v 7 h 6 v -7 h 4.5 z"
+ id="path1150"
+ style="fill:#241f31;fill-opacity:1;stroke-width:0.666667" />
+ </g>
+ <g
+ id="g8978"
+ transform="translate(8,-194.46669)"
+ inkscape:label="on-screen keyboard keys">
+ <title
+ id="title14939">keyboard-caps-lock</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="23.99999"
+ y="443.99997"
+ id="rect8972"
+ style="fill:none" />
+ <path
+ id="path8974"
+ d="m 36,446 -7.5,8 H 33 v 5 h 6 v -5 h 4.5 z m -3,16 v 3 h 6 v -3 z"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g13560"
+ inkscape:label="on-screen keyboard keys"
+ transform="translate(-40,-214.46669)">
+ <title
+ id="title14945">keyboard-layout</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="103.99999"
+ y="463.99997"
+ id="rect13441"
+ style="fill:none" />
+ <path
+ d="m 109,467 v 19 h 2 v -8 h 4.383 l 0.722,1.447 c 0.16942,0.33905 0.51597,0.55318 0.895,0.553 h 7 c 0.55228,0 1,-0.44772 1,-1 v -9 c 0,-0.55228 -0.44772,-1 -1,-1 h -5.383 l -0.722,-1.447 C 117.72558,467.21395 117.37903,466.99982 117,467 h -7 z"
+ id="path1085"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g13678"
+ inkscape:label="keyboard keys hide "
+ transform="translate(-40,-214.46669)">
+ <title
+ id="title14947">keyboard-hide</title>
+ <path
+ d="m 139.99985,472 a 1,1 0 0 0 -0.70703,0.29297 1,1 0 0 0 0,1.41406 l 8,8 a 1.0001,1.0001 0 0 0 1.41406,0 l 8,-8 a 1,1 0 0 0 0,-1.41406 1,1 0 0 0 -1.41406,0 l -7.29297,7.29297 -7.29297,-7.29297 A 1,1 0 0 0 139.99985,472 Z"
+ id="path4931"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="-487.99997"
+ y="-159.99998"
+ id="rect13562"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none" />
+ </g>
+ <g
+ id="g13796"
+ inkscape:label="on-screen keyboard keys"
+ transform="translate(-40,-214.46669)">
+ <title
+ id="title14943">keyboard-enter</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="-487.99997"
+ y="-191.99998"
+ id="rect13680"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none" />
+ <path
+ id="path955"
+ style="fill:#241f31;fill-opacity:1"
+ d="m 187,470 v 6.00391 c 0.006,0.996 -1,0.99609 -1,0.99609 h -11.58594 l 1.29297,-1.29297 a 1,1 0 0 0 0,-1.41406 A 1,1 0 0 0 175,474 a 1,1 0 0 0 -0.70703,0.29297 l -3,3 a 1.0001,1.0001 0 0 0 0,1.41406 l 3,3 a 1,1 0 0 0 1.41406,0 1,1 0 0 0 0,-1.41406 L 174.41602,479 H 186 c 3.006,0 3,-3 3,-3 v -6 z" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="actions">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;fill:#241f31;fill-opacity:1;stroke:none"
+ x="-4"
+ y="184"
+ id="text12715"><tspan
+ sodipodi:role="line"
+ id="tspan12713"
+ x="-4"
+ y="184"
+ style="font-size:16px;fill:#241f31;fill-opacity:1">actions</tspan></text>
+ <g
+ id="g13433"
+ inkscape:label="overview previous left backward"
+ transform="translate(-40,-240)">
+ <title
+ id="title15448">carousel-arrow-previous</title>
+ <path
+ d="m 53.169107,497.03665 a 1.5,1.5 0 0 0 -0.9375,0.66211 l -6,9.5 a 1.50015,1.50015 0 0 0 0,1.60156 l 6,9.5 a 1.5,1.5 0 0 0 2.068359,0.4668 1.5,1.5 0 0 0 0.466797,-2.06836 l -5.49414,-8.69922 5.49414,-8.69922 a 1.5,1.5 0 0 0 -0.466797,-2.06836 1.5,1.5 0 0 0 -1.130859,-0.19531 z"
+ id="path13468"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="39.999992"
+ y="495.99997"
+ id="rect12821"
+ style="fill:none" />
+ </g>
+ <g
+ id="g13439"
+ transform="matrix(-1,0,0,1,95.99998,-240)"
+ inkscape:label="overview next right forward">
+ <title
+ id="title15446">carousel-arrow-next</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="39.999992"
+ y="495.99997"
+ id="rect13435"
+ style="fill:none" />
+ <path
+ d="m 53.169235,497.03711 c -0.387918,0.0877 -0.725132,0.32585 -0.9375,0.66211 l -6,9.5 c -0.34001,0.56012 -0.308809,1.11236 0,1.60156 l 6,9.5 c 0.442487,0.69974 1.368227,0.90867 2.068359,0.4668 0.69974,-0.44249 0.908665,-1.36823 0.466797,-2.06836 L 49.272751,508 l 5.49414,-8.69922 c 0.441868,-0.70013 0.232943,-1.62587 -0.466797,-2.06836 -0.336162,-0.21243 -0.742919,-0.28268 -1.130859,-0.19531 z"
+ id="path13468-5"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g29998"
+ inkscape:label="mouse pointer dwell click"
+ transform="translate(28,-344)">
+ <title
+ id="title39373">pointer-secondary-click</title>
+ <path
+ d="m 16,640 v 19.77148 l -4.24414,-4.14258 c -0.612408,1.21538 -1.173049,2.46023 -1.819709,3.6561 -1.141947,1.47628 -3.975266,0.38901 -3.846009,-1.47361 0.09413,-0.82252 0.594755,-1.52142 0.899969,-2.2776 l 0.896608,-1.92051 H 2.617188 Z m -1.5,3.72656 -8.359375,8.38672 h 4.101563 c -0.885072,1.9032 -1.781799,3.80152 -2.659622,5.70774 -0.0349,0.56609 1.149057,0.98883 1.282093,0.29797 l 2.455699,-5.01348 3.179687,3.10351 z"
+ id="path5851"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ width="20"
+ height="20"
+ x="-7.6293945e-06"
+ y="640"
+ id="rect1156"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1.781;marker:none;enable-background:new" />
+ </g>
+ <g
+ id="g29992"
+ inkscape:label="mouse pointer dwell click"
+ transform="translate(-28,-344)">
+ <title
+ id="title39371">pointer-primary-click</title>
+ <rect
+ width="20"
+ height="20"
+ x="27.999992"
+ y="640"
+ id="rect1244"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1.781;marker:none;enable-background:new" />
+ <path
+ d="m 32,640 v 19.64648 l 4.24414,-4.14257 c 0.612408,1.21537 1.173049,2.46022 1.819709,3.65609 1.141947,1.47628 3.975266,0.38901 3.846009,-1.47361 -0.09413,-0.82252 -0.594755,-1.52142 -0.899969,-2.2776 l -0.896608,-1.92051 h 5.269531 z m 1.5,3.72656 8.359375,8.26172 h -4.101563 c 0.885072,1.9032 1.781799,3.80152 2.659622,5.70774 0.0349,0.56609 -1.149057,0.98883 -1.282093,0.29798 l -2.455699,-5.01349 -3.179687,3.10352 z"
+ id="path5565"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g14643"
+ inkscape:label="mouse pointer dwell click drag"
+ transform="translate(0,-344)">
+ <title
+ id="title39369">pointer-drag</title>
+ <rect
+ width="20"
+ height="20"
+ x="55.999992"
+ y="640"
+ id="rect9430"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1.781;marker:none;enable-background:new" />
+ <path
+ d="m 66.92607,642.31969 c -0.836524,0.0747 -1.818151,-0.13657 -2.447266,0.57617 -0.179249,0.5031 -0.39107,0.72969 -0.945312,0.61718 -0.793816,-0.0511 -1.701912,0.0538 -2.1875,0.77344 -0.554908,0.83096 -0.313681,1.85623 -0.367187,2.79297 v 1.50195 c -0.509721,-0.31797 -1.13192,-0.13205 -1.699219,-0.18164 -0.442833,-0.0207 -0.881113,0.0252 -1.31836,0.0918 0.05693,2.68593 0.07373,5.37334 0.121094,8.05859 0.09369,1.3023 1.232044,2.40482 2.544922,2.42383 0.632949,0.0151 1.48233,0.007 2.224609,0.0117 3.221817,-0.0121 6.446114,0.0498 9.666016,-0.0566 1.162213,-0.12022 2.213268,-1.18845 2.070313,-2.39648 v -9.48047 c -0.706809,-0.94069 -1.815276,-1.78087 -3.058594,-1.57032 -0.299549,-0.45356 -0.486118,-1.47311 -1.226563,-1.79882 -0.354855,-0.29104 -0.839588,-0.10977 -1.259765,-0.16211 -0.297442,-0.0727 -0.8559,0.19254 -0.869141,-0.25196 -0.157351,-0.52152 -0.715235,-0.90856 -1.248047,-0.94921 z m -0.105469,1.5039 c 0.164522,0.27146 0.182773,0.75372 0.21875,1.125 0.0066,0.007 0.0198,0.006 0.02734,0.0117 -0.0091,-1.7e-4 -0.01824,1.7e-4 -0.02734,0 l 0.494141,5.90039 0.664062,-5.8418 1.345704,0.004 c 0.536079,0.38955 0.412986,1.14048 0.554687,1.72266 -0.01113,0.0675 0.0064,0.096 0.01563,0.13672 -6.5e-4,-10e-6 -0.0013,0 -0.002,0 l 0.01172,0.0859 0.482422,3.86524 0.664062,-3.91993 c 0.574035,-0.0371 1.157689,0.0385 1.558594,0.50196 0.40964,0.21686 0.215641,0.68897 0.259766,1.05859 v 8.3418 c -0.337059,0.96368 -1.599977,0.54827 -2.375,0.66016 -3.370517,0.0131 -6.742137,0.0338 -10.111329,-0.0137 -0.975625,-0.0283 -1.141898,-1.06997 -1.040974,-1.84179 -0.01164,-1.90706 -0.04474,-3.81393 -0.07813,-5.72071 0.326364,0.006 0.675958,-0.0127 0.988281,0.01 0.493884,0.91523 0.484615,2.00119 0.507813,3.01563 0.492636,-0.007 1.043381,0.0398 1.5,0 0.0091,-2.51961 -0.01844,-5.04003 0.01367,-7.5586 0.104898,-0.5199 0.730745,-0.30916 1.111329,-0.35352 h 0.675781 l 0.488281,5.84766 0.669922,-5.87695 h -0.0039 c 0.03095,-0.38284 -0.150626,-0.89584 0.24805,-1.11914 z"
+ id="path5630"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g30454"
+ inkscape:label="mouse pointer dwell click double"
+ transform="translate(0,-344)">
+ <title
+ id="title39367">pointer-double-click</title>
+ <rect
+ width="20"
+ height="20"
+ x="83.999992"
+ y="640"
+ id="rect14651"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1.781;marker:none;enable-background:new" />
+ <path
+ d="m 85,640 v 19.70898 l 4.24414,-4.14453 c 0.5882,1.18866 1.158389,2.38656 1.758464,3.56913 1.108631,1.64026 4.157538,0.46513 3.89799,-1.49586 0.01057,-0.47022 -0.405577,-0.90844 -0.434651,-1.31364 l 0.778203,-0.75963 c 0.5882,1.18866 1.158389,2.38656 1.758464,3.56913 1.108631,1.64026 4.15754,0.46513 3.89799,-1.49586 -0.19232,-0.9043 -0.71785,-1.69802 -1.068629,-2.54897 l -0.716725,-1.53797 h 4.830074 L 91,640 v 6.24414 z m 1.5,3.72656 6,6.24414 v -6.24414 l 7.92188,8.32422 h -3.662115 c 0.883468,1.90344 1.781983,3.80027 2.656081,5.70782 0.0065,0.62278 -1.227555,0.98057 -1.325116,0.20712 l -2.412991,-4.92076 -3.060547,2.98633 c 0.263642,0.60805 0.596803,1.19246 0.814693,1.81614 -0.182662,0.60103 -1.26833,0.8373 -1.365856,0.0679 l -2.388284,-4.87037 -3.177734,3.10156 z"
+ id="path5565-5"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g1429"
+ transform="translate(-132,-248)"
+ inkscape:label="screenshooter capture area ">
+ <title
+ id="title1423">screenshot-ui-area</title>
+ <rect
+ width="31.999998"
+ height="31.999998"
+ x="-491.99994"
+ y="-163.99998"
+ id="rect1425"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none;stroke-width:1" />
+ <path
+ d="m 135.5,462 a 3.515,3.515 0 0 0 -3.5,3.5 c 0,1.385 0.822,2.593 2,3.158 V 472 h 2 v -3.037 A 3.521,3.521 0 0 0 138.963,466 H 141 v -2 h -2.342 a 3.516,3.516 0 0 0 -3.158,-2 z m 25,0 a 3.516,3.516 0 0 0 -3.158,2 H 155 v 2 h 2.037 A 3.521,3.521 0 0 0 160,468.963 V 472 h 2 v -3.342 a 3.516,3.516 0 0 0 2,-3.158 c 0,-1.921 -1.579,-3.5 -3.5,-3.5 z m -25,2 c 0.84,0 1.5,0.66 1.5,1.5 0,0.84 -0.66,1.5 -1.5,1.5 -0.84,0 -1.5,-0.66 -1.5,-1.5 0,-0.84 0.66,-1.5 1.5,-1.5 z m 7.5,0 v 2 h 4 v -2 z m 6,0 v 2 h 4 v -2 z m 11.5,0 c 0.84,0 1.5,0.66 1.5,1.5 0,0.84 -0.66,1.5 -1.5,1.5 -0.84,0 -1.5,-0.66 -1.5,-1.5 0,-0.84 0.66,-1.5 1.5,-1.5 z M 134,474 v 4 h 2 v -4 z m 26,0 v 4 h 2 v -4 z m -26,6 v 3.342 a 3.516,3.516 0 0 0 -2,3.158 c 0,1.921 1.579,3.5 3.5,3.5 a 3.516,3.516 0 0 0 3.158,-2 H 141 v -2 h -2.037 A 3.521,3.521 0 0 0 136,483.037 V 480 Z m 26,0 v 3.037 A 3.521,3.521 0 0 0 157.037,486 H 155 v 2 h 2.342 a 3.516,3.516 0 0 0 3.158,2 c 1.921,0 3.5,-1.579 3.5,-3.5 a 3.516,3.516 0 0 0 -2,-3.158 V 480 Z m -24.5,5 c 0.84,0 1.5,0.66 1.5,1.5 0,0.84 -0.66,1.5 -1.5,1.5 -0.84,0 -1.5,-0.66 -1.5,-1.5 0,-0.84 0.66,-1.5 1.5,-1.5 z m 25,0 c 0.84,0 1.5,0.66 1.5,1.5 0,0.84 -0.66,1.5 -1.5,1.5 -0.84,0 -1.5,-0.66 -1.5,-1.5 0,-0.84 0.66,-1.5 1.5,-1.5 z m -17.5,1 v 2 h 4 v -2 z m 6,0 v 2 h 4 v -2 z"
+ id="path2-3"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g4349"
+ transform="translate(-92,-248)"
+ inkscape:label="screenshooter capture display screen ">
+ <title
+ id="title4343">screenshot-ui-display</title>
+ <rect
+ width="31.999998"
+ height="31.999998"
+ x="-491.99994"
+ y="-163.99998"
+ id="rect4345"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none;stroke-width:1" />
+ <path
+ id="path9443"
+ d="m 136,464 c -1.662,0 -3,1.338 -3,3 v 14 c 0,1.662 1.338,3 3,3 h 10 v 2.99805 h -3.00195 c -1.0901,-7e-5 -1.99805,0.90995 -1.99805,2 H 142.99805 153 155 C 155,487.908 154.09,487.00007 153,487 h -2.99805 v -3 H 160 c 1.662,0 3,-1.338 3,-3 v -14 c 0,-1.662 -1.338,-3 -3,-3 z m 0,2 h 24 c 0.554,0 1,0.446 1,1 v 14 c 0,0.554 -0.446,1 -1,1 h -24 c -0.554,0 -1,-0.446 -1,-1 v -14 c 0,-0.554 0.446,-1 1,-1 z"
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+ <g
+ id="g4445"
+ transform="translate(-52,-248)"
+ inkscape:label="screenshooter capture windows">
+ <title
+ id="title4439">screenshot-ui-window</title>
+ <path
+ id="rect28516"
+ d="m 135,463 c -1.6447,0 -3,1.3553 -3,3 v 14 c 0,1.6447 1.3553,3 3,3 h 3.99805 v 3 c 0,1.6447 1.3553,3 3,3 h 18.99804 c 1.6447,0 3,-1.3553 3,-3 v -14 c 0,-1.6447 -1.3553,-3 -3,-3 h -4 v -3 c 0,-1.6447 -1.3553,-3 -3,-3 z m 0,2 h 18.99609 c 0.5713,0 1,0.4287 1,1 v 3 h -12.99804 c -1.6447,0 -3,1.3553 -3,3 v 9 H 135 c -0.5713,0 -1,-0.4287 -1,-1 v -14 c 0,-0.5713 0.4287,-1 1,-1 z m 6.99805,6 h 18.99804 c 0.5713,0 1,0.4287 1,1 v 14 c 0,0.5713 -0.4287,1 -1,1 h -18.99804 c -0.5713,0 -1,-0.4287 -1,-1 v -14 c 0,-0.5713 0.4287,-1 1,-1 z"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ width="31.999998"
+ height="31.999998"
+ x="-491.99994"
+ y="-163.99998"
+ id="rect4441"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none;stroke-width:1" />
+ </g>
+ <g
+ id="g42319"
+ transform="translate(-12,-248)"
+ inkscape:label="screenshooter capture windows">
+ <title
+ id="title42313">screenshot-ui-window</title>
+ <path
+ id="path42315"
+ d="m 135,463 c -1.6447,0 -3,1.3553 -3,3 v 14 c 0,1.6447 1.3553,3 3,3 h 3.99805 v 3 c 0,1.6447 1.3553,3 3,3 h 18.99804 c 1.6447,0 3,-1.3553 3,-3 v -14 c 0,-1.6447 -1.3553,-3 -3,-3 h -4 v -3 c 0,-1.6447 -1.3553,-3 -3,-3 z m 0,2 h 18.99609 c 0.5713,0 1,0.4287 1,1 v 3 h -12.99804 c -1.6447,0 -3,1.3553 -3,3 v 9 H 135 c -0.5713,0 -1,-0.4287 -1,-1 v -14 c 0,-0.5713 0.4287,-1 1,-1 z m 6.99805,6 h 18.99804 c 0.5713,0 1,0.4287 1,1 v 14 c 0,0.5713 -0.4287,1 -1,1 h -18.99804 c -0.5713,0 -1,-0.4287 -1,-1 v -14 c 0,-0.5713 0.4287,-1 1,-1 z"
+ style="fill:#241f31;fill-opacity:1" />
+ <rect
+ width="31.999998"
+ height="31.999998"
+ x="-491.99994"
+ y="-163.99998"
+ id="rect42317"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none;stroke-width:1" />
+ </g>
+ <g
+ id="g42429"
+ inkscape:label="screenshooter capture display screen "
+ transform="translate(-80,-335.53331)">
+ <title
+ id="title42423">screenshot-ui-show-pointer</title>
+ <rect
+ transform="scale(-1,1)"
+ y="663.53333"
+ x="-96"
+ height="16"
+ width="16"
+ id="rect42425"
+ style="fill:none" />
+ <path
+ d="m 82.95312,664.60753 2.41797,13.21094 3.23828,-2.39844 2.05469,2.64844 c 1.03125,1.43359 3.14844,-0.21094 2.01172,-1.5625 l -2.01562,-2.59375 2.98437,-2.17579 z m 0,0"
+ fill="#2e3436"
+ id="path2-35" />
+ </g>
+ <g
+ id="g14227"
+ transform="translate(-71.999987,-207.99997)"
+ inkscape:label="overview window close">
+ <title
+ id="title15444">preview-close</title>
+ <rect
+ width="23.999996"
+ height="23.999996"
+ x="-487.99997"
+ y="-159.99998"
+ id="rect14223"
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="fill:none" />
+ </g>
+ <path
+ id="path986"
+ d="M 71 262 A 1 1 0 0 0 70.292969 262.29297 A 1 1 0 0 0 70.292969 263.70703 L 74.585938 268 L 70.292969 272.29297 A 1 1 0 0 0 70.292969 273.70703 A 1 1 0 0 0 71.707031 273.70703 L 76 269.41406 L 80.292969 273.70703 A 1 1 0 0 0 81.707031 273.70703 A 1 1 0 0 0 81.707031 272.29297 L 77.414062 268 L 81.707031 263.70703 A 1 1 0 0 0 81.707031 262.29297 A 1 1 0 0 0 81 262 A 1 1 0 0 0 80.292969 262.29297 L 76 266.58594 L 71.707031 262.29297 A 1 1 0 0 0 71 262 z "
+ style="fill:#241f31;fill-opacity:1" />
+ </g>
+</svg>
diff --git a/data/org.gnome.Shell.Extensions.desktop.in.in b/data/org.gnome.Shell.Extensions.desktop.in.in
new file mode 100644
index 0000000..9c3b6bc
--- /dev/null
+++ b/data/org.gnome.Shell.Extensions.desktop.in.in
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+# Keep in sync with subprojects/extensions-app
+Name=Extensions
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=org.gnome.Shell.Extensions
+# Never launch this, just provide name+icon to portal dialog
+Exec=false
+OnlyShowIn=GNOME;
+NoDisplay=true
diff --git a/data/org.gnome.Shell.PortalHelper.desktop.in.in b/data/org.gnome.Shell.PortalHelper.desktop.in.in
new file mode 100644
index 0000000..269669e
--- /dev/null
+++ b/data/org.gnome.Shell.PortalHelper.desktop.in.in
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Network Login
+Type=Application
+Exec=gapplication launch org.gnome.Shell.PortalHelper
+DBusActivatable=true
+NoDisplay=true
+# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
+Icon=network-workgroup
+StartupNotify=true
+OnlyShowIn=GNOME;
diff --git a/data/org.gnome.Shell.PortalHelper.service.in b/data/org.gnome.Shell.PortalHelper.service.in
new file mode 100644
index 0000000..5465a32
--- /dev/null
+++ b/data/org.gnome.Shell.PortalHelper.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.Shell.PortalHelper
+Exec=@libexecdir@/gnome-shell-portal-helper
diff --git a/data/org.gnome.Shell.desktop.in.in b/data/org.gnome.Shell.desktop.in.in
new file mode 100644
index 0000000..59d1cd2
--- /dev/null
+++ b/data/org.gnome.Shell.desktop.in.in
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Name=GNOME Shell
+Comment=Window management and application launching
+Exec=@bindir@/gnome-shell
+Categories=GNOME;GTK;Core;
+OnlyShowIn=GNOME;
+NoDisplay=true
+X-GNOME-Autostart-Phase=DisplayServer
+X-GNOME-Provides=panel;windowmanager;
+X-GNOME-Autostart-Notify=true
+X-GNOME-AutoRestart=false
+X-GNOME-HiddenUnderSystemd=@systemd_hidden@
diff --git a/data/org.gnome.Shell.target b/data/org.gnome.Shell.target
new file mode 100644
index 0000000..55f9539
--- /dev/null
+++ b/data/org.gnome.Shell.target
@@ -0,0 +1,10 @@
+[Unit]
+Description=GNOME Shell
+DefaultDependencies=no
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+Wants=org.gnome.Shell@wayland.service
+Wants=org.gnome.Shell@x11.service
diff --git a/data/org.gnome.Shell@wayland.service.in b/data/org.gnome.Shell@wayland.service.in
new file mode 100644
index 0000000..76d5ccb
--- /dev/null
+++ b/data/org.gnome.Shell@wayland.service.in
@@ -0,0 +1,37 @@
+[Unit]
+Description=GNOME Shell on Wayland
+# On wayland, force a session shutdown
+OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+[Service]
+Slice=session.slice
+Type=notify
+# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I in
+# the [Unit] section with systemd >= 246. Also, the current solution is
+# kind of painful as systemd had a bug where it retries the condition.
+# Only start if the template instance matches the session type.
+ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2'
+ExecStart=@bindir@/gnome-shell
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+
+# unset some environment variables that were set by the shell and won't work now that the shell is gone
+ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY'
+
+# On wayland we cannot restart
+Restart=no
+# Kill any stubborn child processes after this long
+TimeoutStopSec=5
+
+# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early
+OOMScoreAdjust=-1000
diff --git a/data/org.gnome.Shell@x11.service.in b/data/org.gnome.Shell@x11.service.in
new file mode 100644
index 0000000..078d87a
--- /dev/null
+++ b/data/org.gnome.Shell@x11.service.in
@@ -0,0 +1,42 @@
+[Unit]
+Description=GNOME Shell on X11
+# On X11, try to show the GNOME Session Failed screen
+OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-failed.target
+OnFailureJobMode=replace
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+# Limit startup frequency more than the default
+StartLimitIntervalSec=15s
+StartLimitBurst=3
+
+[Service]
+Slice=session.slice
+Type=notify
+# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I in
+# the [Unit] section with systemd >= 246. Also, the current solution is
+# kind of painful as systemd had a bug where it retries the condition.
+# Only start if the template instance matches the session type.
+ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2'
+ExecStart=@bindir@/gnome-shell
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+
+# On X11 we do not need to unset any variables
+
+# On X11 we want to restart on-success (Alt+F2 + r) and on-failure.
+Restart=always
+# Do not wait before restarting the shell
+RestartSec=0ms
+# Kill any stubborn child processes after this long
+TimeoutStopSec=5
+
+# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early
+OOMScoreAdjust=-1000
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
new file mode 100644
index 0000000..86ad1b2
--- /dev/null
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -0,0 +1,364 @@
+<schemalist>
+ <schema id="org.gnome.shell" path="/org/gnome/shell/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="development-tools" type="b">
+ <default>true</default>
+ <summary>
+ Enable internal tools useful for developers and testers from Alt-F2
+ </summary>
+ <description>
+ Allows access to internal debugging and monitoring tools
+ using the Alt-F2 dialog.
+ </description>
+ </key>
+ <key name="enabled-extensions" type="as">
+ <default>[]</default>
+ <summary>UUIDs of extensions to enable</summary>
+ <description>
+ GNOME Shell extensions have a UUID property; this key lists extensions
+ which should be loaded. Any extension that wants to be loaded needs
+ to be in this list. You can also manipulate this list with the
+ EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
+ </description>
+ </key>
+ <key name="disabled-extensions" type="as">
+ <default>[]</default>
+ <summary>UUIDs of extensions to force disabling</summary>
+ <description>
+ GNOME Shell extensions have a UUID property; this key lists extensions
+ which should be disabled, even if loaded as part of the current mode.
+ You can also manipulate this list with the EnableExtension and
+ DisableExtension D-Bus methods on org.gnome.Shell.
+ This key takes precedence over the “enabled-extensions” setting.
+ </description>
+ </key>
+ <key name="disable-user-extensions" type="b">
+ <default>false</default>
+ <summary>Disable user extensions</summary>
+ <description>
+ Disable all extensions the user has enabled without affecting
+ the “enabled-extension” setting.
+ </description>
+ </key>
+ <key name="disable-extension-version-validation" type="b">
+ <default>false</default>
+ <summary>Disables the validation of extension version compatibility</summary>
+ <description>
+ GNOME Shell will only load extensions that claim to support the current
+ running version. Enabling this option will disable this check and try to
+ load all extensions regardless of the versions they claim to support.
+ </description>
+ </key>
+ <key name="favorite-apps" type="as">
+ <default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
+ <summary>List of desktop file IDs for favorite applications</summary>
+ <description>
+ The applications corresponding to these identifiers
+ will be displayed in the favorites area.
+ </description>
+ </key>
+ <key name="command-history" type="as">
+ <default>[]</default>
+ <summary>History for command (Alt-F2) dialog</summary>
+ </key>
+ <key name="looking-glass-history" type="as">
+ <default>[]</default>
+ <!-- Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass -->
+ <summary>History for the looking glass dialog</summary>
+ </key>
+ <key name="always-show-log-out" type="b">
+ <default>false</default>
+ <summary>Always show the “Log out” menu item in the user menu.</summary>
+ <description>
+ This key overrides the automatic hiding of the “Log out”
+ menu item in single-user, single-session situations.
+ </description>
+ </key>
+ <key name="remember-mount-password" type="b">
+ <default>false</default>
+ <summary>Whether to remember password for mounting encrypted or remote filesystems</summary>
+ <description>
+ The shell will request a password when an encrypted device or a
+ remote filesystem is mounted. If the password can be saved for
+ future use a “Remember Password” checkbox will be present.
+ This key sets the default state of the checkbox.
+ </description>
+ </key>
+ <key name="last-selected-power-profile" type="s">
+ <default>"power-saver"</default>
+ <summary>The last selected non-default power profile</summary>
+ <description>
+ Some systems support more than two power profiles. In order to still support
+ toggling between two profiles, this key records the last selected non-default
+ profile.
+ </description>
+ </key>
+ <key name="welcome-dialog-last-shown-version" type="s">
+ <default>''</default>
+ <summary>The last version the “Welcome to GNOME” dialog was shown for</summary>
+ <description>
+ This key determines for which version the “Welcome to GNOME” dialog was
+ last shown. An empty string represents the oldest possible version, and
+ a huge number will represent versions that do not exist yet. This huge
+ number can be used to effectively disable the dialog.
+ </description>
+ </key>
+ <key name="app-picker-layout" type="aa{sv}">
+ <default><![CDATA[
+ [{
+ 'org.gnome.Geary.desktop': <{'position': <0>}>,
+ 'org.gnome.Contacts.desktop': <{'position': <1>}>,
+ 'org.gnome.Weather.desktop': <{'position': <2>}>,
+ 'org.gnome.clocks.desktop': <{'position': <3>}>,
+ 'org.gnome.Maps.desktop': <{'position': <4>}>,
+ 'org.gnome.Books.desktop': <{'position': <5>}>,
+ 'org.gnome.Photos.desktop': <{'position': <6>}>,
+ 'org.gnome.Totem.desktop': <{'position': <7>}>,
+ 'org.gnome.Calculator.desktop': <{'position': <8>}>,
+ 'org.gnome.gedit.desktop': <{'position': <9>}>,
+ 'simple-scan.desktop': <{'position': <10>}>,
+ 'org.gnome.Settings.desktop': <{'position': <11>}>,
+ 'gnome-system-monitor.desktop': <{'position': <12>}>,
+ 'org.gnome.Boxes.desktop': <{'position': <13>}>,
+ 'org.gnome.Terminal.desktop': <{'position': <14>}>,
+ 'Utilities': <{'position': <15>}>,
+ 'org.gnome.Characters.desktop': <{'position': <16>}>,
+ 'yelp.desktop': <{'position': <17>}>,
+ 'org.gnome.Screenshot.desktop': <{'position': <18>}>,
+ 'org.gnome.Cheese.desktop': <{'position': <19>}>,
+ 'org.gnome.font-viewer.desktop': <{'position': <20>}>
+ }]
+ ]]></default>
+ <summary>Layout of the app picker</summary>
+ <description>
+ Layout of the app picker. Each entry in the array is a page. Pages are
+ stored in the order they appear in GNOME Shell. Each page contains an
+ “application id” → 'data' pair. Currently, the following values are
+ stored as 'data':
+ • “position”: the position of the application icon in the page
+ </description>
+ </key>
+ <child name="keybindings" schema="org.gnome.shell.keybindings"/>
+ </schema>
+
+ <schema id="org.gnome.shell.keybindings" path="/org/gnome/shell/keybindings/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="open-application-menu" type="as">
+ <default>["&lt;Super&gt;F10"]</default>
+ <summary>Keybinding to open the application menu</summary>
+ <description>
+ Keybinding to open the application menu.
+ </description>
+ </key>
+ <key name="shift-overview-up" type="as">
+ <default>["&lt;Super&gt;&lt;Alt&gt;Up"]</default>
+ <summary>Keybinding to shift between overview states</summary>
+ <description>
+ Keybinding to shift between session, window picker and app grid
+ </description>
+ </key>
+ <key name="shift-overview-down" type="as">
+ <default>["&lt;Super&gt;&lt;Alt&gt;Down"]</default>
+ <summary>Keybinding to shift between overview states</summary>
+ <description>
+ Keybinding to shift between app grid, window picker and session
+ </description>
+ </key>
+ <key name="toggle-application-view" type="as">
+ <default>["&lt;Super&gt;a"]</default>
+ <summary>Keybinding to open the “Show Applications” view</summary>
+ <description>
+ Keybinding to open the “Show Applications” view of the Activities
+ Overview.
+ </description>
+ </key>
+ <key name="toggle-overview" type="as">
+ <default>["&lt;Super&gt;s"]</default>
+ <summary>Keybinding to open the overview</summary>
+ <description>
+ Keybinding to open the Activities Overview.
+ </description>
+ </key>
+ <key name="toggle-message-tray" type="as">
+ <default>["&lt;Super&gt;v","&lt;Super&gt;m"]</default>
+ <summary>Keybinding to toggle the visibility of the notification list</summary>
+ <description>
+ Keybinding to toggle the visibility of the notification list.
+ </description>
+ </key>
+ <key name="focus-active-notification" type="as">
+ <default>["&lt;Super&gt;n"]</default>
+ <summary>Keybinding to focus the active notification</summary>
+ <description>
+ Keybinding to focus the active notification.
+ </description>
+ </key>
+ <key name="switch-to-application-1" type="as">
+ <default>["&lt;Super&gt;1"]</default>
+ <summary>Switch to application 1</summary>
+ </key>
+ <key name="switch-to-application-2" type="as">
+ <default>["&lt;Super&gt;2"]</default>
+ <summary>Switch to application 2</summary>
+ </key>
+ <key name="switch-to-application-3" type="as">
+ <default>["&lt;Super&gt;3"]</default>
+ <summary>Switch to application 3</summary>
+ </key>
+ <key name="switch-to-application-4" type="as">
+ <default>["&lt;Super&gt;4"]</default>
+ <summary>Switch to application 4</summary>
+ </key>
+ <key name="switch-to-application-5" type="as">
+ <default>["&lt;Super&gt;5"]</default>
+ <summary>Switch to application 5</summary>
+ </key>
+ <key name="switch-to-application-6" type="as">
+ <default>["&lt;Super&gt;6"]</default>
+ <summary>Switch to application 6</summary>
+ </key>
+ <key name="switch-to-application-7" type="as">
+ <default>["&lt;Super&gt;7"]</default>
+ <summary>Switch to application 7</summary>
+ </key>
+ <key name="switch-to-application-8" type="as">
+ <default>["&lt;Super&gt;8"]</default>
+ <summary>Switch to application 8</summary>
+ </key>
+ <key name="switch-to-application-9" type="as">
+ <default>["&lt;Super&gt;9"]</default>
+ <summary>Switch to application 9</summary>
+ </key>
+ <key name="show-screenshot-ui" type="as">
+ <default>["Print"]</default>
+ <summary>Take a screenshot interactively</summary>
+ </key>
+ <key name="show-screen-recording-ui" type="as">
+ <default>["&lt;Ctrl&gt;&lt;Shift&gt;&lt;Alt&gt;R"]</default>
+ <summary>Record a screencast interactively</summary>
+ </key>
+ <key name="screenshot-window" type="as">
+ <default>["&lt;Alt&gt;Print"]</default>
+ <summary>Take a screenshot of a window</summary>
+ </key>
+ <key name="screenshot" type="as">
+ <default>["&lt;Shift&gt;Print"]</default>
+ <summary>Take a screenshot</summary>
+ </key>
+ </schema>
+
+ <schema id="org.gnome.shell.app-switcher"
+ path="/org/gnome/shell/app-switcher/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key type="b" name="current-workspace-only">
+ <default>false</default>
+ <summary>Limit switcher to current workspace.</summary>
+ <description>
+ If true, only applications that have windows on the current workspace are shown in the switcher.
+ Otherwise, all applications are included.
+ </description>
+ </key>
+ </schema>
+
+ <enum id="org.gnome.shell.window-switcher.AppIconMode">
+ <value value="1" nick="thumbnail-only"/>
+ <value value="2" nick="app-icon-only"/>
+ <value value="3" nick="both"/>
+ </enum>
+ <schema id="org.gnome.shell.window-switcher"
+ path="/org/gnome/shell/window-switcher/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="app-icon-mode" enum="org.gnome.shell.window-switcher.AppIconMode">
+ <default>'both'</default>
+ <summary>The application icon mode.</summary>
+ <description>
+ Configures how the windows are shown in the switcher. Valid possibilities
+ are “thumbnail-only” (shows a thumbnail of the window), “app-icon-only”
+ (shows only the application icon) or “both”.
+ </description>
+ </key>
+ <key type="b" name="current-workspace-only">
+ <default>true</default>
+ <summary>Limit switcher to current workspace.</summary>
+ <description>
+ If true, only windows from the current workspace are shown in the switcher.
+ Otherwise, all windows are included.
+ </description>
+ </key>
+ </schema>
+
+ <schema id="org.gnome.shell.world-clocks" path="/org/gnome/shell/world-clocks/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="locations" type="av">
+ <summary>Locations</summary>
+ <description>
+ The locations to show in world clocks
+ </description>
+ <default>[]</default>
+ </key>
+ </schema>
+
+ <schema id="org.gnome.shell.weather" path="/org/gnome/shell/weather/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="automatic-location" type="b">
+ <summary>Automatic location</summary>
+ <description>
+ Whether to fetch the current location or not
+ </description>
+ <default>false</default>
+ </key>
+
+ <key name="locations" type="av">
+ <summary>Location</summary>
+ <description>
+ The location for which to show a forecast
+ </description>
+ <default>[]</default>
+ </key>
+ </schema>
+
+ <!-- unused, change 00_org.gnome.shell.gschema.override instead -->
+ <schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/"
+ gettext-domain="@GETTEXT_PACKAGE@">
+ <key name="attach-modal-dialogs" type="b">
+ <default>true</default>
+ <summary>Attach modal dialog to the parent window</summary>
+ <description>
+ This key overrides the key in org.gnome.mutter when running
+ GNOME Shell.
+ </description>
+ </key>
+
+ <key name="edge-tiling" type="b">
+ <default>true</default>
+ <summary>Enable edge tiling when dropping windows on screen edges</summary>
+ <description>
+ This key overrides the key in org.gnome.mutter when running GNOME Shell.
+ </description>
+ </key>
+
+ <key name="dynamic-workspaces" type="b">
+ <default>true</default>
+ <summary>Workspaces are managed dynamically</summary>
+ <description>
+ This key overrides the key in org.gnome.mutter when running GNOME Shell.
+ </description>
+ </key>
+
+ <key name="workspaces-only-on-primary" type="b">
+ <default>true</default>
+ <summary>Workspaces only on primary monitor</summary>
+ <description>
+ This key overrides the key in org.gnome.mutter when running GNOME Shell.
+ </description>
+ </key>
+
+ <key name="focus-change-on-pointer-rest" type="b">
+ <default>true</default>
+ <summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
+ <description>
+ This key overrides the key in org.gnome.mutter when running GNOME Shell.
+ </description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/osk-layouts/am.json b/data/osk-layouts/am.json
new file mode 100644
index 0000000..8316774
--- /dev/null
+++ b/data/osk-layouts/am.json
@@ -0,0 +1,1051 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "է"
+ ]
+ },
+ {
+ "strings": [
+ "թ"
+ ]
+ },
+ {
+ "strings": [
+ "փ"
+ ]
+ },
+ {
+ "strings": [
+ "ձ"
+ ]
+ },
+ {
+ "strings": [
+ "ջ"
+ ]
+ },
+ {
+ "strings": [
+ "ր"
+ ]
+ },
+ {
+ "strings": [
+ "չ"
+ ]
+ },
+ {
+ "strings": [
+ "ճ"
+ ]
+ },
+ {
+ "strings": [
+ "ժ"
+ ]
+ },
+ {
+ "strings": [
+ "ծ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ք"
+ ]
+ },
+ {
+ "strings": [
+ "ո"
+ ]
+ },
+ {
+ "strings": [
+ "ե",
+ "և"
+ ]
+ },
+ {
+ "strings": [
+ "ռ"
+ ]
+ },
+ {
+ "strings": [
+ "տ"
+ ]
+ },
+ {
+ "strings": [
+ "ը"
+ ]
+ },
+ {
+ "strings": [
+ "ւ"
+ ]
+ },
+ {
+ "strings": [
+ "ի"
+ ]
+ },
+ {
+ "strings": [
+ "օ"
+ ]
+ },
+ {
+ "strings": [
+ "պ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ա"
+ ]
+ },
+ {
+ "strings": [
+ "ս"
+ ]
+ },
+ {
+ "strings": [
+ "դ"
+ ]
+ },
+ {
+ "strings": [
+ "ֆ"
+ ]
+ },
+ {
+ "strings": [
+ "գ"
+ ]
+ },
+ {
+ "strings": [
+ "հ"
+ ]
+ },
+ {
+ "strings": [
+ "յ"
+ ]
+ },
+ {
+ "strings": [
+ "կ"
+ ]
+ },
+ {
+ "strings": [
+ "լ"
+ ]
+ },
+ {
+ "strings": [
+ "խ"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "զ"
+ ]
+ },
+ {
+ "strings": [
+ "ղ"
+ ]
+ },
+ {
+ "strings": [
+ "ց"
+ ]
+ },
+ {
+ "strings": [
+ "վ"
+ ]
+ },
+ {
+ "strings": [
+ "բ"
+ ]
+ },
+ {
+ "strings": [
+ "ն"
+ ]
+ },
+ {
+ "strings": [
+ "մ"
+ ]
+ },
+ {
+ "strings": [
+ "շ"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "strings": [
+ "։"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Է"
+ ]
+ },
+ {
+ "strings": [
+ "Թ"
+ ]
+ },
+ {
+ "strings": [
+ "Փ"
+ ]
+ },
+ {
+ "strings": [
+ "Ձ"
+ ]
+ },
+ {
+ "strings": [
+ "Ջ"
+ ]
+ },
+ {
+ "strings": [
+ "Ր"
+ ]
+ },
+ {
+ "strings": [
+ "Չ"
+ ]
+ },
+ {
+ "strings": [
+ "Ճ"
+ ]
+ },
+ {
+ "strings": [
+ "Ժ"
+ ]
+ },
+ {
+ "strings": [
+ "Ծ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ք"
+ ]
+ },
+ {
+ "strings": [
+ "Ո"
+ ]
+ },
+ {
+ "strings": [
+ "Ե",
+ "ԵՒ"
+ ]
+ },
+ {
+ "strings": [
+ "Ռ"
+ ]
+ },
+ {
+ "strings": [
+ "Տ"
+ ]
+ },
+ {
+ "strings": [
+ "Ը"
+ ]
+ },
+ {
+ "strings": [
+ "Ւ"
+ ]
+ },
+ {
+ "strings": [
+ "Ի"
+ ]
+ },
+ {
+ "strings": [
+ "Օ"
+ ]
+ },
+ {
+ "strings": [
+ "Պ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ա"
+ ]
+ },
+ {
+ "strings": [
+ "Ս"
+ ]
+ },
+ {
+ "strings": [
+ "Դ"
+ ]
+ },
+ {
+ "strings": [
+ "Ֆ"
+ ]
+ },
+ {
+ "strings": [
+ "Գ"
+ ]
+ },
+ {
+ "strings": [
+ "Հ"
+ ]
+ },
+ {
+ "strings": [
+ "Յ"
+ ]
+ },
+ {
+ "strings": [
+ "Կ"
+ ]
+ },
+ {
+ "strings": [
+ "Լ"
+ ]
+ },
+ {
+ "strings": [
+ "Խ"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Զ"
+ ]
+ },
+ {
+ "strings": [
+ "Ղ"
+ ]
+ },
+ {
+ "strings": [
+ "Ց"
+ ]
+ },
+ {
+ "strings": [
+ "Վ"
+ ]
+ },
+ {
+ "strings": [
+ "Բ"
+ ]
+ },
+ {
+ "strings": [
+ "Ն"
+ ]
+ },
+ {
+ "strings": [
+ "Մ"
+ ]
+ },
+ {
+ "strings": [
+ "Շ"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "strings": [
+ "։"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "՜",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "՞",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "՝"
+ ]
+ },
+ {
+ "strings": [
+ "։",
+ "!",
+ "?",
+ ",",
+ ".",
+ "֊",
+ "՜",
+ "՝",
+ "՞",
+ ":",
+ ";",
+ "@",
+ "ՙ",
+ "՚",
+ "՛",
+ "՟"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "՝"
+ ]
+ },
+ {
+ "strings": [
+ "։",
+ "!",
+ "?",
+ ",",
+ ".",
+ "֊",
+ "՜",
+ "՝",
+ "՞",
+ ":",
+ ";",
+ "@",
+ "ՙ",
+ "՚",
+ "՛",
+ "՟"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "hy",
+ "name": "Armenian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/ara.json b/data/osk-layouts/ara.json
new file mode 100644
index 0000000..10095ce
--- /dev/null
+++ b/data/osk-layouts/ara.json
@@ -0,0 +1,793 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ض"
+ ]
+ },
+ {
+ "strings": [
+ "ص"
+ ]
+ },
+ {
+ "strings": [
+ "ث"
+ ]
+ },
+ {
+ "strings": [
+ "ق",
+ "ڨ"
+ ]
+ },
+ {
+ "strings": [
+ "ف",
+ "ڤ",
+ "ڢ",
+ "ڥ"
+ ]
+ },
+ {
+ "strings": [
+ "غ"
+ ]
+ },
+ {
+ "strings": [
+ "ع"
+ ]
+ },
+ {
+ "strings": [
+ "ه",
+ "ه‍"
+ ]
+ },
+ {
+ "strings": [
+ "خ"
+ ]
+ },
+ {
+ "strings": [
+ "ح"
+ ]
+ },
+ {
+ "strings": [
+ "ج",
+ "چ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ش",
+ "ڜ"
+ ]
+ },
+ {
+ "strings": [
+ "س"
+ ]
+ },
+ {
+ "strings": [
+ "ي",
+ "ئ",
+ "ى"
+ ]
+ },
+ {
+ "strings": [
+ "ب",
+ "پ"
+ ]
+ },
+ {
+ "strings": [
+ "ل",
+ "لا",
+ "لأ",
+ "لإ",
+ "لآ"
+ ]
+ },
+ {
+ "strings": [
+ "ا",
+ "آ",
+ "ء",
+ "أ",
+ "إ",
+ "ٱ"
+ ]
+ },
+ {
+ "strings": [
+ "ت"
+ ]
+ },
+ {
+ "strings": [
+ "ن"
+ ]
+ },
+ {
+ "strings": [
+ "م"
+ ]
+ },
+ {
+ "strings": [
+ "ك",
+ "گ",
+ "ک"
+ ]
+ },
+ {
+ "strings": [
+ "ط"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ذ"
+ ]
+ },
+ {
+ "strings": [
+ "ء"
+ ]
+ },
+ {
+ "strings": [
+ "ؤ"
+ ]
+ },
+ {
+ "strings": [
+ "ر"
+ ]
+ },
+ {
+ "strings": [
+ "ى",
+ "ئ"
+ ]
+ },
+ {
+ "strings": [
+ "ة"
+ ]
+ },
+ {
+ "strings": [
+ "و"
+ ]
+ },
+ {
+ "strings": [
+ "ز",
+ "ژ"
+ ]
+ },
+ {
+ "strings": [
+ "ظ"
+ ]
+ },
+ {
+ "strings": [
+ "د"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "،"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "\"",
+ "'",
+ "#",
+ "-",
+ ":",
+ "!",
+ "،",
+ "؟",
+ "@",
+ "&",
+ "%",
+ "+",
+ "؛",
+ "/",
+ ")",
+ "("
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "١",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "٢",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "٣",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "٤",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "٥",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "٦"
+ ]
+ },
+ {
+ "strings": [
+ "٧",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "٨"
+ ]
+ },
+ {
+ "strings": [
+ "٩"
+ ]
+ },
+ {
+ "strings": [
+ "٠",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "٪",
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "﴿",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ "﴾",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "★",
+ "٭"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ "؛",
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "؟",
+ "?"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "،",
+ "؟",
+ "؛",
+ "!",
+ ":",
+ "-",
+ "/",
+ "'",
+ "\""
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "ٕ",
+ "ٔ",
+ "ْ",
+ "ٍ",
+ "ٌ",
+ "ً",
+ "ّ",
+ "ٖ",
+ "ٰ",
+ "ٓ",
+ "ِ",
+ "ُ",
+ "َ",
+ "ـ"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "،",
+ "؟",
+ "؛",
+ "!",
+ ":",
+ "-",
+ "/",
+ "'",
+ "\""
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "ٕ",
+ "ٔ",
+ "ْ",
+ "ٍ",
+ "ٌ",
+ "ً",
+ "ّ",
+ "ٖ",
+ "ٰ",
+ "ٓ",
+ "ِ",
+ "ُ",
+ "َ",
+ "ـ"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ar",
+ "name": "Arabic"
+} \ No newline at end of file
diff --git a/data/osk-layouts/at.json b/data/osk-layouts/at.json
new file mode 100644
index 0000000..511dc90
--- /dev/null
+++ b/data/osk-layouts/at.json
@@ -0,0 +1,978 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ė"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "û",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "ô",
+ "ò",
+ "ó",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ä",
+ "â",
+ "à",
+ "á",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ė"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ä",
+ "Â",
+ "À",
+ "Á",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "de-AT",
+ "name": "Austrian German"
+}
diff --git a/data/osk-layouts/be.json b/data/osk-layouts/be.json
new file mode 100644
index 0000000..6e4f75d
--- /dev/null
+++ b/data/osk-layouts/be.json
@@ -0,0 +1,1021 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "â",
+ "à",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ë",
+ "ê",
+ "è",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ÿ",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "ì",
+ "î",
+ "į",
+ "ī",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "Â",
+ "À",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ë",
+ "Ê",
+ "È",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ÿ",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Ì",
+ "Î",
+ "Į",
+ "Ī",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "ẞ"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "nl-BE",
+ "name": "Dutch (Belgium)"
+}
diff --git a/data/osk-layouts/bg.json b/data/osk-layouts/bg.json
new file mode 100644
index 0000000..fb7385d
--- /dev/null
+++ b/data/osk-layouts/bg.json
@@ -0,0 +1,955 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "е"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "и",
+ "ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "strings": [
+ "щ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "ь"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "ю"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "Е"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "И",
+ "Ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "strings": [
+ "Щ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Ь"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "bg",
+ "name": "Bulgarian"
+}
diff --git a/data/osk-layouts/by.json b/data/osk-layouts/by.json
new file mode 100644
index 0000000..25543eb
--- /dev/null
+++ b/data/osk-layouts/by.json
@@ -0,0 +1,965 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "е",
+ "ё"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "strings": [
+ "ў"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "ы"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "і"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ь",
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Е",
+ "Ё"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "strings": [
+ "Ў"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Ы"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "І"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ь",
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "be",
+ "name": "Belarusian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/ca.json b/data/osk-layouts/ca.json
new file mode 100644
index 0000000..230a6ba
--- /dev/null
+++ b/data/osk-layouts/ca.json
@@ -0,0 +1,1007 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "%",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "%",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ù",
+ "û",
+ "%",
+ "ü",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "%",
+ "ï",
+ "ì",
+ "í",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "œ",
+ "%",
+ "ö",
+ "ò",
+ "ó",
+ "õ",
+ "ø",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "â",
+ "%",
+ "æ",
+ "á",
+ "ä",
+ "ã",
+ "å",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "%",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "%",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ù",
+ "Û",
+ "%",
+ "Ü",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "%",
+ "Ï",
+ "Ì",
+ "Í",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Œ",
+ "%",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Ø",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Â",
+ "%",
+ "Æ",
+ "Á",
+ "Ä",
+ "Ã",
+ "Å",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fr-CA",
+ "name": "French Canada"
+}
diff --git a/data/osk-layouts/ch+fr.json b/data/osk-layouts/ch+fr.json
new file mode 100644
index 0000000..7735c2e
--- /dev/null
+++ b/data/osk-layouts/ch+fr.json
@@ -0,0 +1,978 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ė"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "û",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "ô",
+ "ò",
+ "ó",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ä",
+ "â",
+ "à",
+ "á",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ė"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ä",
+ "Â",
+ "À",
+ "Á",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fr-CH",
+ "name": "Swiss French"
+}
diff --git a/data/osk-layouts/ch.json b/data/osk-layouts/ch.json
new file mode 100644
index 0000000..aa062b0
--- /dev/null
+++ b/data/osk-layouts/ch.json
@@ -0,0 +1,978 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ė"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "û",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "ô",
+ "ò",
+ "ó",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ä",
+ "â",
+ "à",
+ "á",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ė"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ä",
+ "Â",
+ "À",
+ "Á",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "de-CH",
+ "name": "Swiss German"
+}
diff --git a/data/osk-layouts/cz.json b/data/osk-layouts/cz.json
new file mode 100644
index 0000000..7a3d09a
--- /dev/null
+++ b/data/osk-layouts/cz.json
@@ -0,0 +1,1021 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ě",
+ "è",
+ "ê",
+ "ë",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ř"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ť"
+ ]
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ź",
+ "ż"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ů",
+ "û",
+ "ü",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "î",
+ "ï",
+ "ì",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ç",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ň",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ě",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ř"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ť"
+ ]
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ź",
+ "Ż"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ů",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Î",
+ "Ï",
+ "Ì",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ç",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ň",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "cs",
+ "name": "Czech"
+}
diff --git a/data/osk-layouts/de.json b/data/osk-layouts/de.json
new file mode 100644
index 0000000..d36e399
--- /dev/null
+++ b/data/osk-layouts/de.json
@@ -0,0 +1,978 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ė"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "û",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "ô",
+ "ò",
+ "ó",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ä",
+ "â",
+ "à",
+ "á",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ė"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ä",
+ "Â",
+ "À",
+ "Á",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "de",
+ "name": "German"
+}
diff --git a/data/osk-layouts/dk.json b/data/osk-layouts/dk.json
new file mode 100644
index 0000000..3b01ac8
--- /dev/null
+++ b/data/osk-layouts/dk.json
@@ -0,0 +1,1012 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ë"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "strings": [
+ "å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "à",
+ "â",
+ "ã",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ð"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ł"
+ ]
+ },
+ {
+ "strings": [
+ "æ",
+ "ä"
+ ]
+ },
+ {
+ "strings": [
+ "ø",
+ "ö"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ë"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "strings": [
+ "Å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "À",
+ "Â",
+ "Ã",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ð"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ł"
+ ]
+ },
+ {
+ "strings": [
+ "Æ",
+ "Ä"
+ ]
+ },
+ {
+ "strings": [
+ "Ø",
+ "Ö"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "da",
+ "name": "Danish"
+}
diff --git a/data/osk-layouts/ee.json b/data/osk-layouts/ee.json
new file mode 100644
index 0000000..f858a62
--- /dev/null
+++ b/data/osk-layouts/ee.json
@@ -0,0 +1,1088 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "ē",
+ "è",
+ "ė",
+ "é",
+ "ê",
+ "ë",
+ "ę",
+ "ě"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ŗ",
+ "ř",
+ "ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ţ",
+ "ť"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "ū",
+ "ų",
+ "ù",
+ "ú",
+ "û",
+ "ů",
+ "ű"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "ī",
+ "ì",
+ "į",
+ "í",
+ "î",
+ "ï",
+ "ı"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "õ",
+ "ò",
+ "ó",
+ "ô",
+ "œ",
+ "ő",
+ "ø"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "strings": [
+ "ü"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ä",
+ "ā",
+ "à",
+ "á",
+ "â",
+ "ã",
+ "å",
+ "æ",
+ "ą"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś",
+ "ş"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ģ",
+ "ğ"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k",
+ "ķ"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ļ",
+ "ł",
+ "ĺ",
+ "ľ"
+ ]
+ },
+ {
+ "strings": [
+ "ö",
+ "õ"
+ ]
+ },
+ {
+ "strings": [
+ "ä"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ż",
+ "ź"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ç",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ņ",
+ "ñ",
+ "ń",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "Ē",
+ "È",
+ "Ė",
+ "É",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ě"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ŗ",
+ "Ř",
+ "Ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ţ",
+ "Ť"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Ū",
+ "Ų",
+ "Ù",
+ "Ú",
+ "Û",
+ "Ů",
+ "Ű"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Ī",
+ "Ì",
+ "Į",
+ "Í",
+ "Î",
+ "Ï",
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Õ",
+ "Ò",
+ "Ó",
+ "Ô",
+ "Œ",
+ "Ő",
+ "Ø"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "strings": [
+ "Ü"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ä",
+ "Ā",
+ "À",
+ "Á",
+ "Â",
+ "Ã",
+ "Å",
+ "Æ",
+ "Ą"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś",
+ "Ş"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ģ",
+ "Ğ"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K",
+ "Ķ"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ļ",
+ "Ł",
+ "Ĺ",
+ "Ľ"
+ ]
+ },
+ {
+ "strings": [
+ "Ö",
+ "Õ"
+ ]
+ },
+ {
+ "strings": [
+ "Ä"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ż",
+ "Ź"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ç",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ņ",
+ "Ñ",
+ "Ń",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "et",
+ "name": "Estonian"
+}
diff --git a/data/osk-layouts/epo.json b/data/osk-layouts/epo.json
new file mode 100644
index 0000000..a6d262c
--- /dev/null
+++ b/data/osk-layouts/epo.json
@@ -0,0 +1,1123 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ŝ",
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "ĝ",
+ "w",
+ "ŵ"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ě",
+ "è",
+ "ê",
+ "ë",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ř",
+ "ŕ",
+ "ŗ"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ť",
+ "ț",
+ "ţ",
+ "ŧ"
+ ]
+ },
+ {
+ "strings": [
+ "ŭ",
+ "y",
+ "ý",
+ "ŷ",
+ "ÿ",
+ "þ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ů",
+ "û",
+ "ü",
+ "ù",
+ "ū",
+ "ũ",
+ "ű",
+ "ų",
+ "µ"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "î",
+ "ï",
+ "ĩ",
+ "ì",
+ "į",
+ "ī",
+ "ı",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō",
+ "ő",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā",
+ "ă",
+ "ą",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "š",
+ "ś",
+ "ș",
+ "ş"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ð",
+ "ď",
+ "đ"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ğ",
+ "ġ",
+ "ģ"
+ ]
+ },
+ {
+ "strings": [
+ "h",
+ "ĥ",
+ "ħ"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k",
+ "ķ",
+ "ĸ"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ĺ",
+ "ļ",
+ "ľ",
+ "ŀ",
+ "ł"
+ ]
+ },
+ {
+ "strings": [
+ "ĵ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ź",
+ "ż",
+ "ž"
+ ]
+ },
+ {
+ "strings": [
+ "ĉ",
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ć",
+ "č",
+ "ç",
+ "ċ"
+ ]
+ },
+ {
+ "strings": [
+ "v",
+ "w",
+ "ŵ"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń",
+ "ņ",
+ "ň",
+ "ʼn",
+ "ŋ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Ŝ",
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "Ĝ",
+ "W",
+ "Ŵ"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ě",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ř",
+ "Ŕ",
+ "Ŗ"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ť",
+ "Ț",
+ "Ţ",
+ "Ŧ"
+ ]
+ },
+ {
+ "strings": [
+ "Ŭ",
+ "Y",
+ "Ý",
+ "Ŷ",
+ "Ÿ",
+ "Þ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ů",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ū",
+ "Ũ",
+ "Ű",
+ "Ų",
+ "Μ"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Î",
+ "Ï",
+ "Ĩ",
+ "Ì",
+ "Į",
+ "Ī",
+ "I",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō",
+ "Ő",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā",
+ "Ă",
+ "Ą",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Š",
+ "Ś",
+ "Ș",
+ "Ş"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ð",
+ "Ď",
+ "Đ"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ğ",
+ "Ġ",
+ "Ģ"
+ ]
+ },
+ {
+ "strings": [
+ "H",
+ "Ĥ",
+ "Ħ"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K",
+ "Ķ",
+ "ĸ"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ĺ",
+ "Ļ",
+ "Ľ",
+ "Ŀ",
+ "Ł"
+ ]
+ },
+ {
+ "strings": [
+ "Ĵ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ź",
+ "Ż",
+ "Ž"
+ ]
+ },
+ {
+ "strings": [
+ "Ĉ",
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ć",
+ "Č",
+ "Ç",
+ "Ċ"
+ ]
+ },
+ {
+ "strings": [
+ "V",
+ "W",
+ "Ŵ"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń",
+ "Ņ",
+ "Ň",
+ "ʼN",
+ "Ŋ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "eo",
+ "name": "Esperanto"
+}
diff --git a/data/osk-layouts/es+cat.json b/data/osk-layouts/es+cat.json
new file mode 100644
index 0000000..fab8d4e
--- /dev/null
+++ b/data/osk-layouts/es+cat.json
@@ -0,0 +1,1014 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ë",
+ "ê",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "ù",
+ "û",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "ì",
+ "î",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ò",
+ "ó",
+ "ö",
+ "ô",
+ "õ",
+ "ø",
+ "œ",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "ä",
+ "â",
+ "ã",
+ "å",
+ "ą",
+ "æ",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "l·l",
+ "ł"
+ ]
+ },
+ {
+ "strings": [
+ "ç"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "·",
+ "!",
+ ",",
+ "?",
+ ":",
+ ";",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ë",
+ "Ê",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Ù",
+ "Û",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Ì",
+ "Î",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ò",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Õ",
+ "Ø",
+ "Œ",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Ä",
+ "Â",
+ "Ã",
+ "Å",
+ "Ą",
+ "Æ",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "L·L",
+ "Ł"
+ ]
+ },
+ {
+ "strings": [
+ "Ç"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "·",
+ "!",
+ ",",
+ "?",
+ ":",
+ ";",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "·"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "·"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ca",
+ "name": "Catalan"
+}
diff --git a/data/osk-layouts/es.json b/data/osk-layouts/es.json
new file mode 100644
index 0000000..652c07f
--- /dev/null
+++ b/data/osk-layouts/es.json
@@ -0,0 +1,1016 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ë",
+ "ê",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "ù",
+ "û",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "ì",
+ "î",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ò",
+ "ö",
+ "ô",
+ "õ",
+ "ø",
+ "œ",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "ä",
+ "â",
+ "ã",
+ "å",
+ "ą",
+ "æ",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "strings": [
+ "ñ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ";",
+ "!",
+ ",",
+ "?",
+ ":",
+ "¡",
+ "@",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ë",
+ "Ê",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Ù",
+ "Û",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Ì",
+ "Î",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ò",
+ "Ö",
+ "Ô",
+ "Õ",
+ "Ø",
+ "Œ",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Ä",
+ "Â",
+ "Ã",
+ "Å",
+ "Ą",
+ "Æ",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "strings": [
+ "Ñ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ";",
+ "!",
+ ",",
+ "?",
+ ":",
+ "¡",
+ "@",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "es",
+ "name": "Spanish"
+}
diff --git a/data/osk-layouts/fi.json b/data/osk-layouts/fi.json
new file mode 100644
index 0000000..b7d0d81
--- /dev/null
+++ b/data/osk-layouts/fi.json
@@ -0,0 +1,992 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ø",
+ "ô",
+ "ò",
+ "ó",
+ "õ",
+ "œ",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "strings": [
+ "å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "æ",
+ "à",
+ "á",
+ "â",
+ "ã",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "strings": [
+ "ö",
+ "ø"
+ ]
+ },
+ {
+ "strings": [
+ "ä",
+ "æ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ź",
+ "ż"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ø",
+ "Ô",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Œ",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "strings": [
+ "Å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Æ",
+ "À",
+ "Á",
+ "Â",
+ "Ã",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "strings": [
+ "Ö",
+ "Ø"
+ ]
+ },
+ {
+ "strings": [
+ "Ä",
+ "Æ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ź",
+ "Ż"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fi",
+ "name": "Finnish"
+}
diff --git a/data/osk-layouts/fr.json b/data/osk-layouts/fr.json
new file mode 100644
index 0000000..bf1ba86
--- /dev/null
+++ b/data/osk-layouts/fr.json
@@ -0,0 +1,1026 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "â",
+ "%",
+ "æ",
+ "á",
+ "ä",
+ "ã",
+ "å",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "%",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "%",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ù",
+ "û",
+ "%",
+ "ü",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "%",
+ "ï",
+ "ì",
+ "í",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "œ",
+ "%",
+ "ö",
+ "ò",
+ "ó",
+ "õ",
+ "ø",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Â",
+ "%",
+ "Æ",
+ "Á",
+ "Ä",
+ "Ã",
+ "Å",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "%",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "%",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ù",
+ "Û",
+ "%",
+ "Ü",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "%",
+ "Ï",
+ "Ì",
+ "Í",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Œ",
+ "%",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Ø",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fr",
+ "name": "French"
+}
diff --git a/data/osk-layouts/ge.json b/data/osk-layouts/ge.json
new file mode 100644
index 0000000..7bc88d5
--- /dev/null
+++ b/data/osk-layouts/ge.json
@@ -0,0 +1,705 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ქ"
+ ]
+ },
+ {
+ "strings": [
+ "წ"
+ ]
+ },
+ {
+ "strings": [
+ "ე",
+ "ჱ"
+ ]
+ },
+ {
+ "strings": [
+ "რ"
+ ]
+ },
+ {
+ "strings": [
+ "ტ"
+ ]
+ },
+ {
+ "strings": [
+ "ყ",
+ "ჸ"
+ ]
+ },
+ {
+ "strings": [
+ "უ"
+ ]
+ },
+ {
+ "strings": [
+ "ი",
+ "ჲ"
+ ]
+ },
+ {
+ "strings": [
+ "ო"
+ ]
+ },
+ {
+ "strings": [
+ "პ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ა",
+ "ჺ"
+ ]
+ },
+ {
+ "strings": [
+ "ს"
+ ]
+ },
+ {
+ "strings": [
+ "დ"
+ ]
+ },
+ {
+ "strings": [
+ "ფ",
+ "ჶ"
+ ]
+ },
+ {
+ "strings": [
+ "გ",
+ "ჹ"
+ ]
+ },
+ {
+ "strings": [
+ "ჰ",
+ "ჵ"
+ ]
+ },
+ {
+ "strings": [
+ "ჯ",
+ "ჷ"
+ ]
+ },
+ {
+ "strings": [
+ "კ"
+ ]
+ },
+ {
+ "strings": [
+ "ლ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ზ"
+ ]
+ },
+ {
+ "strings": [
+ "ხ",
+ "ჴ"
+ ]
+ },
+ {
+ "strings": [
+ "ც"
+ ]
+ },
+ {
+ "strings": [
+ "ვ",
+ "ჳ"
+ ]
+ },
+ {
+ "strings": [
+ "ბ"
+ ]
+ },
+ {
+ "strings": [
+ "ნ",
+ "ჼ"
+ ]
+ },
+ {
+ "strings": [
+ "მ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ka",
+ "name": "Georgian"
+}
diff --git a/data/osk-layouts/gr.json b/data/osk-layouts/gr.json
new file mode 100644
index 0000000..a60a186
--- /dev/null
+++ b/data/osk-layouts/gr.json
@@ -0,0 +1,940 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ ";",
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ "ς"
+ ]
+ },
+ {
+ "strings": [
+ "ε",
+ "έ"
+ ]
+ },
+ {
+ "strings": [
+ "ρ"
+ ]
+ },
+ {
+ "strings": [
+ "τ"
+ ]
+ },
+ {
+ "strings": [
+ "υ",
+ "ύ",
+ "ϋ",
+ "ΰ"
+ ]
+ },
+ {
+ "strings": [
+ "θ"
+ ]
+ },
+ {
+ "strings": [
+ "ι",
+ "ί",
+ "ϊ",
+ "ΐ"
+ ]
+ },
+ {
+ "strings": [
+ "ο",
+ "ό"
+ ]
+ },
+ {
+ "strings": [
+ "π"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "α",
+ "ά"
+ ]
+ },
+ {
+ "strings": [
+ "σ"
+ ]
+ },
+ {
+ "strings": [
+ "δ"
+ ]
+ },
+ {
+ "strings": [
+ "φ"
+ ]
+ },
+ {
+ "strings": [
+ "γ"
+ ]
+ },
+ {
+ "strings": [
+ "η",
+ "ή"
+ ]
+ },
+ {
+ "strings": [
+ "ξ"
+ ]
+ },
+ {
+ "strings": [
+ "κ"
+ ]
+ },
+ {
+ "strings": [
+ "λ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "ζ"
+ ]
+ },
+ {
+ "strings": [
+ "χ"
+ ]
+ },
+ {
+ "strings": [
+ "ψ"
+ ]
+ },
+ {
+ "strings": [
+ "ω",
+ "ώ"
+ ]
+ },
+ {
+ "strings": [
+ "β"
+ ]
+ },
+ {
+ "strings": [
+ "ν"
+ ]
+ },
+ {
+ "strings": [
+ "μ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ ";",
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ "Σ"
+ ]
+ },
+ {
+ "strings": [
+ "Ε",
+ "Έ"
+ ]
+ },
+ {
+ "strings": [
+ "Ρ"
+ ]
+ },
+ {
+ "strings": [
+ "Τ"
+ ]
+ },
+ {
+ "strings": [
+ "Υ",
+ "Ύ",
+ "Ϋ",
+ "Ϋ́"
+ ]
+ },
+ {
+ "strings": [
+ "Θ"
+ ]
+ },
+ {
+ "strings": [
+ "Ι",
+ "Ί",
+ "Ϊ",
+ "Ϊ́"
+ ]
+ },
+ {
+ "strings": [
+ "Ο",
+ "Ό"
+ ]
+ },
+ {
+ "strings": [
+ "Π"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Α",
+ "Ά"
+ ]
+ },
+ {
+ "strings": [
+ "Σ"
+ ]
+ },
+ {
+ "strings": [
+ "Δ"
+ ]
+ },
+ {
+ "strings": [
+ "Φ"
+ ]
+ },
+ {
+ "strings": [
+ "Γ"
+ ]
+ },
+ {
+ "strings": [
+ "Η",
+ "Ή"
+ ]
+ },
+ {
+ "strings": [
+ "Ξ"
+ ]
+ },
+ {
+ "strings": [
+ "Κ"
+ ]
+ },
+ {
+ "strings": [
+ "Λ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Ζ"
+ ]
+ },
+ {
+ "strings": [
+ "Χ"
+ ]
+ },
+ {
+ "strings": [
+ "Ψ"
+ ]
+ },
+ {
+ "strings": [
+ "Ω",
+ "Ώ"
+ ]
+ },
+ {
+ "strings": [
+ "Β"
+ ]
+ },
+ {
+ "strings": [
+ "Ν"
+ ]
+ },
+ {
+ "strings": [
+ "Μ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "el",
+ "name": "Greek"
+}
diff --git a/data/osk-layouts/hr.json b/data/osk-layouts/hr.json
new file mode 100644
index 0000000..444014b
--- /dev/null
+++ b/data/osk-layouts/hr.json
@@ -0,0 +1,939 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ź",
+ "ż"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ś",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "đ"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ć",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ź",
+ "Ż"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "Ś",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Đ"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ć",
+ "Ç"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "hr",
+ "name": "Croatian"
+}
diff --git a/data/osk-layouts/hu.json b/data/osk-layouts/hu.json
new file mode 100644
index 0000000..f45f31c
--- /dev/null
+++ b/data/osk-layouts/hu.json
@@ -0,0 +1,987 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "ű",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "î",
+ "ï",
+ "ì",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ő",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Ű",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Î",
+ "Ï",
+ "Ì",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ő",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "hu",
+ "name": "Hungarian"
+}
diff --git a/data/osk-layouts/id.json b/data/osk-layouts/id.json
new file mode 100644
index 0000000..6d57095
--- /dev/null
+++ b/data/osk-layouts/id.json
@@ -0,0 +1,915 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "id",
+ "name": "Indonesian"
+}
diff --git a/data/osk-layouts/il.json b/data/osk-layouts/il.json
new file mode 100644
index 0000000..d797b74
--- /dev/null
+++ b/data/osk-layouts/il.json
@@ -0,0 +1,718 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "'",
+ "\""
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "ק"
+ ]
+ },
+ {
+ "strings": [
+ "ר"
+ ]
+ },
+ {
+ "strings": [
+ "א"
+ ]
+ },
+ {
+ "strings": [
+ "ט"
+ ]
+ },
+ {
+ "strings": [
+ "ו"
+ ]
+ },
+ {
+ "strings": [
+ "ן"
+ ]
+ },
+ {
+ "strings": [
+ "ם"
+ ]
+ },
+ {
+ "strings": [
+ "פ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ש"
+ ]
+ },
+ {
+ "strings": [
+ "ד"
+ ]
+ },
+ {
+ "strings": [
+ "ג",
+ "ג׳"
+ ]
+ },
+ {
+ "strings": [
+ "כ"
+ ]
+ },
+ {
+ "strings": [
+ "ע"
+ ]
+ },
+ {
+ "strings": [
+ "י",
+ "ײַ"
+ ]
+ },
+ {
+ "strings": [
+ "ח",
+ "ח׳"
+ ]
+ },
+ {
+ "strings": [
+ "ל"
+ ]
+ },
+ {
+ "strings": [
+ "ך"
+ ]
+ },
+ {
+ "strings": [
+ "ף"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ז",
+ "ז׳"
+ ]
+ },
+ {
+ "strings": [
+ "ס"
+ ]
+ },
+ {
+ "strings": [
+ "ב"
+ ]
+ },
+ {
+ "strings": [
+ "ה"
+ ]
+ },
+ {
+ "strings": [
+ "נ"
+ ]
+ },
+ {
+ "strings": [
+ "מ"
+ ]
+ },
+ {
+ "strings": [
+ "צ",
+ "צ׳"
+ ]
+ },
+ {
+ "strings": [
+ "ת",
+ "ת׳"
+ ]
+ },
+ {
+ "strings": [
+ "ץ",
+ "ץ׳"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₪",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±",
+ "﬩"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "he",
+ "name": "Hebrew"
+} \ No newline at end of file
diff --git a/data/osk-layouts/in+bolnagri.json b/data/osk-layouts/in+bolnagri.json
new file mode 100644
index 0000000..e280633
--- /dev/null
+++ b/data/osk-layouts/in+bolnagri.json
@@ -0,0 +1,745 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "◌ौ"
+ ]
+ },
+ {
+ "strings": [
+ "◌ै"
+ ]
+ },
+ {
+ "strings": [
+ "◌ा"
+ ]
+ },
+ {
+ "strings": [
+ "◌ी"
+ ]
+ },
+ {
+ "strings": [
+ "◌ू"
+ ]
+ },
+ {
+ "strings": [
+ "ब",
+ "ब॒",
+ "%"
+ ]
+ },
+ {
+ "strings": [
+ "ह"
+ ]
+ },
+ {
+ "strings": [
+ "ग",
+ "ज्ञ",
+ "ग़",
+ "ग॒",
+ "%"
+ ]
+ },
+ {
+ "strings": [
+ "द"
+ ]
+ },
+ {
+ "strings": [
+ "ज",
+ "ज॒",
+ "ज्ञ",
+ "ज़",
+ "%"
+ ]
+ },
+ {
+ "strings": [
+ "ड",
+ "ड॒",
+ "ड़"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "◌ो"
+ ]
+ },
+ {
+ "strings": [
+ "◌े"
+ ]
+ },
+ {
+ "strings": [
+ "◌्"
+ ]
+ },
+ {
+ "strings": [
+ "◌ि"
+ ]
+ },
+ {
+ "strings": [
+ "◌ु"
+ ]
+ },
+ {
+ "strings": [
+ "प"
+ ]
+ },
+ {
+ "strings": [
+ "र",
+ "ऋ",
+ "ऱ",
+ "ॠ"
+ ]
+ },
+ {
+ "strings": [
+ "क",
+ "क़"
+ ]
+ },
+ {
+ "strings": [
+ "त",
+ "त्र"
+ ]
+ },
+ {
+ "strings": [
+ "च"
+ ]
+ },
+ {
+ "strings": [
+ "ट"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "◌ॉ"
+ ]
+ },
+ {
+ "strings": [
+ "◌ं"
+ ]
+ },
+ {
+ "strings": [
+ "म",
+ "ॐ"
+ ]
+ },
+ {
+ "strings": [
+ "न",
+ "ञ",
+ "ङ",
+ "ऩ"
+ ]
+ },
+ {
+ "strings": [
+ "व"
+ ]
+ },
+ {
+ "strings": [
+ "ल",
+ "ऌ",
+ "ॡ"
+ ]
+ },
+ {
+ "strings": [
+ "स"
+ ]
+ },
+ {
+ "strings": [
+ "य",
+ "य़"
+ ]
+ },
+ {
+ "strings": [
+ "◌़"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "१",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "२",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "३",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "४",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "५",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "६"
+ ]
+ },
+ {
+ "strings": [
+ "७",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "८"
+ ]
+ },
+ {
+ "strings": [
+ "९"
+ ]
+ },
+ {
+ "strings": [
+ "०",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₹",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "hi",
+ "name": "Hindi"
+}
diff --git a/data/osk-layouts/in+mal.json b/data/osk-layouts/in+mal.json
new file mode 100644
index 0000000..49dcd6b
--- /dev/null
+++ b/data/osk-layouts/in+mal.json
@@ -0,0 +1,986 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ൌ"
+ ]
+ },
+ {
+ "strings": [
+ "ൈ"
+ ]
+ },
+ {
+ "strings": [
+ "ാ"
+ ]
+ },
+ {
+ "strings": [
+ "ീ"
+ ]
+ },
+ {
+ "strings": [
+ "ൂ"
+ ]
+ },
+ {
+ "strings": [
+ "ബ"
+ ]
+ },
+ {
+ "strings": [
+ "ഹ"
+ ]
+ },
+ {
+ "strings": [
+ "ഗ"
+ ]
+ },
+ {
+ "strings": [
+ "ദ"
+ ]
+ },
+ {
+ "strings": [
+ "ജ"
+ ]
+ },
+ {
+ "strings": [
+ "ഡ"
+ ]
+ },
+ {
+ "label": "ZWJ",
+ "strings": [
+ "‍"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ോ"
+ ]
+ },
+ {
+ "strings": [
+ "േ"
+ ]
+ },
+ {
+ "strings": [
+ "്"
+ ]
+ },
+ {
+ "strings": [
+ "ി"
+ ]
+ },
+ {
+ "strings": [
+ "ു"
+ ]
+ },
+ {
+ "strings": [
+ "പ"
+ ]
+ },
+ {
+ "strings": [
+ "ര"
+ ]
+ },
+ {
+ "strings": [
+ "ക"
+ ]
+ },
+ {
+ "strings": [
+ "ത"
+ ]
+ },
+ {
+ "strings": [
+ "ച"
+ ]
+ },
+ {
+ "strings": [
+ "ട"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1
+ },
+ {
+ "strings": [
+ "െ"
+ ]
+ },
+ {
+ "strings": [
+ "ം"
+ ]
+ },
+ {
+ "strings": [
+ "മ",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "ന"
+ ]
+ },
+ {
+ "strings": [
+ "വ"
+ ]
+ },
+ {
+ "strings": [
+ "ല",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "സ"
+ ]
+ },
+ {
+ "strings": [
+ "ഷ"
+ ]
+ },
+ {
+ "strings": [
+ "യ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ഐ"
+ ]
+ },
+ {
+ "strings": [
+ "ആ"
+ ]
+ },
+ {
+ "strings": [
+ "ഈ"
+ ]
+ },
+ {
+ "strings": [
+ "ഊ"
+ ]
+ },
+ {
+ "strings": [
+ "ഭ"
+ ]
+ },
+ {
+ "strings": [
+ "ങ"
+ ]
+ },
+ {
+ "strings": [
+ "ഘ"
+ ]
+ },
+ {
+ "strings": [
+ "ധ"
+ ]
+ },
+ {
+ "strings": [
+ "ഝ"
+ ]
+ },
+ {
+ "strings": [
+ "ഢ"
+ ]
+ },
+ {
+ "strings": [
+ "ഞ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ഓ"
+ ]
+ },
+ {
+ "strings": [
+ "ഏ"
+ ]
+ },
+ {
+ "strings": [
+ "അ"
+ ]
+ },
+ {
+ "strings": [
+ "ഇ"
+ ]
+ },
+ {
+ "strings": [
+ "ഉ"
+ ]
+ },
+ {
+ "strings": [
+ "ഫ"
+ ]
+ },
+ {
+ "strings": [
+ "റ"
+ ]
+ },
+ {
+ "strings": [
+ "ഖ"
+ ]
+ },
+ {
+ "strings": [
+ "ഥ"
+ ]
+ },
+ {
+ "strings": [
+ "ഛ"
+ ]
+ },
+ {
+ "strings": [
+ "ഠ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "എ"
+ ]
+ },
+ {
+ "label": "ZWJ",
+ "strings": [
+ "​"
+ ]
+ },
+ {
+ "strings": [
+ "ണ"
+ ]
+ },
+ {
+ "strings": [
+ "ന"
+ ]
+ },
+ {
+ "strings": [
+ "ഴ"
+ ]
+ },
+ {
+ "strings": [
+ "ള"
+ ]
+ },
+ {
+ "strings": [
+ "ശ"
+ ]
+ },
+ {
+ "strings": [
+ "ഷ"
+ ]
+ },
+ {
+ "strings": [
+ "യ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "൧",
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "൨",
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "൩",
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "൪",
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "൫",
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "൬",
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "൭",
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "൮",
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "൯",
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "൦",
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₹",
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ml",
+ "name": "Malayalam"
+}
diff --git a/data/osk-layouts/ir.json b/data/osk-layouts/ir.json
new file mode 100644
index 0000000..eab25bb
--- /dev/null
+++ b/data/osk-layouts/ir.json
@@ -0,0 +1,797 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ض"
+ ]
+ },
+ {
+ "strings": [
+ "ص"
+ ]
+ },
+ {
+ "strings": [
+ "ث"
+ ]
+ },
+ {
+ "strings": [
+ "ق",
+ "ڨ"
+ ]
+ },
+ {
+ "strings": [
+ "ف",
+ "ڤ",
+ "ڢ",
+ "ڥ"
+ ]
+ },
+ {
+ "strings": [
+ "غ"
+ ]
+ },
+ {
+ "strings": [
+ "ع"
+ ]
+ },
+ {
+ "strings": [
+ "ه",
+ "ه‍"
+ ]
+ },
+ {
+ "strings": [
+ "خ"
+ ]
+ },
+ {
+ "strings": [
+ "ح"
+ ]
+ },
+ {
+ "strings": [
+ "ج",
+ "چ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ش",
+ "ڜ"
+ ]
+ },
+ {
+ "strings": [
+ "س"
+ ]
+ },
+ {
+ "strings": [
+ "ي",
+ "ئ",
+ "ى"
+ ]
+ },
+ {
+ "strings": [
+ "ب",
+ "پ"
+ ]
+ },
+ {
+ "strings": [
+ "ل",
+ "لا",
+ "لأ",
+ "لإ",
+ "لآ"
+ ]
+ },
+ {
+ "strings": [
+ "ا",
+ "آ",
+ "ء",
+ "أ",
+ "إ",
+ "ٱ"
+ ]
+ },
+ {
+ "strings": [
+ "ت"
+ ]
+ },
+ {
+ "strings": [
+ "ن"
+ ]
+ },
+ {
+ "strings": [
+ "م"
+ ]
+ },
+ {
+ "strings": [
+ "ك",
+ "گ",
+ "ک"
+ ]
+ },
+ {
+ "strings": [
+ "ط"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ذ"
+ ]
+ },
+ {
+ "strings": [
+ "ء"
+ ]
+ },
+ {
+ "strings": [
+ "ؤ"
+ ]
+ },
+ {
+ "strings": [
+ "ر"
+ ]
+ },
+ {
+ "strings": [
+ "ى",
+ "ئ"
+ ]
+ },
+ {
+ "strings": [
+ "ة"
+ ]
+ },
+ {
+ "strings": [
+ "و"
+ ]
+ },
+ {
+ "strings": [
+ "ز",
+ "ژ"
+ ]
+ },
+ {
+ "strings": [
+ "ظ"
+ ]
+ },
+ {
+ "strings": [
+ "د"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "،"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "\"",
+ "'",
+ "#",
+ "-",
+ ":",
+ "!",
+ "،",
+ "؟",
+ "@",
+ "&",
+ "%",
+ "+",
+ "؛",
+ "/",
+ ")",
+ "("
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "۱",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "۲",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "۳",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "۴",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "۵",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "۶"
+ ]
+ },
+ {
+ "strings": [
+ "۷",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "۸"
+ ]
+ },
+ {
+ "strings": [
+ "۹"
+ ]
+ },
+ {
+ "strings": [
+ "۰",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "٬",
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "٫",
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "﷼",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "٪",
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "﴿",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ "﴾",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "★",
+ "٭"
+ ]
+ },
+ {
+ "strings": [
+ "«",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "»",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ "؛",
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "؟",
+ "?"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "،",
+ ":",
+ "!",
+ "؟",
+ "؛",
+ "-",
+ "/",
+ "»",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "ٕ",
+ "ٔ",
+ "ْ",
+ "ٍ",
+ "ٌ",
+ "ً",
+ "ّ",
+ "ٖ",
+ "ٰ",
+ "ٓ",
+ "ِ",
+ "ُ",
+ "َ",
+ "ـ"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "«",
+ "›",
+ "≥",
+ ">"
+ ]
+ },
+ {
+ "strings": [
+ "»",
+ "‹",
+ "≤",
+ "<"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ "،",
+ ":",
+ "!",
+ "؟",
+ "؛",
+ "-",
+ "/",
+ "»",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "ٕ",
+ "ٔ",
+ "ْ",
+ "ٍ",
+ "ٌ",
+ "ً",
+ "ّ",
+ "ٖ",
+ "ٰ",
+ "ٓ",
+ "ِ",
+ "ُ",
+ "َ",
+ "ـ"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fa",
+ "name": "Persian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/is.json b/data/osk-layouts/is.json
new file mode 100644
index 0000000..ac3176c
--- /dev/null
+++ b/data/osk-layouts/is.json
@@ -0,0 +1,991 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ë",
+ "è",
+ "ê",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "þ"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "î",
+ "ì",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "æ",
+ "å",
+ "à",
+ "â",
+ "ã",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ð"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ë",
+ "È",
+ "Ê",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Þ"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Î",
+ "Ì",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "Æ",
+ "Å",
+ "À",
+ "Â",
+ "Ã",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ð"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "is",
+ "name": "Icelandic"
+}
diff --git a/data/osk-layouts/it.json b/data/osk-layouts/it.json
new file mode 100644
index 0000000..781aa0f
--- /dev/null
+++ b/data/osk-layouts/it.json
@@ -0,0 +1,988 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ù",
+ "ú",
+ "û",
+ "ü",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "ì",
+ "í",
+ "î",
+ "ï",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ò",
+ "ó",
+ "ô",
+ "ö",
+ "õ",
+ "œ",
+ "ø",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ù",
+ "Ú",
+ "Û",
+ "Ü",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Ì",
+ "Í",
+ "Î",
+ "Ï",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ò",
+ "Ó",
+ "Ô",
+ "Ö",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "it",
+ "name": "Italian"
+}
diff --git a/data/osk-layouts/ke.json b/data/osk-layouts/ke.json
new file mode 100644
index 0000000..de7b8fc
--- /dev/null
+++ b/data/osk-layouts/ke.json
@@ -0,0 +1,985 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "û",
+ "ü",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "ï",
+ "í",
+ "ī",
+ "ì"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "ö",
+ "ò",
+ "ó",
+ "œ",
+ "ø",
+ "ō",
+ "õ"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "g'"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "Ï",
+ "Í",
+ "Ī",
+ "Ì"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Œ",
+ "Ø",
+ "Ō",
+ "Õ"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "G'"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "sw",
+ "name": "Swahili"
+}
diff --git a/data/osk-layouts/kg.json b/data/osk-layouts/kg.json
new file mode 100644
index 0000000..1f806ad
--- /dev/null
+++ b/data/osk-layouts/kg.json
@@ -0,0 +1,971 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "у",
+ "ү"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "е",
+ "ё"
+ ]
+ },
+ {
+ "strings": [
+ "н",
+ "ң"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "strings": [
+ "щ"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "ы"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "о",
+ "ө"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "и"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ь",
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "У",
+ "Ү"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Е",
+ "Ё"
+ ]
+ },
+ {
+ "strings": [
+ "Н",
+ "Ң"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "strings": [
+ "Щ"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Ы"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "О",
+ "Ө"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "И"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ь",
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ky",
+ "name": "Kirghiz"
+} \ No newline at end of file
diff --git a/data/osk-layouts/kh.json b/data/osk-layouts/kh.json
new file mode 100644
index 0000000..78591b5
--- /dev/null
+++ b/data/osk-layouts/kh.json
@@ -0,0 +1,817 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "១",
+ "៱"
+ ]
+ },
+ {
+ "strings": [
+ "២",
+ "៲"
+ ]
+ },
+ {
+ "strings": [
+ "៣",
+ "៳"
+ ]
+ },
+ {
+ "strings": [
+ "៤",
+ "៴"
+ ]
+ },
+ {
+ "strings": [
+ "៥",
+ "៵"
+ ]
+ },
+ {
+ "strings": [
+ "៦",
+ "៶"
+ ]
+ },
+ {
+ "strings": [
+ "៧",
+ "៷"
+ ]
+ },
+ {
+ "strings": [
+ "៨",
+ "៸"
+ ]
+ },
+ {
+ "strings": [
+ "៩",
+ "៹"
+ ]
+ },
+ {
+ "strings": [
+ "០",
+ "៰"
+ ]
+ },
+ {
+ "strings": [
+ "ឥ",
+ "",
+ "ឦ"
+ ]
+ },
+ {
+ "strings": [
+ "ឲ",
+ "ឱ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ឆ"
+ ]
+ },
+ {
+ "strings": [
+ "ឹ"
+ ]
+ },
+ {
+ "strings": [
+ "េ"
+ ]
+ },
+ {
+ "strings": [
+ "រ"
+ ]
+ },
+ {
+ "strings": [
+ "ត"
+ ]
+ },
+ {
+ "strings": [
+ "យ"
+ ]
+ },
+ {
+ "strings": [
+ "ុ"
+ ]
+ },
+ {
+ "strings": [
+ "ិ"
+ ]
+ },
+ {
+ "strings": [
+ "ោ"
+ ]
+ },
+ {
+ "strings": [
+ "ផ"
+ ]
+ },
+ {
+ "strings": [
+ "ៀ"
+ ]
+ },
+ {
+ "strings": [
+ "ឪ",
+ "ឧ",
+ "ឱ",
+ "ឳ",
+ "ឩ",
+ "ឨ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ា"
+ ]
+ },
+ {
+ "strings": [
+ "ស"
+ ]
+ },
+ {
+ "strings": [
+ "ដ"
+ ]
+ },
+ {
+ "strings": [
+ "ថ"
+ ]
+ },
+ {
+ "strings": [
+ "ង"
+ ]
+ },
+ {
+ "strings": [
+ "ហ"
+ ]
+ },
+ {
+ "strings": [
+ "្"
+ ]
+ },
+ {
+ "strings": [
+ "ក"
+ ]
+ },
+ {
+ "strings": [
+ "ល"
+ ]
+ },
+ {
+ "strings": [
+ "ើ"
+ ]
+ },
+ {
+ "strings": [
+ "់"
+ ]
+ },
+ {
+ "strings": [
+ "ឮ",
+ "ឭ",
+ "ឰ"
+ ]
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ឋ"
+ ]
+ },
+ {
+ "strings": [
+ "ខ"
+ ]
+ },
+ {
+ "strings": [
+ "ច"
+ ]
+ },
+ {
+ "strings": [
+ "វ"
+ ]
+ },
+ {
+ "strings": [
+ "ប"
+ ]
+ },
+ {
+ "strings": [
+ "ន"
+ ]
+ },
+ {
+ "strings": [
+ "ម"
+ ]
+ },
+ {
+ "strings": [
+ "ុំ"
+ ]
+ },
+ {
+ "strings": [
+ "។"
+ ]
+ },
+ {
+ "strings": [
+ "៊"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "៛",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "km",
+ "name": "Khmer"
+}
diff --git a/data/osk-layouts/kr.json b/data/osk-layouts/kr.json
new file mode 100644
index 0000000..d89f8c7
--- /dev/null
+++ b/data/osk-layouts/kr.json
@@ -0,0 +1,720 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "label": "ㅂ",
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "label": "ㅈ",
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "label": "ㄷ",
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "label": "ㄱ",
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "label": "ㅅ",
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "label": "ㅛ",
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "label": "ㅕ",
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "label": "ㅑ",
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "label": "ㅐ",
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "label": "ㅔ",
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "label": "ㅁ",
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "label": "ㄴ",
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "label": "ㅇ",
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "label": "ㄹ",
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "label": "ㅎ",
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "label": "ㅗ",
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "label": "ㅓ",
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "label": "ㅏ",
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "label": "ㅣ",
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "label": "ㅋ",
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "label": "ㅌ",
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "label": "ㅊ",
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "label": "ㅍ",
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "label": "ㅠ",
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "label": "ㅜ",
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "label": "ㅡ",
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "kr",
+ "name": "Korean (Hangul)"
+}
diff --git a/data/osk-layouts/la.json b/data/osk-layouts/la.json
new file mode 100644
index 0000000..65f0fee
--- /dev/null
+++ b/data/osk-layouts/la.json
@@ -0,0 +1,808 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ຢ",
+ "໑"
+ ]
+ },
+ {
+ "strings": [
+ "ຟ",
+ "໒"
+ ]
+ },
+ {
+ "strings": [
+ "ໂ",
+ "໓"
+ ]
+ },
+ {
+ "strings": [
+ "ຖ",
+ "໔"
+ ]
+ },
+ {
+ "strings": [
+ "ຸ"
+ ]
+ },
+ {
+ "strings": [
+ "ູ"
+ ]
+ },
+ {
+ "strings": [
+ "ຄ",
+ "໕"
+ ]
+ },
+ {
+ "strings": [
+ "ຕ",
+ "໖"
+ ]
+ },
+ {
+ "strings": [
+ "ຈ",
+ "໗"
+ ]
+ },
+ {
+ "strings": [
+ "ຂ",
+ "໘"
+ ]
+ },
+ {
+ "strings": [
+ "ຊ",
+ "໙"
+ ]
+ },
+ {
+ "strings": [
+ "ໍ"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ົ"
+ ]
+ },
+ {
+ "strings": [
+ "ໄ",
+ "໐"
+ ]
+ },
+ {
+ "strings": [
+ "ຳ"
+ ]
+ },
+ {
+ "strings": [
+ "ພ"
+ ]
+ },
+ {
+ "strings": [
+ "ະ"
+ ]
+ },
+ {
+ "strings": [
+ "ິ"
+ ]
+ },
+ {
+ "strings": [
+ "ີ"
+ ]
+ },
+ {
+ "strings": [
+ "ຮ"
+ ]
+ },
+ {
+ "strings": [
+ "ນ"
+ ]
+ },
+ {
+ "strings": [
+ "ຍ"
+ ]
+ },
+ {
+ "strings": [
+ "ບ"
+ ]
+ },
+ {
+ "strings": [
+ "ລ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ັ"
+ ]
+ },
+ {
+ "strings": [
+ "ຫ"
+ ]
+ },
+ {
+ "strings": [
+ "ກ"
+ ]
+ },
+ {
+ "strings": [
+ "ດ"
+ ]
+ },
+ {
+ "strings": [
+ "ເ"
+ ]
+ },
+ {
+ "strings": [
+ "້"
+ ]
+ },
+ {
+ "strings": [
+ "່"
+ ]
+ },
+ {
+ "strings": [
+ "າ"
+ ]
+ },
+ {
+ "strings": [
+ "ສ"
+ ]
+ },
+ {
+ "strings": [
+ "ວ"
+ ]
+ },
+ {
+ "strings": [
+ "ງ"
+ ]
+ },
+ {
+ "strings": [
+ "“"
+ ]
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ຜ"
+ ]
+ },
+ {
+ "strings": [
+ "ປ"
+ ]
+ },
+ {
+ "strings": [
+ "ແ"
+ ]
+ },
+ {
+ "strings": [
+ "ອ"
+ ]
+ },
+ {
+ "strings": [
+ "ຶ"
+ ]
+ },
+ {
+ "strings": [
+ "ື"
+ ]
+ },
+ {
+ "strings": [
+ "ທ"
+ ]
+ },
+ {
+ "strings": [
+ "ມ"
+ ]
+ },
+ {
+ "strings": [
+ "ໃ"
+ ]
+ },
+ {
+ "strings": [
+ "ຝ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₭",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "lo",
+ "name": "Lao"
+}
diff --git a/data/osk-layouts/latam.json b/data/osk-layouts/latam.json
new file mode 100644
index 0000000..01c67f8
--- /dev/null
+++ b/data/osk-layouts/latam.json
@@ -0,0 +1,1015 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ë",
+ "ê",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "ù",
+ "û",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "ì",
+ "î",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ò",
+ "ö",
+ "ô",
+ "õ",
+ "ø",
+ "œ",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "ä",
+ "â",
+ "ã",
+ "å",
+ "ą",
+ "æ",
+ "ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "strings": [
+ "ñ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ";",
+ "!",
+ ",",
+ "?",
+ ":",
+ "¡",
+ "@",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ë",
+ "Ê",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Ù",
+ "Û",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Ì",
+ "Î",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ò",
+ "Ö",
+ "Ô",
+ "Õ",
+ "Ø",
+ "Œ",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Ä",
+ "Â",
+ "Ã",
+ "Å",
+ "Ą",
+ "Æ",
+ "Ā",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "strings": [
+ "Ñ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ";",
+ "!",
+ ",",
+ "?",
+ ":",
+ "¡",
+ "@",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ",",
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "es-US",
+ "name": "Spanish United States"
+}
diff --git a/data/osk-layouts/lt.json b/data/osk-layouts/lt.json
new file mode 100644
index 0000000..3f678b5
--- /dev/null
+++ b/data/osk-layouts/lt.json
@@ -0,0 +1,1055 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "ė",
+ "ę",
+ "ē",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ě"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ŗ",
+ "ř",
+ "ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ţ",
+ "ť"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ū",
+ "ų",
+ "ü",
+ "ū",
+ "ù",
+ "ú",
+ "û",
+ "ů",
+ "ű"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "į",
+ "ī",
+ "ì",
+ "í",
+ "î",
+ "ï",
+ "ı"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "õ",
+ "ò",
+ "ó",
+ "ô",
+ "œ",
+ "ő",
+ "ø"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ą",
+ "ä",
+ "ā",
+ "à",
+ "á",
+ "â",
+ "ã",
+ "å",
+ "æ"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś",
+ "ş"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ģ",
+ "ğ"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k",
+ "ķ"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ļ",
+ "ł",
+ "ĺ",
+ "ľ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ż",
+ "ź"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ç",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ņ",
+ "ñ",
+ "ń",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "Ė",
+ "Ę",
+ "Ē",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ě"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ŗ",
+ "Ř",
+ "Ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ţ",
+ "Ť"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ū",
+ "Ų",
+ "Ü",
+ "Ū",
+ "Ù",
+ "Ú",
+ "Û",
+ "Ů",
+ "Ű"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Į",
+ "Ī",
+ "Ì",
+ "Í",
+ "Î",
+ "Ï",
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Õ",
+ "Ò",
+ "Ó",
+ "Ô",
+ "Œ",
+ "Ő",
+ "Ø"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ą",
+ "Ä",
+ "Ā",
+ "À",
+ "Á",
+ "Â",
+ "Ã",
+ "Å",
+ "Æ"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś",
+ "Ş"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ģ",
+ "Ğ"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K",
+ "Ķ"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ļ",
+ "Ł",
+ "Ĺ",
+ "Ľ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ż",
+ "Ź"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ç",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ņ",
+ "Ñ",
+ "Ń",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "lt",
+ "name": "Lithuanian"
+}
diff --git a/data/osk-layouts/lv.json b/data/osk-layouts/lv.json
new file mode 100644
index 0000000..c3141ff
--- /dev/null
+++ b/data/osk-layouts/lv.json
@@ -0,0 +1,1053 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "ē",
+ "ė",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ę",
+ "ě"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ŗ",
+ "ř",
+ "ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ţ",
+ "ť"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ū",
+ "ų",
+ "ù",
+ "ú",
+ "û",
+ "ü",
+ "ů",
+ "ű"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "ī",
+ "į",
+ "ì",
+ "í",
+ "î",
+ "ï",
+ "ı"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ò",
+ "ó",
+ "ô",
+ "õ",
+ "ö",
+ "œ",
+ "ő",
+ "ø"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ā",
+ "à",
+ "á",
+ "â",
+ "ã",
+ "ä",
+ "å",
+ "æ",
+ "ą"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś",
+ "ş"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ģ",
+ "ğ"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k",
+ "ķ"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ļ",
+ "ł",
+ "ĺ",
+ "ľ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ż",
+ "ź"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ç",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ņ",
+ "ñ",
+ "ń",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "Ē",
+ "Ė",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ě"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ŗ",
+ "Ř",
+ "Ŕ"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ţ",
+ "Ť"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ū",
+ "Ų",
+ "Ù",
+ "Ú",
+ "Û",
+ "Ü",
+ "Ů",
+ "Ű"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Ī",
+ "Į",
+ "Ì",
+ "Í",
+ "Î",
+ "Ï",
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ò",
+ "Ó",
+ "Ô",
+ "Õ",
+ "Ö",
+ "Œ",
+ "Ő",
+ "Ø"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ā",
+ "À",
+ "Á",
+ "Â",
+ "Ã",
+ "Ä",
+ "Å",
+ "Æ",
+ "Ą"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś",
+ "Ş"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ģ",
+ "Ğ"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K",
+ "Ķ"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ļ",
+ "Ł",
+ "Ĺ",
+ "Ľ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ż",
+ "Ź"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ç",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ņ",
+ "Ñ",
+ "Ń",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "lv",
+ "name": "Latvian"
+}
diff --git a/data/osk-layouts/mk.json b/data/osk-layouts/mk.json
new file mode 100644
index 0000000..0c20ead
--- /dev/null
+++ b/data/osk-layouts/mk.json
@@ -0,0 +1,965 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "љ"
+ ]
+ },
+ {
+ "strings": [
+ "њ"
+ ]
+ },
+ {
+ "strings": [
+ "е",
+ "ѐ"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ѕ"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "и",
+ "ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "strings": [
+ "ј"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "ќ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "џ"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "ѓ"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Љ"
+ ]
+ },
+ {
+ "strings": [
+ "Њ"
+ ]
+ },
+ {
+ "strings": [
+ "Е",
+ "Ѐ"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ѕ"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "И",
+ "Ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "strings": [
+ "Ј"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "Ќ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Џ"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "Ѓ"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "mk",
+ "name": "Macedonian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/mn.json b/data/osk-layouts/mn.json
new file mode 100644
index 0000000..9cf41f5
--- /dev/null
+++ b/data/osk-layouts/mn.json
@@ -0,0 +1,971 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "э"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "ш",
+ "щ"
+ ]
+ },
+ {
+ "strings": [
+ "ү"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "ы"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "ө"
+ ]
+ },
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "ё",
+ "е"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "и"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ь",
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "в",
+ "ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Э"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Ш",
+ "Щ"
+ ]
+ },
+ {
+ "strings": [
+ "Ү"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "Ы"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Ө"
+ ]
+ },
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "Ё",
+ "Е"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "И"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ь",
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "В",
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₮",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "mn",
+ "name": "Mongolian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/my.json b/data/osk-layouts/my.json
new file mode 100644
index 0000000..1aedf20
--- /dev/null
+++ b/data/osk-layouts/my.json
@@ -0,0 +1,915 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ms",
+ "name": "Malay"
+}
diff --git a/data/osk-layouts/nl.json b/data/osk-layouts/nl.json
new file mode 100644
index 0000000..61bd4dd
--- /dev/null
+++ b/data/osk-layouts/nl.json
@@ -0,0 +1,992 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ë",
+ "ê",
+ "è",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï",
+ "ì",
+ "î",
+ "į",
+ "ī",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "â",
+ "à",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ë",
+ "Ê",
+ "È",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï",
+ "Ì",
+ "Î",
+ "Į",
+ "Ī",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "Â",
+ "À",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "nl",
+ "name": "Dutch"
+}
diff --git a/data/osk-layouts/no.json b/data/osk-layouts/no.json
new file mode 100644
index 0000000..4be4522
--- /dev/null
+++ b/data/osk-layouts/no.json
@@ -0,0 +1,1012 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ë"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "û",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ï"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "strings": [
+ "å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "à",
+ "â",
+ "ã",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ð"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ł"
+ ]
+ },
+ {
+ "strings": [
+ "ø",
+ "ö"
+ ]
+ },
+ {
+ "strings": [
+ "æ",
+ "ä"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ë"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ï"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "strings": [
+ "Å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "À",
+ "Â",
+ "Ã",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ð"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ł"
+ ]
+ },
+ {
+ "strings": [
+ "Ø",
+ "Ö"
+ ]
+ },
+ {
+ "strings": [
+ "Æ",
+ "Ä"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "nb",
+ "name": "Norwegian Bokmål"
+}
diff --git a/data/osk-layouts/ph.json b/data/osk-layouts/ph.json
new file mode 100644
index 0000000..0dbe4f2
--- /dev/null
+++ b/data/osk-layouts/ph.json
@@ -0,0 +1,915 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "fil",
+ "name": "Filipino"
+}
diff --git a/data/osk-layouts/pl.json b/data/osk-layouts/pl.json
new file mode 100644
index 0000000..b8019b1
--- /dev/null
+++ b/data/osk-layouts/pl.json
@@ -0,0 +1,987 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "ę",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ö",
+ "ô",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "ą",
+ "á",
+ "à",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ś",
+ "ß",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ł"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ż",
+ "ź",
+ "ž"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ć",
+ "ç",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ń",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "Ę",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ö",
+ "Ô",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Ą",
+ "Á",
+ "À",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Ś",
+ "SS",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ł"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ż",
+ "Ź",
+ "Ž"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ć",
+ "Ç",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ń",
+ "Ñ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "pl",
+ "name": "Polish"
+}
diff --git a/data/osk-layouts/pt.json b/data/osk-layouts/pt.json
new file mode 100644
index 0000000..11c8c6d
--- /dev/null
+++ b/data/osk-layouts/pt.json
@@ -0,0 +1,992 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ê",
+ "è",
+ "ę",
+ "ė",
+ "ē",
+ "ë"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ü",
+ "ù",
+ "û",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "î",
+ "ì",
+ "ï",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "õ",
+ "ô",
+ "ò",
+ "ö",
+ "œ",
+ "ø",
+ "ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ã",
+ "à",
+ "â",
+ "ä",
+ "å",
+ "æ",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "č",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ê",
+ "È",
+ "Ę",
+ "Ė",
+ "Ē",
+ "Ë"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ü",
+ "Ù",
+ "Û",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Î",
+ "Ì",
+ "Ï",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Õ",
+ "Ô",
+ "Ò",
+ "Ö",
+ "Œ",
+ "Ø",
+ "Ō",
+ "º"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ã",
+ "À",
+ "Â",
+ "Ä",
+ "Å",
+ "Æ",
+ "ª"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Č",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "pt-PT",
+ "name": "Portuguese Portugal"
+}
diff --git a/data/osk-layouts/ro.json b/data/osk-layouts/ro.json
new file mode 100644
index 0000000..3af77e8
--- /dev/null
+++ b/data/osk-layouts/ro.json
@@ -0,0 +1,955 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ț"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "ï",
+ "ì",
+ "í",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "â",
+ "ã",
+ "ă",
+ "à",
+ "á",
+ "ä",
+ "æ",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ș",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ț"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "Ï",
+ "Ì",
+ "Í",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Â",
+ "Ã",
+ "Ă",
+ "À",
+ "Á",
+ "Ä",
+ "Æ",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Ș",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ro",
+ "name": "Romanian"
+}
diff --git a/data/osk-layouts/rs.json b/data/osk-layouts/rs.json
new file mode 100644
index 0000000..f0cdb28
--- /dev/null
+++ b/data/osk-layouts/rs.json
@@ -0,0 +1,965 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "љ"
+ ]
+ },
+ {
+ "strings": [
+ "њ"
+ ]
+ },
+ {
+ "strings": [
+ "е",
+ "ѐ"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "и",
+ "ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "strings": [
+ "ј"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "ћ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "ѕ"
+ ]
+ },
+ {
+ "strings": [
+ "џ"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "ђ"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Љ"
+ ]
+ },
+ {
+ "strings": [
+ "Њ"
+ ]
+ },
+ {
+ "strings": [
+ "Е",
+ "Ѐ"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "И",
+ "Ѝ"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "strings": [
+ "Ј"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "Ћ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Ѕ"
+ ]
+ },
+ {
+ "strings": [
+ "Џ"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "Ђ"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "sr",
+ "name": "Serbian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/ru.json b/data/osk-layouts/ru.json
new file mode 100644
index 0000000..154c22e
--- /dev/null
+++ b/data/osk-layouts/ru.json
@@ -0,0 +1,965 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "е",
+ "ё"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "г"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "strings": [
+ "щ"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "ы"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "и"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ь",
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Е",
+ "Ё"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "Г"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "strings": [
+ "Щ"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "Ы"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Э"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "И"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ь",
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "ru",
+ "name": "Russian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/se.json b/data/osk-layouts/se.json
new file mode 100644
index 0000000..87da9fe
--- /dev/null
+++ b/data/osk-layouts/se.json
@@ -0,0 +1,1046 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ę"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ř"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ť",
+ "þ"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ",
+ "ü"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "ú",
+ "ù",
+ "û",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ì",
+ "î",
+ "ï"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ò",
+ "ô",
+ "õ",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "strings": [
+ "å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "à",
+ "â",
+ "ą",
+ "ã"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ś",
+ "š",
+ "ş",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ð",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ł"
+ ]
+ },
+ {
+ "strings": [
+ "ö",
+ "ø",
+ "œ"
+ ]
+ },
+ {
+ "strings": [
+ "ä",
+ "æ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "z",
+ "ź",
+ "ž",
+ "ż"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ń",
+ "ñ",
+ "ň"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ř"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ť",
+ "Þ"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ",
+ "Ü"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Ú",
+ "Ù",
+ "Û",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ì",
+ "Î",
+ "Ï"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ò",
+ "Ô",
+ "Õ",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "strings": [
+ "Å"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "À",
+ "Â",
+ "Ą",
+ "Ã"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Ś",
+ "Š",
+ "Ş",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ð",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ł"
+ ]
+ },
+ {
+ "strings": [
+ "Ö",
+ "Ø",
+ "Œ"
+ ]
+ },
+ {
+ "strings": [
+ "Ä",
+ "Æ"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Z",
+ "Ź",
+ "Ž",
+ "Ż"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ń",
+ "Ñ",
+ "Ň"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "sv",
+ "name": "Swedish"
+}
diff --git a/data/osk-layouts/si.json b/data/osk-layouts/si.json
new file mode 100644
index 0000000..7325c40
--- /dev/null
+++ b/data/osk-layouts/si.json
@@ -0,0 +1,926 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u"
+ ]
+ },
+ {
+ "strings": [
+ "i"
+ ]
+ },
+ {
+ "strings": [
+ "o"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "đ"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ž"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U"
+ ]
+ },
+ {
+ "strings": [
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Đ"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "sl",
+ "name": "Slovenian"
+}
diff --git a/data/osk-layouts/sk.json b/data/osk-layouts/sk.json
new file mode 100644
index 0000000..8f834cd
--- /dev/null
+++ b/data/osk-layouts/sk.json
@@ -0,0 +1,1056 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "ě",
+ "ē",
+ "ė",
+ "è",
+ "ê",
+ "ë",
+ "ę"
+ ]
+ },
+ {
+ "strings": [
+ "r",
+ "ŕ",
+ "ř",
+ "ŗ"
+ ]
+ },
+ {
+ "strings": [
+ "t",
+ "ť",
+ "ţ"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "ů",
+ "ü",
+ "ū",
+ "ų",
+ "ù",
+ "û",
+ "ű"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ī",
+ "į",
+ "ì",
+ "î",
+ "ï",
+ "ı"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "ó",
+ "ö",
+ "ò",
+ "õ",
+ "œ",
+ "ő",
+ "ø"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "ä",
+ "ā",
+ "à",
+ "â",
+ "ã",
+ "å",
+ "æ",
+ "ą"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "š",
+ "ß",
+ "ś",
+ "ş"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "ď"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ģ",
+ "ğ"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k",
+ "ķ"
+ ]
+ },
+ {
+ "strings": [
+ "l",
+ "ľ",
+ "ĺ",
+ "ļ",
+ "ł"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z",
+ "ž",
+ "ż",
+ "ź"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "č",
+ "ç",
+ "ć"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ň",
+ "ņ",
+ "ñ",
+ "ń",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "Ě",
+ "Ē",
+ "Ė",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę"
+ ]
+ },
+ {
+ "strings": [
+ "R",
+ "Ŕ",
+ "Ř",
+ "Ŗ"
+ ]
+ },
+ {
+ "strings": [
+ "T",
+ "Ť",
+ "Ţ"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ÿ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Ů",
+ "Ü",
+ "Ū",
+ "Ų",
+ "Ù",
+ "Û",
+ "Ű"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ī",
+ "Į",
+ "Ì",
+ "Î",
+ "Ï",
+ "I"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Ó",
+ "Ö",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ő",
+ "Ø"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Ä",
+ "Ā",
+ "À",
+ "Â",
+ "Ã",
+ "Å",
+ "Æ",
+ "Ą"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Š",
+ "SS",
+ "Ś",
+ "Ş"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Ď"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ģ",
+ "Ğ"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K",
+ "Ķ"
+ ]
+ },
+ {
+ "strings": [
+ "L",
+ "Ľ",
+ "Ĺ",
+ "Ļ",
+ "Ł"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z",
+ "Ž",
+ "Ż",
+ "Ź"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Č",
+ "Ç",
+ "Ć"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ň",
+ "Ņ",
+ "Ñ",
+ "Ń",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "sk",
+ "name": "Slovak"
+}
diff --git a/data/osk-layouts/th.json b/data/osk-layouts/th.json
new file mode 100644
index 0000000..131e5eb
--- /dev/null
+++ b/data/osk-layouts/th.json
@@ -0,0 +1,1135 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "ๅ"
+ ]
+ },
+ {
+ "strings": [
+ "/",
+ "๑"
+ ]
+ },
+ {
+ "strings": [
+ "_",
+ "๒"
+ ]
+ },
+ {
+ "strings": [
+ "ภ",
+ "๓"
+ ]
+ },
+ {
+ "strings": [
+ "ถ",
+ "๔"
+ ]
+ },
+ {
+ "strings": [
+ "ุ"
+ ]
+ },
+ {
+ "strings": [
+ "ึ"
+ ]
+ },
+ {
+ "strings": [
+ "ค",
+ "๕"
+ ]
+ },
+ {
+ "strings": [
+ "ต",
+ "๖"
+ ]
+ },
+ {
+ "strings": [
+ "จ",
+ "๗"
+ ]
+ },
+ {
+ "strings": [
+ "ข",
+ "๘"
+ ]
+ },
+ {
+ "strings": [
+ "ช",
+ "๙"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ๆ",
+ "๐"
+ ]
+ },
+ {
+ "strings": [
+ "ไ"
+ ]
+ },
+ {
+ "strings": [
+ "ำ"
+ ]
+ },
+ {
+ "strings": [
+ "พ"
+ ]
+ },
+ {
+ "strings": [
+ "ะ"
+ ]
+ },
+ {
+ "strings": [
+ "ั"
+ ]
+ },
+ {
+ "strings": [
+ "ี"
+ ]
+ },
+ {
+ "strings": [
+ "ร"
+ ]
+ },
+ {
+ "strings": [
+ "น"
+ ]
+ },
+ {
+ "strings": [
+ "ย"
+ ]
+ },
+ {
+ "strings": [
+ "บ"
+ ]
+ },
+ {
+ "strings": [
+ "ล"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ฟ"
+ ]
+ },
+ {
+ "strings": [
+ "ห"
+ ]
+ },
+ {
+ "strings": [
+ "ก"
+ ]
+ },
+ {
+ "strings": [
+ "ด"
+ ]
+ },
+ {
+ "strings": [
+ "เ"
+ ]
+ },
+ {
+ "strings": [
+ "้"
+ ]
+ },
+ {
+ "strings": [
+ "่"
+ ]
+ },
+ {
+ "strings": [
+ "า"
+ ]
+ },
+ {
+ "strings": [
+ "ส"
+ ]
+ },
+ {
+ "strings": [
+ "ว"
+ ]
+ },
+ {
+ "strings": [
+ "ง"
+ ]
+ },
+ {
+ "strings": [
+ "ฃ"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "ผ"
+ ]
+ },
+ {
+ "strings": [
+ "ป"
+ ]
+ },
+ {
+ "strings": [
+ "แ"
+ ]
+ },
+ {
+ "strings": [
+ "อ"
+ ]
+ },
+ {
+ "strings": [
+ "ิ"
+ ]
+ },
+ {
+ "strings": [
+ "ื"
+ ]
+ },
+ {
+ "strings": [
+ "ท"
+ ]
+ },
+ {
+ "strings": [
+ "ม"
+ ]
+ },
+ {
+ "strings": [
+ "ใ"
+ ]
+ },
+ {
+ "strings": [
+ "ฝ"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@",
+ " ๎",
+ "๏",
+ "๛",
+ "๚"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "+"
+ ]
+ },
+ {
+ "strings": [
+ "๑"
+ ]
+ },
+ {
+ "strings": [
+ "๒"
+ ]
+ },
+ {
+ "strings": [
+ "๓"
+ ]
+ },
+ {
+ "strings": [
+ "๔"
+ ]
+ },
+ {
+ "strings": [
+ "ู"
+ ]
+ },
+ {
+ "strings": [
+ "฿"
+ ]
+ },
+ {
+ "strings": [
+ "๕"
+ ]
+ },
+ {
+ "strings": [
+ "๖"
+ ]
+ },
+ {
+ "strings": [
+ "๗"
+ ]
+ },
+ {
+ "strings": [
+ "๘"
+ ]
+ },
+ {
+ "strings": [
+ "๙"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "๐"
+ ]
+ },
+ {
+ "strings": [
+ "\""
+ ]
+ },
+ {
+ "strings": [
+ "ฎ"
+ ]
+ },
+ {
+ "strings": [
+ "ฑ"
+ ]
+ },
+ {
+ "strings": [
+ "ธ"
+ ]
+ },
+ {
+ "strings": [
+ "ํ"
+ ]
+ },
+ {
+ "strings": [
+ "๊"
+ ]
+ },
+ {
+ "strings": [
+ "ณ"
+ ]
+ },
+ {
+ "strings": [
+ "ฯ"
+ ]
+ },
+ {
+ "strings": [
+ "ญ"
+ ]
+ },
+ {
+ "strings": [
+ "ฐ"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ฤ"
+ ]
+ },
+ {
+ "strings": [
+ "ฆ"
+ ]
+ },
+ {
+ "strings": [
+ "ฏ"
+ ]
+ },
+ {
+ "strings": [
+ "โ"
+ ]
+ },
+ {
+ "strings": [
+ "ฌ"
+ ]
+ },
+ {
+ "strings": [
+ "็"
+ ]
+ },
+ {
+ "strings": [
+ "๋"
+ ]
+ },
+ {
+ "strings": [
+ "ษ"
+ ]
+ },
+ {
+ "strings": [
+ "ศ"
+ ]
+ },
+ {
+ "strings": [
+ "ซ"
+ ]
+ },
+ {
+ "strings": [
+ "."
+ ]
+ },
+ {
+ "strings": [
+ "ฅ"
+ ]
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "("
+ ]
+ },
+ {
+ "strings": [
+ ")"
+ ]
+ },
+ {
+ "strings": [
+ "ฉ"
+ ]
+ },
+ {
+ "strings": [
+ "ฮ"
+ ]
+ },
+ {
+ "strings": [
+ "ฺ"
+ ]
+ },
+ {
+ "strings": [
+ "์"
+ ]
+ },
+ {
+ "strings": [
+ "?"
+ ]
+ },
+ {
+ "strings": [
+ "ฒ"
+ ]
+ },
+ {
+ "strings": [
+ "ฬ"
+ ]
+ },
+ {
+ "strings": [
+ "ฦ"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 7
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@",
+ " ๎",
+ "๏",
+ "๛",
+ "๚"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "฿",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "th",
+ "name": "Thai"
+} \ No newline at end of file
diff --git a/data/osk-layouts/tr.json b/data/osk-layouts/tr.json
new file mode 100644
index 0000000..e32b3d9
--- /dev/null
+++ b/data/osk-layouts/tr.json
@@ -0,0 +1,974 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ü",
+ "û",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "ı",
+ "î",
+ "ï",
+ "ì",
+ "í",
+ "į",
+ "ī"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ö",
+ "ô",
+ "œ",
+ "ò",
+ "ó",
+ "õ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "â"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ş",
+ "ß",
+ "ś",
+ "š"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g",
+ "ğ"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç",
+ "ć",
+ "č"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ü",
+ "Û",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "İ",
+ "I",
+ "Î",
+ "Ï",
+ "Ì",
+ "Í",
+ "Į",
+ "Ī"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ö",
+ "Ô",
+ "Œ",
+ "Ò",
+ "Ó",
+ "Õ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Â"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "Ş",
+ "SS",
+ "Ś",
+ "Š"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G",
+ "Ğ"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç",
+ "Ć",
+ "Č"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "€",
+ "¢",
+ "£",
+ "$",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "tr",
+ "name": "Turkish"
+}
diff --git a/data/osk-layouts/ua.json b/data/osk-layouts/ua.json
new file mode 100644
index 0000000..b32b6b5
--- /dev/null
+++ b/data/osk-layouts/ua.json
@@ -0,0 +1,969 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "й"
+ ]
+ },
+ {
+ "strings": [
+ "ц"
+ ]
+ },
+ {
+ "strings": [
+ "у"
+ ]
+ },
+ {
+ "strings": [
+ "к"
+ ]
+ },
+ {
+ "strings": [
+ "е"
+ ]
+ },
+ {
+ "strings": [
+ "н"
+ ]
+ },
+ {
+ "strings": [
+ "г",
+ "ґ"
+ ]
+ },
+ {
+ "strings": [
+ "ш"
+ ]
+ },
+ {
+ "strings": [
+ "щ"
+ ]
+ },
+ {
+ "strings": [
+ "з"
+ ]
+ },
+ {
+ "strings": [
+ "х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "ф"
+ ]
+ },
+ {
+ "strings": [
+ "і",
+ "ї"
+ ]
+ },
+ {
+ "strings": [
+ "в"
+ ]
+ },
+ {
+ "strings": [
+ "а"
+ ]
+ },
+ {
+ "strings": [
+ "п"
+ ]
+ },
+ {
+ "strings": [
+ "р"
+ ]
+ },
+ {
+ "strings": [
+ "о"
+ ]
+ },
+ {
+ "strings": [
+ "л"
+ ]
+ },
+ {
+ "strings": [
+ "д"
+ ]
+ },
+ {
+ "strings": [
+ "ж"
+ ]
+ },
+ {
+ "strings": [
+ "є"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "я"
+ ]
+ },
+ {
+ "strings": [
+ "ч"
+ ]
+ },
+ {
+ "strings": [
+ "с"
+ ]
+ },
+ {
+ "strings": [
+ "м"
+ ]
+ },
+ {
+ "strings": [
+ "и"
+ ]
+ },
+ {
+ "strings": [
+ "т"
+ ]
+ },
+ {
+ "strings": [
+ "ь",
+ "ъ"
+ ]
+ },
+ {
+ "strings": [
+ "б"
+ ]
+ },
+ {
+ "strings": [
+ "ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Й"
+ ]
+ },
+ {
+ "strings": [
+ "Ц"
+ ]
+ },
+ {
+ "strings": [
+ "У"
+ ]
+ },
+ {
+ "strings": [
+ "К"
+ ]
+ },
+ {
+ "strings": [
+ "Е"
+ ]
+ },
+ {
+ "strings": [
+ "Н"
+ ]
+ },
+ {
+ "strings": [
+ "Г",
+ "Ґ"
+ ]
+ },
+ {
+ "strings": [
+ "Ш"
+ ]
+ },
+ {
+ "strings": [
+ "Щ"
+ ]
+ },
+ {
+ "strings": [
+ "З"
+ ]
+ },
+ {
+ "strings": [
+ "Х"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "Ф"
+ ]
+ },
+ {
+ "strings": [
+ "І",
+ "Ї"
+ ]
+ },
+ {
+ "strings": [
+ "В"
+ ]
+ },
+ {
+ "strings": [
+ "А"
+ ]
+ },
+ {
+ "strings": [
+ "П"
+ ]
+ },
+ {
+ "strings": [
+ "Р"
+ ]
+ },
+ {
+ "strings": [
+ "О"
+ ]
+ },
+ {
+ "strings": [
+ "Л"
+ ]
+ },
+ {
+ "strings": [
+ "Д"
+ ]
+ },
+ {
+ "strings": [
+ "Ж"
+ ]
+ },
+ {
+ "strings": [
+ "Є"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "Я"
+ ]
+ },
+ {
+ "strings": [
+ "Ч"
+ ]
+ },
+ {
+ "strings": [
+ "С"
+ ]
+ },
+ {
+ "strings": [
+ "М"
+ ]
+ },
+ {
+ "strings": [
+ "И"
+ ]
+ },
+ {
+ "strings": [
+ "Т"
+ ]
+ },
+ {
+ "strings": [
+ "Ь",
+ "Ъ"
+ ]
+ },
+ {
+ "strings": [
+ "Б"
+ ]
+ },
+ {
+ "strings": [
+ "Ю"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 6
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₴",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "uk",
+ "name": "Ukrainian"
+} \ No newline at end of file
diff --git a/data/osk-layouts/uk.json b/data/osk-layouts/uk.json
new file mode 100644
index 0000000..91a94b2
--- /dev/null
+++ b/data/osk-layouts/uk.json
@@ -0,0 +1,984 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "û",
+ "ü",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "ï",
+ "í",
+ "ī",
+ "ì"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "ö",
+ "ò",
+ "ó",
+ "œ",
+ "ø",
+ "ō",
+ "õ"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "Ï",
+ "Í",
+ "Ī",
+ "Ì"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Œ",
+ "Ø",
+ "Ō",
+ "Õ"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "£",
+ "¢",
+ "$",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "en-GB",
+ "name": "English Great Britain"
+}
diff --git a/data/osk-layouts/us-extended.json b/data/osk-layouts/us-extended.json
new file mode 100644
index 0000000..0370edb
--- /dev/null
+++ b/data/osk-layouts/us-extended.json
@@ -0,0 +1,1043 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "keyval": "0xff09",
+ "label": "Tab",
+ "width": 1
+ },
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "û",
+ "ü",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "ï",
+ "í",
+ "ī",
+ "ì"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "ö",
+ "ò",
+ "ó",
+ "œ",
+ "ø",
+ "ō",
+ "õ"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "action": "delete",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-caps-lock-symbolic",
+ "level": 1,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ",",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "iconName": "go-up-symbolic",
+ "keyval": "0xff52"
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "modifier",
+ "keyval": "0xffe3",
+ "label": "Ctrl"
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2
+ },
+ {
+ "action": "modifier",
+ "keyval": "0xffe9",
+ "label": "Alt"
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 4
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "iconName": "go-previous-symbolic",
+ "keyval": "0xff51"
+ },
+ {
+ "iconName": "go-down-symbolic",
+ "keyval": "0xff54"
+ },
+ {
+ "iconName": "go-next-symbolic",
+ "keyval": "0xff53"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "keyval": "0xff09",
+ "label": "Tab",
+ "width": 1
+ },
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "Ï",
+ "Í",
+ "Ī",
+ "Ì"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Œ",
+ "Ø",
+ "Ō",
+ "Õ"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-caps-lock-symbolic",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ ",",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "iconName": "go-up-symbolic",
+ "keyval": "0xff52"
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "modifier",
+ "keyval": "0xffe3",
+ "label": "Ctrl"
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2
+ },
+ {
+ "action": "modifier",
+ "keyval": "0xffe9",
+ "label": "Alt"
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 4
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "iconName": "go-previous-symbolic",
+ "keyval": "0xff51"
+ },
+ {
+ "iconName": "go-down-symbolic",
+ "keyval": "0xff54"
+ },
+ {
+ "iconName": "go-next-symbolic",
+ "keyval": "0xff53"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "iconName": "edit-clear-symbolic",
+ "keyval": "0xff08",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "en",
+ "name": "English United States"
+}
diff --git a/data/osk-layouts/us.json b/data/osk-layouts/us.json
new file mode 100644
index 0000000..17c20d9
--- /dev/null
+++ b/data/osk-layouts/us.json
@@ -0,0 +1,983 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ê",
+ "ë",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "û",
+ "ü",
+ "ù",
+ "ú",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "î",
+ "ï",
+ "í",
+ "ī",
+ "ì"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ô",
+ "ö",
+ "ò",
+ "ó",
+ "œ",
+ "ø",
+ "ō",
+ "õ"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "â",
+ "ä",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s",
+ "ß"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c",
+ "ç"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ê",
+ "Ë",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ú",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Î",
+ "Ï",
+ "Í",
+ "Ī",
+ "Ì"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ô",
+ "Ö",
+ "Ò",
+ "Ó",
+ "Œ",
+ "Ø",
+ "Ō",
+ "Õ"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Â",
+ "Ä",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S",
+ "SS"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C",
+ "Ç"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "en",
+ "name": "English United States"
+}
diff --git a/data/osk-layouts/vn.json b/data/osk-layouts/vn.json
new file mode 100644
index 0000000..17c7f0e
--- /dev/null
+++ b/data/osk-layouts/vn.json
@@ -0,0 +1,1051 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "è",
+ "é",
+ "ẻ",
+ "ẽ",
+ "ẹ",
+ "ê",
+ "ề",
+ "ế",
+ "ể",
+ "ễ",
+ "ệ"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ỳ",
+ "ý",
+ "ỷ",
+ "ỹ",
+ "ỵ"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ù",
+ "ú",
+ "ủ",
+ "ũ",
+ "ụ",
+ "ư",
+ "ừ",
+ "ứ",
+ "ử",
+ "ữ",
+ "ự"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "ì",
+ "í",
+ "ỉ",
+ "ĩ",
+ "ị"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ò",
+ "ó",
+ "ỏ",
+ "õ",
+ "ọ",
+ "ô",
+ "ồ",
+ "ố",
+ "ổ",
+ "ỗ",
+ "ộ",
+ "ơ",
+ "ờ",
+ "ớ",
+ "ở",
+ "ỡ",
+ "ợ"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "à",
+ "á",
+ "ả",
+ "ã",
+ "ạ",
+ "ă",
+ "ằ",
+ "ắ",
+ "ẳ",
+ "ẵ",
+ "ặ",
+ "â",
+ "ầ",
+ "ấ",
+ "ẩ",
+ "ẫ",
+ "ậ"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d",
+ "đ"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "È",
+ "É",
+ "Ẻ",
+ "Ẽ",
+ "Ẹ",
+ "Ê",
+ "Ề",
+ "Ế",
+ "Ể",
+ "Ễ",
+ "Ệ"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ỳ",
+ "Ý",
+ "Ỷ",
+ "Ỹ",
+ "Ỵ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ù",
+ "Ú",
+ "Ủ",
+ "Ũ",
+ "Ụ",
+ "Ư",
+ "Ừ",
+ "Ứ",
+ "Ử",
+ "Ữ",
+ "Ự"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Ì",
+ "Í",
+ "Ỉ",
+ "Ĩ",
+ "Ị"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ò",
+ "Ó",
+ "Ỏ",
+ "Õ",
+ "Ọ",
+ "Ô",
+ "Ồ",
+ "Ố",
+ "Ổ",
+ "Ỗ",
+ "Ộ",
+ "Ơ",
+ "Ờ",
+ "Ớ",
+ "Ở",
+ "Ỡ",
+ "Ợ"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "À",
+ "Á",
+ "Ả",
+ "Ã",
+ "Ạ",
+ "Ă",
+ "Ằ",
+ "Ắ",
+ "Ẳ",
+ "Ẵ",
+ "Ặ",
+ "Â",
+ "Ầ",
+ "Ấ",
+ "Ẩ",
+ "Ẫ",
+ "Ậ"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D",
+ "Đ"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "₫",
+ "$",
+ "¢",
+ "€",
+ "£",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "vi",
+ "name": "Vietnamese"
+}
diff --git a/data/osk-layouts/za.json b/data/osk-layouts/za.json
new file mode 100644
index 0000000..0e8dd96
--- /dev/null
+++ b/data/osk-layouts/za.json
@@ -0,0 +1,997 @@
+{
+ "levels": [
+ {
+ "level": "",
+ "mode": "default",
+ "rows": [
+ [
+ {
+ "strings": [
+ "q"
+ ]
+ },
+ {
+ "strings": [
+ "w"
+ ]
+ },
+ {
+ "strings": [
+ "e",
+ "é",
+ "è",
+ "ê",
+ "ë",
+ "ę",
+ "ė",
+ "ē"
+ ]
+ },
+ {
+ "strings": [
+ "r"
+ ]
+ },
+ {
+ "strings": [
+ "t"
+ ]
+ },
+ {
+ "strings": [
+ "y",
+ "ý",
+ "ŷ",
+ "ÿ",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "u",
+ "ú",
+ "û",
+ "ü",
+ "ù",
+ "ū"
+ ]
+ },
+ {
+ "strings": [
+ "i",
+ "í",
+ "ì",
+ "ï",
+ "î",
+ "į",
+ "ī",
+ "ij"
+ ]
+ },
+ {
+ "strings": [
+ "o",
+ "ó",
+ "ô",
+ "ö",
+ "ò",
+ "õ",
+ "œ",
+ "ø",
+ "ō"
+ ]
+ },
+ {
+ "strings": [
+ "p"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "a",
+ "á",
+ "â",
+ "ä",
+ "à",
+ "æ",
+ "ã",
+ "å",
+ "ā"
+ ]
+ },
+ {
+ "strings": [
+ "s"
+ ]
+ },
+ {
+ "strings": [
+ "d"
+ ]
+ },
+ {
+ "strings": [
+ "f"
+ ]
+ },
+ {
+ "strings": [
+ "g"
+ ]
+ },
+ {
+ "strings": [
+ "h"
+ ]
+ },
+ {
+ "strings": [
+ "j"
+ ]
+ },
+ {
+ "strings": [
+ "k"
+ ]
+ },
+ {
+ "strings": [
+ "l"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1
+ },
+ {
+ "strings": [
+ "z"
+ ]
+ },
+ {
+ "strings": [
+ "x"
+ ]
+ },
+ {
+ "strings": [
+ "c"
+ ]
+ },
+ {
+ "strings": [
+ "v"
+ ]
+ },
+ {
+ "strings": [
+ "b"
+ ]
+ },
+ {
+ "strings": [
+ "n",
+ "ñ",
+ "ń"
+ ]
+ },
+ {
+ "strings": [
+ "m"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 1,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "shift",
+ "mode": "latched",
+ "rows": [
+ [
+ {
+ "strings": [
+ "Q"
+ ]
+ },
+ {
+ "strings": [
+ "W"
+ ]
+ },
+ {
+ "strings": [
+ "E",
+ "É",
+ "È",
+ "Ê",
+ "Ë",
+ "Ę",
+ "Ė",
+ "Ē"
+ ]
+ },
+ {
+ "strings": [
+ "R"
+ ]
+ },
+ {
+ "strings": [
+ "T"
+ ]
+ },
+ {
+ "strings": [
+ "Y",
+ "Ý",
+ "Ŷ",
+ "Ÿ",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "U",
+ "Ú",
+ "Û",
+ "Ü",
+ "Ù",
+ "Ū"
+ ]
+ },
+ {
+ "strings": [
+ "I",
+ "Í",
+ "Ì",
+ "Ï",
+ "Î",
+ "Į",
+ "Ī",
+ "IJ"
+ ]
+ },
+ {
+ "strings": [
+ "O",
+ "Ó",
+ "Ô",
+ "Ö",
+ "Ò",
+ "Õ",
+ "Œ",
+ "Ø",
+ "Ō"
+ ]
+ },
+ {
+ "strings": [
+ "P"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "A",
+ "Á",
+ "Â",
+ "Ä",
+ "À",
+ "Æ",
+ "Ã",
+ "Å",
+ "Ā"
+ ]
+ },
+ {
+ "strings": [
+ "S"
+ ]
+ },
+ {
+ "strings": [
+ "D"
+ ]
+ },
+ {
+ "strings": [
+ "F"
+ ]
+ },
+ {
+ "strings": [
+ "G"
+ ]
+ },
+ {
+ "strings": [
+ "H"
+ ]
+ },
+ {
+ "strings": [
+ "J"
+ ]
+ },
+ {
+ "strings": [
+ "K"
+ ]
+ },
+ {
+ "strings": [
+ "L"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0
+ },
+ {
+ "strings": [
+ "Z"
+ ]
+ },
+ {
+ "strings": [
+ "X"
+ ]
+ },
+ {
+ "strings": [
+ "C"
+ ]
+ },
+ {
+ "strings": [
+ "V"
+ ]
+ },
+ {
+ "strings": [
+ "B"
+ ]
+ },
+ {
+ "strings": [
+ "N",
+ "Ñ",
+ "Ń"
+ ]
+ },
+ {
+ "strings": [
+ "M"
+ ]
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "#",
+ "!",
+ ",",
+ "?",
+ "-",
+ ":",
+ "'",
+ "@"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "iconName": "keyboard-shift-symbolic",
+ "level": 0,
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic",
+ "width": 1.5
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 5
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic",
+ "width": 1.5
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic",
+ "width": 2
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "1",
+ "¹",
+ "½",
+ "⅓",
+ "¼",
+ "⅛"
+ ]
+ },
+ {
+ "strings": [
+ "2",
+ "²",
+ "⅔"
+ ]
+ },
+ {
+ "strings": [
+ "3",
+ "³",
+ "¾",
+ "⅜"
+ ]
+ },
+ {
+ "strings": [
+ "4",
+ "⁴"
+ ]
+ },
+ {
+ "strings": [
+ "5",
+ "⅝"
+ ]
+ },
+ {
+ "strings": [
+ "6"
+ ]
+ },
+ {
+ "strings": [
+ "7",
+ "⅞"
+ ]
+ },
+ {
+ "strings": [
+ "8"
+ ]
+ },
+ {
+ "strings": [
+ "9"
+ ]
+ },
+ {
+ "strings": [
+ "0",
+ "ⁿ",
+ "∅"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "@"
+ ]
+ },
+ {
+ "strings": [
+ "#"
+ ]
+ },
+ {
+ "strings": [
+ "$",
+ "¢",
+ "£",
+ "€",
+ "¥",
+ "₱"
+ ]
+ },
+ {
+ "strings": [
+ "%",
+ "‰"
+ ]
+ },
+ {
+ "strings": [
+ "&"
+ ]
+ },
+ {
+ "strings": [
+ "-",
+ "_",
+ "–",
+ "—",
+ "·"
+ ]
+ },
+ {
+ "strings": [
+ "+",
+ "±"
+ ]
+ },
+ {
+ "strings": [
+ "(",
+ "<",
+ "{",
+ "["
+ ]
+ },
+ {
+ "strings": [
+ ")",
+ ">",
+ "}",
+ "]"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "*",
+ "†",
+ "‡",
+ "★"
+ ]
+ },
+ {
+ "strings": [
+ "\"",
+ "“",
+ "”",
+ "«",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ "'",
+ "‘",
+ "’",
+ "‹",
+ "›"
+ ]
+ },
+ {
+ "strings": [
+ ":"
+ ]
+ },
+ {
+ "strings": [
+ ";"
+ ]
+ },
+ {
+ "strings": [
+ "!",
+ "¡"
+ ]
+ },
+ {
+ "strings": [
+ "?",
+ "¿"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "=/<",
+ "level": 3,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "_"
+ ]
+ },
+ {
+ "strings": [
+ "/"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ },
+ {
+ "level": "opt+shift",
+ "mode": "locked",
+ "rows": [
+ [
+ {
+ "strings": [
+ "~"
+ ]
+ },
+ {
+ "strings": [
+ "`"
+ ]
+ },
+ {
+ "strings": [
+ "|"
+ ]
+ },
+ {
+ "strings": [
+ "•",
+ "♪",
+ "♥",
+ "♠",
+ "♦",
+ "♣"
+ ]
+ },
+ {
+ "strings": [
+ "√"
+ ]
+ },
+ {
+ "strings": [
+ "Π",
+ "π"
+ ]
+ },
+ {
+ "strings": [
+ "÷"
+ ]
+ },
+ {
+ "strings": [
+ "×"
+ ]
+ },
+ {
+ "strings": [
+ "¶",
+ "§"
+ ]
+ },
+ {
+ "strings": [
+ "∆"
+ ]
+ },
+ {
+ "action": "delete",
+ "iconName": "edit-clear-symbolic",
+ "width": 1.5
+ }
+ ],
+ [
+ {
+ "strings": [
+ "£"
+ ]
+ },
+ {
+ "strings": [
+ "¢"
+ ]
+ },
+ {
+ "strings": [
+ "€"
+ ]
+ },
+ {
+ "strings": [
+ "¥"
+ ]
+ },
+ {
+ "strings": [
+ "^",
+ "↑",
+ "↓",
+ "←",
+ "→"
+ ]
+ },
+ {
+ "strings": [
+ "°",
+ "′",
+ "″"
+ ]
+ },
+ {
+ "strings": [
+ "=",
+ "≠",
+ "≈",
+ "∞"
+ ]
+ },
+ {
+ "strings": [
+ "{"
+ ]
+ },
+ {
+ "strings": [
+ "}"
+ ]
+ },
+ {
+ "iconName": "keyboard-enter-symbolic",
+ "keyval": "0xff0d",
+ "width": 2
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "\\"
+ ]
+ },
+ {
+ "strings": [
+ "©"
+ ]
+ },
+ {
+ "strings": [
+ "®"
+ ]
+ },
+ {
+ "strings": [
+ "™"
+ ]
+ },
+ {
+ "strings": [
+ "℅"
+ ]
+ },
+ {
+ "strings": [
+ "["
+ ]
+ },
+ {
+ "strings": [
+ "]"
+ ]
+ },
+ {
+ "action": "levelSwitch",
+ "label": "?123",
+ "level": 2,
+ "width": 3
+ }
+ ],
+ [
+ {
+ "action": "levelSwitch",
+ "label": "ABC",
+ "level": 0,
+ "width": 1.5
+ },
+ {
+ "strings": [
+ "<",
+ "‹",
+ "≤",
+ "«"
+ ]
+ },
+ {
+ "strings": [
+ ">",
+ "›",
+ "≥",
+ "»"
+ ]
+ },
+ {
+ "strings": [
+ " "
+ ],
+ "width": 3
+ },
+ {
+ "strings": [
+ ","
+ ]
+ },
+ {
+ "strings": [
+ ".",
+ "…"
+ ]
+ },
+ {
+ "action": "emoji",
+ "iconName": "face-smile-symbolic"
+ },
+ {
+ "action": "languageMenu",
+ "iconName": "keyboard-layout-symbolic"
+ },
+ {
+ "action": "hide",
+ "iconName": "keyboard-hide-symbolic"
+ }
+ ]
+ ]
+ }
+ ],
+ "locale": "af",
+ "name": "Afrikaans"
+}
diff --git a/data/perf-background.xml.in b/data/perf-background.xml.in
new file mode 100644
index 0000000..752a552
--- /dev/null
+++ b/data/perf-background.xml.in
@@ -0,0 +1,31 @@
+<!-- With an animated background, performance will differ depending on whether
+ one layer or two layers are being blended together. This messes up our
+ benchmarks. We could just benchmark a single image, but since blended
+ images are present for much of the day with the GNOME default background,
+ we want to make sure that also performs well; for that reason we ship
+ an "animated" background that animates super-slowly to use during
+ performance tests; it will be in the blended state until 2030. -->
+<background>
+ <starttime>
+ <year>1990</year>
+ <month>1</month>
+ <day>1</day>
+ <hour>0</hour>
+ <minute>00</minute>
+ <second>00</second>
+ </starttime>
+
+<!-- One transition that takes 40 years -->
+<transition type="overlay">
+<duration>1261440000.0</duration>
+<from>@datadir@/backgrounds/gnome/adwaita-morning.jpg</from>
+<to>@datadir@/backgrounds/gnome/adwaita-day.jpg</to>
+</transition>
+
+<!-- A single slide doesn't work, so another slide for 1 minute after 40 years -->
+<static>
+<duration>60</duration>
+<file>/usr/share/backgrounds/gnome/Sandstone.jpg</file>
+</static>
+
+</background>
diff --git a/data/theme/README.md b/data/theme/README.md
new file mode 100644
index 0000000..192dc65
--- /dev/null
+++ b/data/theme/README.md
@@ -0,0 +1,32 @@
+## Summary
+
+Do not edit the CSS directly, edit the source SCSS files and the CSS files
+will be generated automatically when building with meson + ninja and left
+inside the build directory to be incorporated into the gresource XML (you'll
+need to have sassc installed).
+
+## How to tweak the theme
+
+Adwaita is a complex theme, so to keep it maintainable it's written and
+processed in SASS, the generated CSS is then transformed into a gresource
+file during gtk build and used at runtime in a non-legible or editable form.
+
+It is very likely your change will happen in the [_common.scss][common] file.
+That's where all the widget selectors are defined. Here's a rundown of
+the "supporting" stylesheets, that are unlikely to be the right place
+for a drive by stylesheet fix:
+
+| File | Description |
+| ------------------------ | ----------------- |
+| [_colors.scss][colors] | global color definitions. We keep the number of defined colors to a necessary minimum, most colors are derived from a handful of basics. It is an exact copy of the gtk+ counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell default. |
+| [_drawing.scss][drawing] | drawing helper mixings/functions to allow easier definition of widget drawing under specific context. This is why Adwaita isn't 15000 LOC. |
+| [_common.scss][common] | actual definitions of style for each widget. This is where you are likely to add/remove your changes. |
+
+You can read about SASS on its [web page][sass-web]. Once you make your
+changes to the [_common.scss][common] file, you can run ninja to generate the
+final CSS files.
+
+[common]: data/theme/gnome-shell-sass/_common.scss
+[colors]: data/theme/gnome-shell-sass/_colors.scss
+[drawing]: data/theme/gnome-shell-sass/_drawing.scss
+[sass-web]: http://sass-lang.com/documentation/
diff --git a/data/theme/calendar-today-light.svg b/data/theme/calendar-today-light.svg
new file mode 100644
index 0000000..b63f6e0
--- /dev/null
+++ b/data/theme/calendar-today-light.svg
@@ -0,0 +1 @@
+<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><circle style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#242424;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" cx="16" cy="28" r="2"/></svg> \ No newline at end of file
diff --git a/data/theme/calendar-today.svg b/data/theme/calendar-today.svg
new file mode 100644
index 0000000..daf86ec
--- /dev/null
+++ b/data/theme/calendar-today.svg
@@ -0,0 +1 @@
+<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><circle style="color:#000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000;solid-opacity:1;fill:#fff;fill-opacity:.858277;fill-rule:nonzero;stroke:none;stroke-width:.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" cx="16" cy="28" r="2"/></svg> \ No newline at end of file
diff --git a/data/theme/checkbox-focused.svg b/data/theme/checkbox-focused.svg
new file mode 100644
index 0000000..01eb733
--- /dev/null
+++ b/data/theme/checkbox-focused.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="b"><stop offset="0" style="stop-color:#515151;stop-opacity:1"/><stop offset="1" style="stop-color:#292929;stop-opacity:1"/></linearGradient><linearGradient id="a"><stop style="stop-color:#0b2e52;stop-opacity:1" offset="0"/><stop style="stop-color:#1862af;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="c"><stop style="stop-color:#333;stop-opacity:1" offset="0"/><stop style="stop-color:#292929;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="d"><stop style="stop-color:#16191a;stop-opacity:1" offset="0"/><stop style="stop-color:#2b3133;stop-opacity:1" offset="1"/></linearGradient></defs><g transform="translate(-342.5 -521.362)"><rect rx="3" y="524.362" x="345.5" height="18" width="18" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#3584e4;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:.34999999;marker:none;enable-background:accumulate" ry="3"/><rect rx="3" y="524.362" x="345.5" height="18" width="18" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:#3584e4;fill-opacity:1;stroke:#3584e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" ry="3"/><path style="color:#000;fill:#fff;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" d="M361.998 527.733a1.5 1.5 0 0 0-2.117.127l-6.928 7.824-2.928-2.882a1.5 1.5 0 0 0-2.12.015 1.5 1.5 0 0 0 .015 2.121l4.055 3.993a1.5 1.5 0 0 0 2.175-.075l7.975-9.006a1.5 1.5 0 0 0-.127-2.117z"/></g></svg> \ No newline at end of file
diff --git a/data/theme/checkbox-off-focused-light.svg b/data/theme/checkbox-off-focused-light.svg
new file mode 100644
index 0000000..4767377
--- /dev/null
+++ b/data/theme/checkbox-off-focused-light.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ id="svg3199"
+ version="1.1"
+ inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+ sodipodi:docname="checkbox-off-focused-dark.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs3201">
+ <linearGradient
+ id="linearGradient15404"
+ inkscape:collect="always">
+ <stop
+ id="stop15406"
+ offset="0"
+ style="stop-color:#515151;stop-opacity:1" />
+ <stop
+ id="stop15408"
+ offset="1"
+ style="stop-color:#292929;stop-opacity:1" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 528.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 528.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 352.78739 : 1"
+ id="perspective3207" />
+ <inkscape:perspective
+ id="perspective3187"
+ inkscape:persp3d-origin="0.5 : 2.3333333 : 1"
+ inkscape:vp_z="1 : 2.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 2.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5872-5-1"
+ id="linearGradient5891-0-4"
+ gradientUnits="userSpaceOnUse"
+ x1="205.84143"
+ y1="246.7094"
+ x2="206.74803"
+ y2="231.24142" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5872-5-1">
+ <stop
+ style="stop-color:#0b2e52;stop-opacity:1"
+ offset="0"
+ id="stop5874-4-4" />
+ <stop
+ style="stop-color:#1862af;stop-opacity:1"
+ offset="1"
+ id="stop5876-0-5" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5837-4-6"
+ is_visible="true"
+ lpeversion="0" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect14768"
+ is_visible="true"
+ lpeversion="0" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5884-4-7"
+ is_visible="true"
+ lpeversion="0" />
+ <linearGradient
+ y2="-388.72955"
+ x2="-93.031357"
+ y1="-396.34738"
+ x1="-93.031357"
+ gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.685418)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient14219"
+ xlink:href="#linearGradient15404"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10013-4-63-6">
+ <stop
+ style="stop-color:#333333;stop-opacity:1;"
+ offset="0"
+ id="stop10015-2-76-1" />
+ <stop
+ style="stop-color:#292929;stop-opacity:1"
+ offset="1"
+ id="stop10017-46-15-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10597-5">
+ <stop
+ style="stop-color:#16191a;stop-opacity:1;"
+ offset="0"
+ id="stop10599-2" />
+ <stop
+ style="stop-color:#2b3133;stop-opacity:1"
+ offset="1"
+ id="stop10601-5" />
+ </linearGradient>
+ <linearGradient
+ y2="-322.16354"
+ x2="921.22498"
+ y1="-330.05121"
+ x1="921.32812"
+ gradientTransform="matrix(1.5918367,0,0,0.85714285,-1456.5464,275.45191)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient15374"
+ xlink:href="#linearGradient10013-4-63-6"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-1199.9852,216.38048)"
+ y2="-227.07961"
+ x2="1203.9177"
+ y1="-217.56708"
+ x1="1203.9177"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient15376"
+ xlink:href="#linearGradient10597-5"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5581-5-2-4-6-8-7-35-8">
+ <stop
+ id="stop5583-0-92-8-0-7-6-5-1"
+ offset="0"
+ style="stop-color:#454c4c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#393f3f;stop-opacity:1;"
+ offset="0.40000001"
+ id="stop5585-4-7-2-7-9-9-92-0" />
+ <stop
+ id="stop5587-6-7-2-0-3-1-21-5"
+ offset="1"
+ style="stop-color:#2d3232;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#a2a2a2"
+ bordercolor="#2d2d2d"
+ borderopacity="1"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="12.374369"
+ inkscape:cy="8.8388348"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:snap-nodes="false"
+ inkscape:snap-bbox="true"
+ showborder="true"
+ inkscape:pagecheckerboard="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid14843"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3204">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-342.5,-521.36218)">
+ <rect
+ rx="3"
+ y="524.36218"
+ x="345.5"
+ height="18"
+ width="18"
+ id="rect11803"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#282828;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.15000001;marker:none;enable-background:accumulate"
+ ry="3" />
+ <rect
+ rx="5"
+ y="522.36218"
+ x="343.5"
+ height="22"
+ width="22"
+ id="rect2437"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#3584e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.35;marker:none;enable-background:accumulate"
+ ry="5" />
+ </g>
+</svg>
diff --git a/data/theme/checkbox-off-focused.svg b/data/theme/checkbox-off-focused.svg
new file mode 100644
index 0000000..d5a042e
--- /dev/null
+++ b/data/theme/checkbox-off-focused.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="b"><stop offset="0" style="stop-color:#515151;stop-opacity:1"/><stop offset="1" style="stop-color:#292929;stop-opacity:1"/></linearGradient><linearGradient id="a"><stop style="stop-color:#0b2e52;stop-opacity:1" offset="0"/><stop style="stop-color:#1862af;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="c"><stop style="stop-color:#333;stop-opacity:1" offset="0"/><stop style="stop-color:#292929;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="d"><stop style="stop-color:#16191a;stop-opacity:1" offset="0"/><stop style="stop-color:#2b3133;stop-opacity:1" offset="1"/></linearGradient></defs><g transform="translate(-342.5 -521.362)"><rect rx="3" y="524.362" x="345.5" height="18" width="18" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#fff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:.15000001;marker:none;enable-background:accumulate" ry="3"/><rect rx="5" y="522.362" x="343.5" height="22" width="22" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#3584e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:.35;marker:none;enable-background:accumulate" ry="5"/></g></svg> \ No newline at end of file
diff --git a/data/theme/checkbox-off-light.svg b/data/theme/checkbox-off-light.svg
new file mode 100644
index 0000000..5d37c85
--- /dev/null
+++ b/data/theme/checkbox-off-light.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="24"
+ height="24"
+ id="svg3199"
+ version="1.1"
+ inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+ sodipodi:docname="checkbox-off-dark.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs3201">
+ <linearGradient
+ id="linearGradient15404"
+ inkscape:collect="always">
+ <stop
+ id="stop15406"
+ offset="0"
+ style="stop-color:#515151;stop-opacity:1" />
+ <stop
+ id="stop15408"
+ offset="1"
+ style="stop-color:#292929;stop-opacity:1" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 528.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 528.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 352.78739 : 1"
+ id="perspective3207" />
+ <inkscape:perspective
+ id="perspective3187"
+ inkscape:persp3d-origin="0.5 : 2.3333333 : 1"
+ inkscape:vp_z="1 : 2.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 2.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5872-5-1"
+ id="linearGradient5891-0-4"
+ gradientUnits="userSpaceOnUse"
+ x1="205.84143"
+ y1="246.7094"
+ x2="206.74803"
+ y2="231.24142" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5872-5-1">
+ <stop
+ style="stop-color:#0b2e52;stop-opacity:1"
+ offset="0"
+ id="stop5874-4-4" />
+ <stop
+ style="stop-color:#1862af;stop-opacity:1"
+ offset="1"
+ id="stop5876-0-5" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5837-4-6"
+ is_visible="true"
+ lpeversion="0" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect14768"
+ is_visible="true"
+ lpeversion="0" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect5884-4-7"
+ is_visible="true"
+ lpeversion="0" />
+ <linearGradient
+ y2="-388.72955"
+ x2="-93.031357"
+ y1="-396.34738"
+ x1="-93.031357"
+ gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.685418)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient14219"
+ xlink:href="#linearGradient15404"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10013-4-63-6">
+ <stop
+ style="stop-color:#333333;stop-opacity:1;"
+ offset="0"
+ id="stop10015-2-76-1" />
+ <stop
+ style="stop-color:#292929;stop-opacity:1"
+ offset="1"
+ id="stop10017-46-15-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10597-5">
+ <stop
+ style="stop-color:#16191a;stop-opacity:1;"
+ offset="0"
+ id="stop10599-2" />
+ <stop
+ style="stop-color:#2b3133;stop-opacity:1"
+ offset="1"
+ id="stop10601-5" />
+ </linearGradient>
+ <linearGradient
+ y2="-322.16354"
+ x2="921.22498"
+ y1="-330.05121"
+ x1="921.32812"
+ gradientTransform="matrix(1.5918367,0,0,0.85714285,-1456.5464,275.45191)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient15374"
+ xlink:href="#linearGradient10013-4-63-6"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-1199.9852,216.38048)"
+ y2="-227.07961"
+ x2="1203.9177"
+ y1="-217.56708"
+ x1="1203.9177"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient15376"
+ xlink:href="#linearGradient10597-5"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5581-5-2-4-6-8-7-35-8">
+ <stop
+ id="stop5583-0-92-8-0-7-6-5-1"
+ offset="0"
+ style="stop-color:#454c4c;stop-opacity:1;" />
+ <stop
+ style="stop-color:#393f3f;stop-opacity:1;"
+ offset="0.40000001"
+ id="stop5585-4-7-2-7-9-9-92-0" />
+ <stop
+ id="stop5587-6-7-2-0-3-1-21-5"
+ offset="1"
+ style="stop-color:#2d3232;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#a2a2a2"
+ bordercolor="#2d2d2d"
+ borderopacity="1"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="12.374369"
+ inkscape:cy="8.8388348"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:snap-nodes="false"
+ inkscape:snap-bbox="true"
+ showborder="true"
+ inkscape:pagecheckerboard="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid14843"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3204">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-342.5,-521.36218)">
+ <rect
+ rx="3"
+ y="524.36218"
+ x="345.5"
+ height="18"
+ width="18"
+ id="rect11803"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#282828;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.15000001;marker:none;enable-background:accumulate"
+ ry="3" />
+ </g>
+</svg>
diff --git a/data/theme/checkbox-off.svg b/data/theme/checkbox-off.svg
new file mode 100644
index 0000000..50eece1
--- /dev/null
+++ b/data/theme/checkbox-off.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="b"><stop offset="0" style="stop-color:#515151;stop-opacity:1"/><stop offset="1" style="stop-color:#292929;stop-opacity:1"/></linearGradient><linearGradient id="a"><stop style="stop-color:#0b2e52;stop-opacity:1" offset="0"/><stop style="stop-color:#1862af;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="c"><stop style="stop-color:#333;stop-opacity:1" offset="0"/><stop style="stop-color:#292929;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="d"><stop style="stop-color:#16191a;stop-opacity:1" offset="0"/><stop style="stop-color:#2b3133;stop-opacity:1" offset="1"/></linearGradient></defs><rect rx="3" y="524.362" x="345.5" height="18" width="18" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#fff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:.15000001;marker:none;enable-background:accumulate" ry="3" transform="translate(-342.5 -521.362)"/></svg> \ No newline at end of file
diff --git a/data/theme/checkbox.svg b/data/theme/checkbox.svg
new file mode 100644
index 0000000..da385b6
--- /dev/null
+++ b/data/theme/checkbox.svg
@@ -0,0 +1 @@
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="b"><stop offset="0" style="stop-color:#515151;stop-opacity:1"/><stop offset="1" style="stop-color:#292929;stop-opacity:1"/></linearGradient><linearGradient id="a"><stop style="stop-color:#0b2e52;stop-opacity:1" offset="0"/><stop style="stop-color:#1862af;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="c"><stop style="stop-color:#333;stop-opacity:1" offset="0"/><stop style="stop-color:#292929;stop-opacity:1" offset="1"/></linearGradient><linearGradient id="d"><stop style="stop-color:#16191a;stop-opacity:1" offset="0"/><stop style="stop-color:#2b3133;stop-opacity:1" offset="1"/></linearGradient></defs><g transform="translate(-342.5 -521.362)"><rect rx="3" y="524.362" x="345.5" height="18" width="18" style="color:#000;display:inline;overflow:visible;visibility:visible;fill:#3584e4;fill-opacity:1;stroke:#3584e4;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" ry="3"/><path style="color:#000;fill:#fff;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" d="M361.998 527.733a1.5 1.5 0 0 0-2.117.127l-6.928 7.824-2.928-2.882a1.5 1.5 0 0 0-2.12.015 1.5 1.5 0 0 0 .015 2.121l4.055 3.993a1.5 1.5 0 0 0 2.175-.075l7.975-9.006a1.5 1.5 0 0 0-.127-2.117z"/></g></svg> \ No newline at end of file
diff --git a/data/theme/dash-placeholder.svg b/data/theme/dash-placeholder.svg
new file mode 100644
index 0000000..cbae148
--- /dev/null
+++ b/data/theme/dash-placeholder.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="76"
+ height="27"
+ id="svg11252"
+ version="1.1">
+ <defs
+ id="defs11254">
+ <radialGradient
+ xlink:href="#linearGradient39563-4-2"
+ id="radialGradient68155-2-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.3486842,0,317.8421)"
+ cx="49"
+ cy="488"
+ fx="49"
+ fy="488"
+ r="38" />
+ <linearGradient
+ id="linearGradient39563-4-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop39565-1-4" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop39567-7-9" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient39573-6-1"
+ id="radialGradient68157-0-8"
+ gradientUnits="userSpaceOnUse"
+ cx="50.5"
+ cy="487.5"
+ fx="50.5"
+ fy="487.5"
+ r="10.5" />
+ <linearGradient
+ id="linearGradient39573-6-1">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop39575-5-6" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop39577-1-2" />
+ </linearGradient>
+ </defs>
+ <g
+ id="layer1"
+ transform="translate(-337,-518.86218)">
+ <g
+ id="g99967"
+ style="display:inline"
+ transform="translate(326,44.862171)">
+ <rect
+ style="opacity:0.49375;color:#000000;fill:url(#radialGradient68155-2-3);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect99969"
+ width="76"
+ height="2"
+ x="11"
+ y="487"
+ rx="0"
+ ry="0" />
+ <path
+ style="opacity:0.43125;color:#000000;fill:url(#radialGradient68157-0-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path99971"
+ d="M 61,487.5 C 61,493.29899 56.29899,498 50.5,498 44.70101,498 40,493.29899 40,487.5 40,481.70101 44.70101,477 50.5,477 c 5.79899,0 10.5,4.70101 10.5,10.5 z"
+ transform="matrix(1.2857143,0,0,1.2857143,-14.428572,-139.28571)" />
+ <path
+ transform="matrix(0.43589747,0,0,0.43589747,28.487179,275)"
+ d="M 61,487.5 C 61,493.29899 56.29899,498 50.5,498 44.70101,498 40,493.29899 40,487.5 40,481.70101 44.70101,477 50.5,477 c 5.79899,0 10.5,4.70101 10.5,10.5 z"
+ id="path99973"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ </g>
+</svg>
diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
new file mode 100644
index 0000000..b32f6eb
--- /dev/null
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -0,0 +1,2883 @@
+/* This stylesheet is generated, DO NOT EDIT */
+/* Copyright 2009, 2015 Red Hat, Inc.
+ *
+ * Portions adapted from Mx's data/style/default.css
+ * Copyright 2009 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+/* Global Values */
+stage {
+ font-size: 11pt;
+ color: white; }
+
+/* Common Stylings */
+.screenshot-ui-panel, .workspace-switcher, .switcher-list, .resize-popup, .osd-monitor-label, .osd-window {
+ color: white;
+ background-color: #000;
+ border: 1px solid #000;
+ border-radius: 999px;
+ padding: 12px; }
+
+.workspace-thumbnails .workspace-thumbnail {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1); }
+
+.app-well-app.app-folder .overview-icon, .app-folder.grid-search-result .overview-icon, .app-well-app .overview-icon, .grid-search-result .overview-icon, .dash-item-container .show-apps .overview-icon, .list-search-result, .search-provider-icon, .switcher-list .item-box {
+ border-radius: 16px;
+ padding: 6px;
+ spacing: 6px;
+ border: 2px solid transparent;
+ transition-duration: 200ms;
+ text-align: center; }
+
+.modal-dialog {
+ color: white;
+ background-color: #000;
+ border-radius: 11px;
+ border: 1px solid #2b2b2b; }
+
+#LookingGlassDialog > #Toolbar .lg-toolbar-button, .app-folder-dialog .folder-name-container .edit-folder-button, .button, .icon-button {
+ border-radius: 6px;
+ border-style: solid;
+ border-width: 1px;
+ font-weight: bold;
+ padding: 3px 24px;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1a1a1a;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus, .app-folder-dialog .folder-name-container .edit-folder-button:focus, .button:focus, .icon-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1d252e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus:hover, .app-folder-dialog .folder-name-container .edit-folder-button:focus:hover, .button:focus:hover, .icon-button:focus:hover {
+ background-color: #242b35;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus:active, .app-folder-dialog .folder-name-container .edit-folder-button:focus:active, .button:focus:active, .icon-button:focus:active {
+ background-color: #2a323c;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:hover, .app-folder-dialog .folder-name-container .edit-folder-button:hover, .button:hover, .icon-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #222222;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(144, 144, 144, 0.28); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:insensitive, .app-folder-dialog .folder-name-container .edit-folder-button:insensitive, .button:insensitive, .icon-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:active, .app-folder-dialog .folder-name-container .edit-folder-button:active, .button:active, .icon-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #292929;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(148, 148, 148, 0.28); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked, .app-folder-dialog .folder-name-container .edit-folder-button:checked, .button:checked, .icon-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #313131;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(152, 152, 152, 0.28); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked:hover, .app-folder-dialog .folder-name-container .edit-folder-button:checked:hover, .button:checked:hover, .icon-button:checked:hover {
+ background-color: #393939; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked:active, .app-folder-dialog .folder-name-container .edit-folder-button:checked:active, .button:checked:active, .icon-button:checked:active {
+ background-color: #404040; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button, .app-folder-dialog .folder-name-container .flat.edit-folder-button, .flat.button, .flat.icon-button {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1a1a1a;
+ background-color: transparent;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus, .flat.button:focus, .flat.icon-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1d252e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus:hover, .flat.button:focus:hover, .flat.icon-button:focus:hover {
+ background-color: #242b35;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus:active, .flat.button:focus:active, .flat.icon-button:focus:active {
+ background-color: #2a323c;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:hover, .flat.button:hover, .flat.icon-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #222222;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(144, 144, 144, 0.28); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:insensitive, .app-folder-dialog .folder-name-container .flat.edit-folder-button:insensitive, .flat.button:insensitive, .flat.icon-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:active, .flat.button:active, .flat.icon-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #292929;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(148, 148, 148, 0.28); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked, .flat.button:checked, .flat.icon-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #313131;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(152, 152, 152, 0.28); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked:hover, .flat.button:checked:hover, .flat.icon-button:checked:hover {
+ background-color: #393939; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked:active, .flat.button:checked:active, .flat.icon-button:checked:active {
+ background-color: #404040; }
+
+.modal-dialog .modal-dialog-linked-button, .hotplug-notification-item, .notification-banner .notification-button {
+ padding: 12px;
+ font-weight: bold !important;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #616161;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2); }
+ .modal-dialog .modal-dialog-linked-button:ltr, .hotplug-notification-item:ltr, .notification-banner .notification-button:ltr {
+ margin-right: 1px; }
+ .modal-dialog .modal-dialog-linked-button:rtl, .hotplug-notification-item:rtl, .notification-banner .notification-button:rtl {
+ margin-left: 1px; }
+ .modal-dialog .modal-dialog-linked-button:insensitive, .hotplug-notification-item:insensitive, .notification-banner .notification-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0); }
+ .modal-dialog .modal-dialog-linked-button:focus, .hotplug-notification-item:focus, .notification-banner .notification-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #5d656e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .modal-dialog .modal-dialog-linked-button:focus:hover, .hotplug-notification-item:focus:hover, .notification-banner .notification-button:focus:hover {
+ background-color: #636b75;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .modal-dialog .modal-dialog-linked-button:focus:active, .hotplug-notification-item:focus:active, .notification-banner .notification-button:focus:active {
+ background-color: #6a727c;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .modal-dialog .modal-dialog-linked-button:hover, .hotplug-notification-item:hover, .notification-banner .notification-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: dimgray;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(180, 180, 180, 0.28); }
+ .modal-dialog .modal-dialog-linked-button:active, .hotplug-notification-item:active, .notification-banner .notification-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #707070;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(184, 184, 184, 0.28); }
+ .modal-dialog .modal-dialog-linked-button:checked, .hotplug-notification-item:checked, .notification-banner .notification-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #787878;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(187, 187, 187, 0.28); }
+ .modal-dialog .modal-dialog-linked-button:checked:hover, .hotplug-notification-item:checked:hover, .notification-banner .notification-button:checked:hover {
+ background-color: gray; }
+ .modal-dialog .modal-dialog-linked-button:checked:active, .hotplug-notification-item:checked:active, .notification-banner .notification-button:checked:active {
+ background-color: #878787; }
+ .modal-dialog .modal-dialog-linked-button:first-child:ltr, .hotplug-notification-item:first-child:ltr, .notification-banner .notification-button:first-child:ltr {
+ border-radius: 0 0 0 10px; }
+ .modal-dialog .modal-dialog-linked-button:last-child:ltr, .hotplug-notification-item:last-child:ltr, .notification-banner .notification-button:last-child:ltr {
+ border-radius: 0 0 10px 0;
+ margin-right: 0 !important; }
+ .modal-dialog .modal-dialog-linked-button:first-child:rtl, .hotplug-notification-item:first-child:rtl, .notification-banner .notification-button:first-child:rtl {
+ border-radius: 0 0 10px 0; }
+ .modal-dialog .modal-dialog-linked-button:last-child:rtl, .hotplug-notification-item:last-child:rtl, .notification-banner .notification-button:last-child:rtl {
+ border-radius: 0 0 0 10px;
+ margin-left: 0 !important; }
+ .modal-dialog .modal-dialog-linked-button:first-child:last-child, .hotplug-notification-item:first-child:last-child, .notification-banner .notification-button:first-child:last-child {
+ border-radius: 0 0 10px 10px !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important; }
+
+.screenshot-ui-show-pointer-button, .screenshot-ui-type-button {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .screenshot-ui-show-pointer-button:insensitive, .screenshot-ui-type-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-show-pointer-button:insensitive, .screenshot-ui-type-button:insensitive {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .screenshot-ui-show-pointer-button:insensitive:insensitive, .screenshot-ui-type-button:insensitive:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-show-pointer-button:focus, .screenshot-ui-type-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1d252e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .screenshot-ui-show-pointer-button:focus:hover, .screenshot-ui-type-button:focus:hover {
+ background-color: #242b35;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .screenshot-ui-show-pointer-button:focus:active, .screenshot-ui-type-button:focus:active {
+ background-color: #2a323c;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .screenshot-ui-show-pointer-button:hover, .screenshot-ui-type-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #222222;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(144, 144, 144, 0.28); }
+ .screenshot-ui-show-pointer-button:active, .screenshot-ui-type-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #292929;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(148, 148, 148, 0.28); }
+ .screenshot-ui-show-pointer-button:outlined, .screenshot-ui-type-button:outlined, .screenshot-ui-show-pointer-button:checked, .screenshot-ui-type-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #313131;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(152, 152, 152, 0.28); }
+ .screenshot-ui-show-pointer-button:outlined:hover, .screenshot-ui-type-button:outlined:hover, .screenshot-ui-show-pointer-button:checked:hover, .screenshot-ui-type-button:checked:hover {
+ background-color: #393939; }
+ .screenshot-ui-show-pointer-button:outlined:active, .screenshot-ui-type-button:outlined:active, .screenshot-ui-show-pointer-button:checked:active, .screenshot-ui-type-button:checked:active {
+ background-color: #404040; }
+
+/* General Typography */
+.app-folder-dialog .folder-name-container .folder-name-label, .app-folder-dialog .folder-name-container .folder-name-entry, .search-statustext {
+ font-weight: 800;
+ font-size: 20pt; }
+
+.lg-debug-flags-header, .message-dialog-content .message-dialog-title, .message-list .message-list-placeholder, .datemenu-today-button .date-label {
+ font-weight: 800;
+ font-size: 15pt; }
+
+.quick-toggle-menu .header .title {
+ font-weight: 700;
+ font-size: 15pt; }
+
+.message-dialog-content .message-dialog-title.lightweight, .headline {
+ font-weight: 700;
+ font-size: 13pt; }
+
+.lg-extension-name, .osd-window, .dialog-list .dialog-list-title, .message-list-controls, .weather-button .weather-forecast-temp, .weather-button .weather-header, .world-clocks-button .world-clocks-time, .world-clocks-button .world-clocks-header, .events-button .events-title, .calendar .calendar-month-header .calendar-month-label, .datemenu-today-button .day-label, .popup-menu-ornament {
+ font-weight: 700;
+ font-size: 11pt; }
+
+.quick-toggle-menu .header .subtitle, .app-menu .popup-inactive-menu-item:first-child > StLabel {
+ font-weight: 700;
+ font-size: 9pt; }
+
+.login-dialog-not-listed-label, .lg-completions-text, .caps-lock-warning-label, #dash, .icon-label-button-container, .prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label, .run-dialog .run-dialog-description, .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-description, .weather-button .weather-forecast-time, .world-clocks-button .world-clocks-timezone, .events-button .event-time {
+ font-weight: 400;
+ font-size: 9pt; }
+
+.calendar .calendar-day-base.calendar-day-heading, .calendar .calendar-day-base {
+ font-weight: 400;
+ font-size: 8pt; }
+
+.unlock-dialog-clock-time, #panel, .weather-button .weather-forecast-time, .world-clocks-button .world-clocks-timezone, .world-clocks-button .world-clocks-time, .events-button .event-time, .calendar .calendar-day-base {
+ font-feature-settings: "tnum"; }
+
+/* WIDGETS */
+.shell-link {
+ color: #8fbbf0; }
+ .shell-link:hover {
+ color: #bcd6f6; }
+
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }
+
+.icon-dropshadow {
+ icon-shadow: 0 1px 5px rgba(0, 0, 0, 0.8); }
+
+/* Entries */
+StEntry {
+ border-radius: 8px;
+ padding: 8px;
+ color: white;
+ background-color: #0d0d0d;
+ color: rgba(255, 255, 255, 0.7);
+ border: 2px solid #0d0d0d;
+ selection-background-color: #3584e4;
+ selected-color: #ffffff; }
+ StEntry:hover {
+ background-color: #404040;
+ border-color: #404040;
+ color: rgba(255, 255, 255, 0.7); }
+ StEntry:focus {
+ background-color: #0f1318;
+ border-color: #3584e4;
+ color: white; }
+ StEntry:insensitive {
+ background-color: #0d0d0d;
+ border-color: #0d0d0d;
+ color: gray; }
+ StEntry StIcon.capslock-warning {
+ icon-size: 16px;
+ warning-color: #cd9309;
+ padding: 0 4px; }
+ StEntry StIcon.peek-password {
+ icon-size: 1.09em;
+ padding: 0 4px; }
+ StEntry StLabel.hint-text {
+ margin-left: 2px;
+ color: rgba(255, 255, 255, 0.7); }
+
+/* Buttons */
+.button, .icon-button {
+ min-height: 22px; }
+
+.icon-button {
+ border-radius: 99px;
+ padding: 12px;
+ min-height: 16px; }
+ .icon-button StIcon {
+ icon-size: 1.09em;
+ -st-icon-style: symbolic; }
+
+/* Check Boxes */
+.check-box StBoxLayout {
+ spacing: .8em; }
+
+.check-box StBin {
+ width: 24px;
+ height: 24px;
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
+
+.check-box:focus StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
+
+.check-box:checked StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
+
+.check-box:focus:checked StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
+
+/* Switches */
+.toggle-switch {
+ color: white;
+ height: 26px;
+ width: 48px;
+ background-size: contain;
+ background-image: url("resource:///org/gnome/shell/theme/toggle-off.svg"); }
+ .toggle-switch:checked {
+ background-image: url("resource:///org/gnome/shell/theme/toggle-on.svg"); }
+
+/* Slider */
+.slider {
+ -barlevel-height: 4px;
+ -barlevel-background-color: rgba(255, 255, 255, 0.2);
+ -barlevel-border-width: 2px;
+ -barlevel-border-color: transparent;
+ -barlevel-active-background-color: #3584e4;
+ -barlevel-active-border-color: transparent;
+ -barlevel-overdrive-color: #c01c28;
+ -barlevel-overdrive-border-color: transparent;
+ -barlevel-overdrive-separator-width: 1px;
+ -slider-handle-radius: 8px;
+ -slider-handle-border-width: 0;
+ -slider-handle-border-color: transparent; }
+
+/* Scrollbars */
+StScrollView.vfade {
+ -st-vfade-offset: 68px; }
+
+StScrollView.hfade {
+ -st-hfade-offset: 68px; }
+
+StScrollBar {
+ padding: 0; }
+ StScrollView StScrollBar {
+ min-width: 8px;
+ min-height: 8px; }
+ StScrollBar StBin#trough {
+ border-radius: 0;
+ background-color: transparent; }
+ StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
+ border-radius: 8px;
+ background-color: #4d4d4d;
+ border: 3px solid transparent;
+ transition: 500ms all ease; }
+ StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
+ background-color: gray; }
+ StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
+ background-color: #666666; }
+
+/* Popovers/Menus */
+.popup-menu-boxpointer, .candidate-popup-boxpointer {
+ -arrow-rise: 6px; }
+
+.popup-menu {
+ min-width: 15em;
+ color: white; }
+ .popup-menu.panel-menu {
+ margin-bottom: 1.75em; }
+
+.popup-menu-content, .candidate-popup-content {
+ padding: 6px;
+ border-radius: 20px;
+ border: 1px solid #2b2b2b;
+ box-shadow: 0 2px 4px 0 transparent;
+ background-color: #000; }
+
+.popup-menu-item {
+ padding: 9px 12px;
+ border-radius: 12px;
+ spacing: 6px;
+ transition-duration: 100ms;
+ background-color: transparent; }
+ .popup-menu-item:ltr {
+ padding-left: 6px; }
+ .popup-menu-item:rtl {
+ padding-right: 6px; }
+ .popup-menu-item:focus, .popup-menu-item:hover {
+ background-color: #333333 !important; }
+ .popup-menu-item:focus:active, .popup-menu-item:hover:active {
+ background-color: #383838 !important; }
+ .popup-menu-item:checked {
+ background-color: #2e2e2e !important; }
+ .popup-menu-item:checked {
+ margin-bottom: 0;
+ box-shadow: inset 0 -1px 0 0 #212121;
+ border-radius: 8px 8px 0 0; }
+ .popup-menu-item:checked:focus, .popup-menu-item:checked:hover {
+ background-color: #363636 !important; }
+ .popup-menu-item:checked:active {
+ background-color: #3b3b3b !important; }
+ .popup-menu-item:active {
+ background-color: #454545;
+ color: white; }
+ .popup-menu-item:insensitive {
+ color: rgba(255, 255, 255, 0.5); }
+ .popup-menu-item .toggle-switch:ltr {
+ margin-left: 4px; }
+ .popup-menu-item .toggle-switch:rtl {
+ margin-right: 4px; }
+
+.popup-inactive-menu-item {
+ color: white; }
+ .popup-inactive-menu-item:insensitive {
+ color: gray; }
+
+.popup-menu-arrow,
+.popup-menu-icon {
+ icon-size: 16px !important; }
+
+.popup-sub-menu {
+ background-color: #2e2e2e;
+ border-radius: 0 0 8px 8px; }
+ .popup-sub-menu .popup-menu-ornament {
+ min-width: 1.09em !important; }
+ .popup-sub-menu .popup-menu-item {
+ border-radius: 0;
+ margin: 0; }
+ .popup-sub-menu .popup-menu-item:last-child {
+ border-radius: 0 0 8px 8px; }
+ .popup-sub-menu .popup-menu-item:focus, .popup-sub-menu .popup-menu-item:hover {
+ background-color: #333333 !important; }
+ .popup-sub-menu .popup-menu-item:checked {
+ background-color: #2e2e2e !important; }
+ .popup-sub-menu .popup-menu-item:checked:focus, .popup-sub-menu .popup-menu-item:checked:hover {
+ background-color: #424242 !important; }
+ .popup-sub-menu .popup-menu-item:active {
+ background-color: #383838 !important; }
+ .popup-sub-menu .popup-menu-section .popup-menu-item:last-child:hover, .popup-sub-menu .popup-menu-section .popup-menu-item:last-child:focus {
+ border-radius: 0; }
+ .popup-sub-menu .popup-menu-section:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 8px 8px; }
+
+.popup-menu-ornament {
+ width: 1.2em;
+ text-align: center !important; }
+ .popup-menu-ornament:ltr {
+ text-align: right; }
+ .popup-menu-ornament:rtl {
+ text-align: left; }
+
+.popup-separator-menu-item {
+ margin: 6px 0;
+ padding: 0 !important; }
+ .popup-separator-menu-item:ltr {
+ margin-right: 4px; }
+ .popup-separator-menu-item:rtl {
+ margin-left: 4px; }
+ .popup-separator-menu-item .popup-separator-menu-item-separator {
+ height: 1px;
+ background-color: #2b2b2b; }
+ .popup-separator-menu-item .popup-menu-ornament {
+ width: 0 !important; }
+ .popup-sub-menu .popup-separator-menu-item {
+ background-color: transparent; }
+ .popup-sub-menu .popup-separator-menu-item:ltr {
+ margin-right: 2.5em; }
+ .popup-sub-menu .popup-separator-menu-item:rtl {
+ margin-left: 2.5em; }
+ .popup-sub-menu .popup-separator-menu-item .popup-separator-menu-item-separator {
+ background-color: #3d3d3d; }
+
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; }
+
+.app-menu {
+ max-width: 27.25em; }
+ .app-menu .popup-menu-ornament {
+ width: 0 !important; }
+ .app-menu .popup-inactive-menu-item:first-child > StLabel:ltr {
+ margin-right: 8px; }
+ .app-menu .popup-inactive-menu-item:first-child > StLabel:rtl {
+ margin-left: 8px; }
+
+/* Date/Time Menu */
+#calendarArea {
+ padding: 4px; }
+
+.datemenu-calendar-column {
+ spacing: 6px; }
+ .datemenu-calendar-column:ltr {
+ padding-left: 6px; }
+ .datemenu-calendar-column:rtl {
+ padding-right: 6px; }
+ .datemenu-calendar-column .datemenu-displays-box {
+ spacing: 6px; }
+
+/* today button (the date) */
+.datemenu-today-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none;
+ box-shadow: none !important;
+ padding: 9px; }
+ .datemenu-today-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .datemenu-today-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .datemenu-today-button:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .datemenu-today-button:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .datemenu-today-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .datemenu-today-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+
+/* Calendar */
+.calendar {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none;
+ box-shadow: none !important;
+ margin-top: 0; }
+ .calendar:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .calendar:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .calendar:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .calendar:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .calendar:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .calendar:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+ .calendar .calendar-month-header .calendar-change-month-back StIcon,
+ .calendar .calendar-month-header .calendar-change-month-forward StIcon {
+ icon-size: 1.09em; }
+ .calendar .calendar-month-header .calendar-month-label {
+ color: white;
+ padding: 8px 0; }
+ .calendar .calendar-month-header .pager-button {
+ background-color: transparent;
+ height: 32px;
+ width: 32px;
+ margin: 2px;
+ border-radius: 6px; }
+ .calendar .calendar-month-header .pager-button:hover, .calendar .calendar-month-header .pager-button:focus {
+ background-color: #333333; }
+ .calendar .calendar-month-header .pager-button:active {
+ background-color: #383838; }
+ .calendar .calendar-day-base {
+ text-align: center;
+ margin: 2px;
+ padding: 0 !important;
+ height: 3em !important;
+ width: 3em !important;
+ border-radius: 99px;
+ transition-duration: 100ms; }
+ .calendar .calendar-day-base:hover {
+ background-color: #333333; }
+ .calendar .calendar-day-base:focus {
+ background-color: #0b1a2e;
+ color: #ffffff;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .calendar .calendar-day-base:active, .calendar .calendar-day-base:selected {
+ color: white;
+ background-color: #383838; }
+ .calendar .calendar-day-base:active:focus, .calendar .calendar-day-base:selected:focus {
+ background-color: #37475a; }
+ .calendar .calendar-day-base.calendar-day-heading {
+ color: gray;
+ padding-top: 6px;
+ height: 16px !important;
+ font-weight: bold; }
+ .calendar .calendar-nonwork-day {
+ color: gray; }
+ .calendar .calendar-other-month-day {
+ color: rgba(255, 255, 255, 0.5); }
+ .calendar .calendar-other-month-day.calendar-nonwork-day {
+ color: rgba(128, 128, 128, 0.5); }
+ .calendar .calendar-today {
+ background-color: #3584e4;
+ font-weight: 800;
+ color: #ffffff !important; }
+ .calendar .calendar-today:hover, .calendar .calendar-today:focus {
+ background-color: #428ce6;
+ color: inherit; }
+ .calendar .calendar-today:active, .calendar .calendar-today:selected {
+ background-color: #3584e4;
+ color: inherit; }
+ .calendar .calendar-today:active:hover, .calendar .calendar-today:active:focus, .calendar .calendar-today:selected:hover, .calendar .calendar-today:selected:focus {
+ background-color: #428ce6;
+ color: inherit; }
+ .calendar .calendar-day-with-events {
+ background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg");
+ background-size: contain; }
+ .calendar .calendar-week-number {
+ font-size: 7pt;
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: 6px;
+ padding: 0 6px;
+ border-radius: 3px;
+ background-color: black;
+ color: gray; }
+
+/* Events */
+.events-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353535;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ padding: 12px; }
+ .events-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .events-button:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .events-button:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .events-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .events-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+ .events-button .events-box {
+ spacing: 6px; }
+ .events-button .events-list {
+ spacing: 12px; }
+ .events-button .events-title {
+ color: gray;
+ margin-bottom: 4px; }
+ .events-button .event-time {
+ color: gray; }
+
+/* World clocks */
+.world-clocks-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353535;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ padding: 12px; }
+ .world-clocks-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .world-clocks-button:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .world-clocks-button:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .world-clocks-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .world-clocks-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+ .world-clocks-button .world-clocks-grid {
+ spacing-rows: 6px;
+ spacing-columns: 12px; }
+ .world-clocks-button .world-clocks-header {
+ color: gray; }
+ .world-clocks-button .world-clocks-city {
+ color: white; }
+ .world-clocks-button .world-clocks-time {
+ color: white; }
+ .world-clocks-button .world-clocks-time:ltr {
+ text-align: right; }
+ .world-clocks-button .world-clocks-time:rtl {
+ text-align: left; }
+ .world-clocks-button .world-clocks-timezone {
+ color: gray; }
+
+/* Weather */
+.weather-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353535;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ padding: 12px; }
+ .weather-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .weather-button:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .weather-button:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .weather-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .weather-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+ .weather-button .weather-box {
+ spacing: 10px; }
+ .weather-button .weather-header-box {
+ spacing: 6px; }
+ .weather-button .weather-header {
+ color: gray; }
+ .weather-button .weather-header.location {
+ font-weight: normal; }
+ .weather-button .weather-grid {
+ spacing-rows: 6px;
+ spacing-columns: 12px; }
+ .weather-button .weather-forecast-time {
+ color: #b3b3b3;
+ padding-top: 0.2em;
+ padding-bottom: 0.4em; }
+ .weather-button .weather-forecast-icon {
+ icon-size: 2.18em; }
+
+/* Message List */
+.message-list {
+ width: 29em;
+ border: solid #2b2b2b; }
+ .message-list:ltr {
+ margin-left: 0;
+ margin-right: 4px;
+ padding-right: 6px;
+ border-right-width: 1px; }
+ .message-list:rtl {
+ margin-right: 0;
+ margin-left: 4px;
+ padding-left: 6px;
+ border-left-width: 1px; }
+ .message-list .message-list-placeholder {
+ color: rgba(128, 128, 128, 0.5); }
+ .message-list .message-list-placeholder > StIcon {
+ icon-size: 3.27em;
+ margin-bottom: 12px;
+ -st-icon-style: symbolic; }
+
+.message-list-sections {
+ spacing: 6px;
+ margin: 0;
+ padding-bottom: 6px; }
+ .message-list-sections:ltr {
+ margin-right: 12px; }
+ .message-list-sections:rtl {
+ margin-left: 12px; }
+
+.message-list-section,
+.message-list-section-list {
+ spacing: 6px; }
+
+.message-list-controls {
+ padding: 6px;
+ spacing: 6px; }
+ .message-list-controls .dnd-button {
+ border-width: 2px;
+ border-color: transparent;
+ border-radius: 32px;
+ border-style: solid; }
+ .message-list-controls .dnd-button:focus {
+ border-color: rgba(53, 132, 228, 0.6); }
+
+.message {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353535;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2); }
+ .message:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .message:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .message:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .message:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .message:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+ .message .message-icon-bin {
+ padding: 18px; }
+ .message .message-icon-bin:ltr {
+ padding-right: 6px; }
+ .message .message-icon-bin:rtl {
+ padding-left: 6px; }
+ .message .message-icon-bin > StIcon {
+ icon-size: 2.18em;
+ -st-icon-style: symbolic; }
+ .message .message-icon-bin > .fallback-app-icon {
+ width: 1.09em;
+ height: 1.09em; }
+ .message .message-content {
+ spacing: 4px;
+ padding: 9px;
+ margin-bottom: 8px; }
+ .message .message-title {
+ font-weight: bold;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-top: 0.57em; }
+ .message .message-secondary-bin {
+ padding: 0 8px; }
+ .message .message-secondary-bin > .event-time {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 9pt;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-bottom: 0.13em; }
+ .message .message-secondary-bin > .event-time:ltr {
+ text-align: right; }
+ .message .message-secondary-bin > .event-time:rtl {
+ text-align: left; }
+ .message .message-close-button {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: 99px;
+ padding: 5px;
+ margin: 1px; }
+ .message .message-close-button:hover {
+ background-color: rgba(255, 255, 255, 0.2); }
+ .message .message-close-button:active {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .message .message-close-button StIcon {
+ icon-size: 1.09em; }
+ .message .message-body {
+ color: #e6e6e6; }
+
+.url-highlighter {
+ link-color: #8fbbf0; }
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 18px;
+ margin: 12px 0;
+ border-radius: 8px;
+ color: white; }
+ .message-media-control:hover {
+ background-color: #404040;
+ color: white; }
+ .message-media-control:active {
+ background-color: #454545;
+ color: white; }
+ .message-media-control:insensitive {
+ color: #8d8d8d; }
+ .message-media-control:last-child:ltr {
+ margin-right: 12px; }
+ .message-media-control:last-child:rtl {
+ margin-left: 12px; }
+ .message-media-control StIcon {
+ icon-size: 1.09em; }
+
+.media-message-cover-icon {
+ icon-size: 3.27em !important;
+ border-radius: 8px; }
+ .media-message-cover-icon.fallback {
+ color: #d4d4d4;
+ background-color: #000;
+ border: 1px solid transparent;
+ border-radius: 8px;
+ icon-size: 2.18em !important;
+ padding: 14px; }
+
+.candidate-popup-content {
+ padding: 6px;
+ spacing: 6px; }
+
+.candidate-index {
+ padding: 0;
+ padding-right: 6px;
+ color: gray; }
+
+.candidate-box {
+ padding: 6px 12px 6px 12px;
+ border-radius: 8px; }
+ .candidate-box:selected {
+ background-color: #3584e4;
+ color: #ffffff; }
+ .candidate-box:hover {
+ background-color: #333333;
+ color: white; }
+
+.candidate-page-button-box {
+ height: 2em; }
+ .vertical .candidate-page-button-box {
+ padding-top: 12px; }
+ .horizontal .candidate-page-button-box {
+ padding-left: 12px; }
+
+.candidate-page-button {
+ padding: 6px; }
+ .candidate-page-button StIcon {
+ icon-size: 1.09em; }
+
+.candidate-page-button-previous {
+ border-radius: 8px 0px 0px 8px;
+ border-right-width: 0;
+ box-shadow: none; }
+
+.candidate-page-button-next {
+ border-radius: 0px 8px 8px 0px;
+ box-shadow: none; }
+
+/* Notifications & Message Tray */
+.notification-banner {
+ min-height: 64px;
+ width: 34em;
+ box-shadow: 0 2px 4px 2px transparent;
+ border-radius: 12px;
+ margin: 4px; }
+ .notification-banner .notification-actions {
+ spacing: 0; }
+
+.summary-source-counter {
+ font-size: 10pt;
+ font-weight: bold;
+ height: 1.6em;
+ width: 1.6em;
+ -shell-counter-overlap-x: 3px;
+ -shell-counter-overlap-y: 3px;
+ background-color: #3584e4;
+ color: #ffffff;
+ border: 2px solid white;
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5);
+ border-radius: 0.9em; }
+
+.chat-body {
+ spacing: 5px; }
+
+.chat-response {
+ margin: 5px; }
+
+.chat-log-message {
+ color: #e6e6e6; }
+
+.chat-new-group {
+ padding-top: 1em; }
+
+.chat-received {
+ padding-left: 4px; }
+ .chat-received:rtl {
+ padding-left: 0px;
+ padding-right: 4px; }
+
+.chat-sent {
+ padding-left: 18pt;
+ color: white; }
+ .chat-sent:rtl {
+ padding-left: 0;
+ padding-right: 18pt; }
+
+.chat-meta-message {
+ padding-left: 4px;
+ font-size: 9pt;
+ font-weight: bold;
+ color: white; }
+ .chat-meta-message:rtl {
+ padding-left: 0;
+ padding-right: 4px; }
+
+.hotplug-notification-item-icon {
+ icon-size: 24px;
+ padding: 0 4px; }
+
+/* Modal Dialogs */
+.modal-dialog .modal-dialog-content-box {
+ margin: 32px 40px;
+ spacing: 32px;
+ max-width: 28em; }
+
+/* End Session Dialog */
+.end-session-dialog {
+ width: 30em; }
+ .end-session-dialog .end-session-dialog-battery-warning,
+ .end-session-dialog .dialog-list-title {
+ color: #cd9309; }
+
+/* Message Dialog */
+.message-dialog-content {
+ spacing: 18px; }
+ .message-dialog-content .message-dialog-title {
+ text-align: center; }
+ .message-dialog-content .message-dialog-description {
+ text-align: center; }
+
+/* Dialog List */
+.dialog-list {
+ spacing: 18px; }
+ .dialog-list .dialog-list-title {
+ text-align: center; }
+ .dialog-list .dialog-list-scrollview {
+ max-height: 200px; }
+ .dialog-list .dialog-list-box {
+ spacing: 1em; }
+ .dialog-list .dialog-list-box .dialog-list-item {
+ spacing: 1em; }
+ .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-title {
+ font-weight: bold; }
+ .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-description {
+ color: #f2f2f2; }
+
+/* Run Dialog */
+.run-dialog .modal-dialog-content-box {
+ margin-top: 24px;
+ margin-bottom: 14px; }
+
+.run-dialog .run-dialog-entry {
+ width: 20em; }
+
+.run-dialog .run-dialog-description {
+ text-align: center;
+ color: #cccccc; }
+
+/* Password or Authentication Dialog */
+.prompt-dialog {
+ width: 28em; }
+ .prompt-dialog .modal-dialog-content-box {
+ margin-bottom: 24px; }
+
+.prompt-dialog-password-grid {
+ spacing-rows: 8px;
+ spacing-columns: 4px; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry {
+ width: auto; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry:ltr {
+ margin-left: 20px; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry:rtl {
+ margin-right: 20px; }
+
+.prompt-dialog-password-layout {
+ spacing: 8px; }
+
+.prompt-dialog-password-entry {
+ width: 20em; }
+
+.prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label {
+ text-align: center; }
+
+.prompt-dialog-error-label {
+ color: #cd9309; }
+
+/* Polkit Dialog */
+.polkit-dialog-user-layout {
+ text-align: center;
+ spacing: 8px;
+ margin-bottom: 6px; }
+ .polkit-dialog-user-layout .polkit-dialog-user-root-label {
+ color: #cd9309; }
+
+/* Audio selection dialog */
+.audio-device-selection-dialog .modal-dialog-content-box {
+ margin-bottom: 28px; }
+
+.audio-device-selection-dialog .audio-selection-box {
+ spacing: 20px; }
+
+.audio-selection-device {
+ border-radius: 16px; }
+ .audio-selection-device:hover, .audio-selection-device:focus {
+ background-color: #333333; }
+ .audio-selection-device:active {
+ background-color: #3584e4;
+ color: #ffffff; }
+
+.audio-selection-device-box {
+ padding: 20px;
+ spacing: 20px; }
+
+.audio-selection-device-icon {
+ icon-size: 4.36em; }
+
+/* Welcome dialog */
+.welcome-dialog-image {
+ background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
+ background-size: contain;
+ /* Reasonable maximum dimensions */
+ height: 300px;
+ width: 300px; }
+
+/* Access portal dialog */
+.access-dialog {
+ text-align: center; }
+
+/* OSD */
+.osd-window {
+ text-align: center;
+ font-weight: bold;
+ spacing: 12px;
+ padding: 12px 18px;
+ margin-bottom: 4em; }
+ .osd-window > * {
+ spacing: 8px; }
+ .osd-window StIcon {
+ icon-size: 2.18em; }
+ .osd-window StLabel:ltr {
+ margin-right: 6px; }
+ .osd-window StLabel:rtl {
+ margin-left: 6px; }
+ .osd-window .level {
+ margin-bottom: 4px;
+ height: 6px;
+ min-width: 10.9em;
+ -barlevel-height: 6px;
+ -barlevel-background-color: rgba(255, 255, 255, 0.1);
+ -barlevel-active-background-color: white;
+ -barlevel-overdrive-color: #c01c28;
+ -barlevel-overdrive-separator-width: 3px; }
+ .osd-window .level:first-child {
+ margin-bottom: 0px; }
+ .osd-window .level:ltr {
+ margin-right: 6px; }
+ .osd-window .level:rtl {
+ margin-left: 6px; }
+
+.osd-monitor-label {
+ border-radius: 16px;
+ font-size: 3em;
+ font-weight: bold;
+ margin: 12px;
+ text-align: center;
+ min-width: 1.3em; }
+
+/* Pad OSD */
+.pad-osd-window {
+ padding: 32px;
+ background-color: rgba(0, 0, 0, 0.8); }
+ .pad-osd-window .pad-osd-title-box {
+ spacing: 12px; }
+ .pad-osd-window .pad-osd-title-menu-box {
+ spacing: 6px; }
+
+.combo-box-label {
+ width: 15em; }
+
+/* App Switcher */
+.switcher-popup {
+ padding: 0;
+ spacing: 24px; }
+
+.switcher-list {
+ padding: 10px;
+ border-radius: 24px;
+ box-shadow: 0 8px 8px 0 rgba(0, 0, 0, 0.1); }
+ .switcher-list .switcher-list-item-container {
+ spacing: 12px; }
+ .switcher-list .item-box {
+ background-color: transparent; }
+ .switcher-list .item-box:hover {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .switcher-list .item-box:selected, .switcher-list .item-box:focus {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .switcher-list .item-box:selected:hover, .switcher-list .item-box:focus:hover {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .switcher-list .item-box:selected:active, .switcher-list .item-box:focus:active {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .switcher-list .item-box:active {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .switcher-list .item-box:outlined, .switcher-list .item-box:checked {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .switcher-list .item-box:outlined:active, .switcher-list .item-box:checked:active {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .switcher-list .item-box:outlined:hover, .switcher-list .item-box:checked:hover {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .switcher-list .item-box:drop {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+ .switcher-list .item-box:hover {
+ background: none; }
+ .switcher-list .separator {
+ width: 1px;
+ background: #2b2b2b; }
+ .switcher-list .thumbnail-box {
+ padding: 2px;
+ spacing: 6px; }
+ .switcher-list .thumbnail {
+ width: 256px;
+ border-radius: 8px; }
+
+.switcher-arrow {
+ border-color: rgba(255, 255, 255, 0.8);
+ color: rgba(255, 255, 255, 0.8); }
+ .switcher-arrow:highlighted {
+ border-color: white;
+ color: white; }
+
+.input-source-switcher-symbol {
+ font-size: 34pt;
+ width: 96px;
+ height: 96px; }
+
+.cycler-highlight {
+ border: 5px solid #3584e4; }
+
+/* Workspace Switcher */
+.workspace-switcher {
+ margin-bottom: 4em;
+ spacing: 12px;
+ padding: 12px 18px; }
+
+.ws-switcher-indicator {
+ background-color: rgba(255, 255, 255, 0.5);
+ padding: 0.1816666667em;
+ margin: 0.9083333333em;
+ border-radius: 2.18em; }
+ .ws-switcher-indicator:active {
+ background-color: white;
+ padding: 0.3633333333em;
+ margin: 0.7266666667em; }
+
+.icon-label-button-container {
+ spacing: 6px; }
+ .icon-label-button-container StIcon {
+ icon-size: 32px; }
+
+.screenshot-ui-panel {
+ border-radius: 37px;
+ padding: 18px;
+ padding-bottom: 12px;
+ margin-bottom: 4em;
+ spacing: 12px; }
+
+.screenshot-ui-close-button {
+ padding: 6px !important;
+ margin-top: 12px;
+ box-shadow: 0 2px 4px 0 transparent; }
+ .screenshot-ui-close-button.left {
+ margin-left: 12px; }
+ .screenshot-ui-close-button.right {
+ margin-right: 12px; }
+
+.screenshot-ui-type-button {
+ min-width: 48px;
+ padding: 12px 18px !important;
+ border-radius: 19px; }
+
+.screenshot-ui-capture-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ border: 4px white;
+ padding: 4px; }
+ .screenshot-ui-capture-button .screenshot-ui-capture-button-circle {
+ background-color: white;
+ transition-duration: 200ms;
+ border-radius: 99px; }
+ .screenshot-ui-capture-button .screenshot-ui-capture-button-circle:hover, .screenshot-ui-capture-button .screenshot-ui-capture-button-circle:focus {
+ background-color: #333333; }
+ .screenshot-ui-capture-button:hover .screenshot-ui-capture-button-circle, .screenshot-ui-capture-button:focus .screenshot-ui-capture-button-circle {
+ background-color: #d9d9d9; }
+ .screenshot-ui-capture-button:active .screenshot-ui-capture-button-circle {
+ background-color: gray; }
+ .screenshot-ui-capture-button:cast .screenshot-ui-capture-button-circle {
+ background-color: #c01c28; }
+ .screenshot-ui-capture-button:cast:hover .screenshot-ui-capture-button-circle, .screenshot-ui-capture-button:cast:focus .screenshot-ui-capture-button-circle {
+ background-color: #d61f2d; }
+ .screenshot-ui-capture-button:cast:active .screenshot-ui-capture-button-circle {
+ background-color: #a11722; }
+
+.screenshot-ui-shot-cast-container {
+ background-color: #0d0d0d;
+ border-radius: 16px;
+ padding: 3px;
+ spacing: 3px; }
+ .screenshot-ui-shot-cast-container:ltr {
+ margin-left: 3px; }
+ .screenshot-ui-shot-cast-container:rtl {
+ margin-right: 3px; }
+
+.screenshot-ui-shot-cast-button {
+ padding: 6px 12px;
+ background-color: transparent;
+ border-radius: 13px; }
+ .screenshot-ui-shot-cast-button:hover, .screenshot-ui-shot-cast-button:focus {
+ background-color: #1a1a1a; }
+ .screenshot-ui-shot-cast-button:active {
+ background-color: #454545; }
+ .screenshot-ui-shot-cast-button:checked {
+ background-color: white;
+ color: black; }
+ .screenshot-ui-shot-cast-button:insensitive {
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-shot-cast-button StIcon {
+ icon-size: 1.09em; }
+
+.screenshot-ui-show-pointer-button {
+ border-radius: 99px;
+ padding: 12px !important; }
+ .screenshot-ui-show-pointer-button StIcon {
+ icon-size: 1.09em; }
+
+.screenshot-ui-area-indicator-shade {
+ background-color: rgba(0, 0, 0, 0.3); }
+
+.screenshot-ui-area-selector .screenshot-ui-area-indicator-shade {
+ background-color: rgba(0, 0, 0, 0.5); }
+
+.screenshot-ui-area-selector .screenshot-ui-area-indicator-selection {
+ border: 2px white; }
+
+.screenshot-ui-area-selector-handle {
+ border-radius: 99px;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px rgba(0, 0, 0, 0.2);
+ width: 24px;
+ height: 24px; }
+
+.screenshot-ui-window-selector {
+ background-color: #2b2b2b; }
+ .screenshot-ui-window-selector .screenshot-ui-window-selector-window-container {
+ margin: 100px; }
+ .screenshot-ui-window-selector:primary-monitor .screenshot-ui-window-selector-window-container {
+ margin-bottom: 200px; }
+
+.screenshot-ui-window-selector-window-border {
+ transition-duration: 200ms;
+ border-radius: 16px;
+ border: 6px transparent; }
+
+.screenshot-ui-window-selector-check {
+ transition-duration: 200ms;
+ color: transparent;
+ border-radius: 99px;
+ border-width: 12px;
+ icon-size: 24px; }
+
+.screenshot-ui-window-selector-window:hover .screenshot-ui-window-selector-window-border {
+ border-color: #185fb4; }
+
+.screenshot-ui-window-selector-window:checked .screenshot-ui-window-selector-window-border {
+ border-color: #3584e4;
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.screenshot-ui-window-selector-window:checked .screenshot-ui-window-selector-check {
+ color: #ffffff;
+ background-color: #3584e4; }
+
+.screenshot-ui-screen-selector {
+ transition-duration: 200ms;
+ background-color: rgba(0, 0, 0, 0.5); }
+ .screenshot-ui-screen-selector:hover {
+ background-color: rgba(0, 0, 0, 0.3); }
+ .screenshot-ui-screen-selector:active {
+ background-color: rgba(0, 0, 0, 0.7); }
+ .screenshot-ui-screen-selector:checked {
+ background-color: transparent;
+ border: 2px white; }
+
+.screenshot-ui-tooltip {
+ color: white;
+ background-color: #000;
+ border-radius: 99px;
+ padding: 6px 12px;
+ text-align: center;
+ -y-offset: 24px; }
+
+/* Top Bar */
+#panel {
+ background-color: #000;
+ font-weight: bold;
+ height: 2.2em;
+ transition-duration: 250ms; }
+ #panel.unlock-screen, #panel.login-screen, #panel:overview {
+ background-color: transparent; }
+ #panel .panel-button {
+ font-weight: bold;
+ color: #f2f2f2;
+ -natural-hpadding: 12px;
+ -minimum-hpadding: 6px;
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px; }
+ #panel .panel-button.clock-display .clock {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px; }
+ #panel .panel-button.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px #c01c28; }
+ #panel .panel-button.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px #cd9309; }
+ #panel .panel-button.screen-sharing-indicator StBoxLayout {
+ margin: 0 6px; }
+ #panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
+ spacing: 6px; }
+ #panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
+ icon-size: 1.09em; }
+ #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.2); }
+ #panel .panel-button.clock-display:active, #panel .panel-button.clock-display:overview, #panel .panel-button.clock-display:focus, #panel .panel-button.clock-display:checked {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.2); }
+ #panel .panel-button.screen-recording-indicator:active, #panel .panel-button.screen-recording-indicator:overview, #panel .panel-button.screen-recording-indicator:focus, #panel .panel-button.screen-recording-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.85); }
+ #panel .panel-button.screen-sharing-indicator:active, #panel .panel-button.screen-sharing-indicator:overview, #panel .panel-button.screen-sharing-indicator:focus, #panel .panel-button.screen-sharing-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.85); }
+ #panel .panel-button:hover {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.15); }
+ #panel .panel-button.clock-display:hover {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.15); }
+ #panel .panel-button.screen-recording-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.9); }
+ #panel .panel-button.screen-sharing-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.9); }
+ #panel .panel-button:active:hover, #panel .panel-button:overview:hover, #panel .panel-button:focus:hover, #panel .panel-button:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.25); }
+ #panel .panel-button.clock-display:active:hover, #panel .panel-button.clock-display:overview:hover, #panel .panel-button.clock-display:focus:hover, #panel .panel-button.clock-display:checked:hover {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:active:hover .clock, #panel .panel-button.clock-display:overview:hover .clock, #panel .panel-button.clock-display:focus:hover .clock, #panel .panel-button.clock-display:checked:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.25); }
+ #panel .panel-button.screen-recording-indicator:active:hover, #panel .panel-button.screen-recording-indicator:overview:hover, #panel .panel-button.screen-recording-indicator:focus:hover, #panel .panel-button.screen-recording-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.8); }
+ #panel .panel-button.screen-sharing-indicator:active:hover, #panel .panel-button.screen-sharing-indicator:overview:hover, #panel .panel-button.screen-sharing-indicator:focus:hover, #panel .panel-button.screen-sharing-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.8); }
+ #panel .panel-button .system-status-icon {
+ icon-size: 1.09em;
+ padding: 5px;
+ margin: 0 4px; }
+ #panel .panel-button .panel-status-indicators-box .system-status-icon,
+ #panel .panel-button .panel-status-menu-box .system-status-icon {
+ margin: 0; }
+ #panel .panel-button .app-menu-icon {
+ -st-icon-style: symbolic; }
+ #panel #panelActivities.panel-button {
+ -natural-hpadding: 18px; }
+ #panel.unlock-screen .panel-button:active, #panel.unlock-screen .panel-button:overview, #panel.unlock-screen .panel-button:focus, #panel.unlock-screen .panel-button:checked, #panel.login-screen .panel-button:active, #panel.login-screen .panel-button:overview, #panel.login-screen .panel-button:focus, #panel.login-screen .panel-button:checked, #panel:overview .panel-button:active, #panel:overview .panel-button:overview, #panel:overview .panel-button:focus, #panel:overview .panel-button:checked {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
+ #panel.unlock-screen .panel-button.clock-display:active, #panel.unlock-screen .panel-button.clock-display:overview, #panel.unlock-screen .panel-button.clock-display:focus, #panel.unlock-screen .panel-button.clock-display:checked, #panel.login-screen .panel-button.clock-display:active, #panel.login-screen .panel-button.clock-display:overview, #panel.login-screen .panel-button.clock-display:focus, #panel.login-screen .panel-button.clock-display:checked, #panel:overview .panel-button.clock-display:active, #panel:overview .panel-button.clock-display:overview, #panel:overview .panel-button.clock-display:focus, #panel:overview .panel-button.clock-display:checked {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:active .clock, #panel.unlock-screen .panel-button.clock-display:overview .clock, #panel.unlock-screen .panel-button.clock-display:focus .clock, #panel.unlock-screen .panel-button.clock-display:checked .clock, #panel.login-screen .panel-button.clock-display:active .clock, #panel.login-screen .panel-button.clock-display:overview .clock, #panel.login-screen .panel-button.clock-display:focus .clock, #panel.login-screen .panel-button.clock-display:checked .clock, #panel:overview .panel-button.clock-display:active .clock, #panel:overview .panel-button.clock-display:overview .clock, #panel:overview .panel-button.clock-display:focus .clock, #panel:overview .panel-button.clock-display:checked .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:active, #panel.unlock-screen .panel-button.screen-recording-indicator:overview, #panel.unlock-screen .panel-button.screen-recording-indicator:focus, #panel.unlock-screen .panel-button.screen-recording-indicator:checked, #panel.login-screen .panel-button.screen-recording-indicator:active, #panel.login-screen .panel-button.screen-recording-indicator:overview, #panel.login-screen .panel-button.screen-recording-indicator:focus, #panel.login-screen .panel-button.screen-recording-indicator:checked, #panel:overview .panel-button.screen-recording-indicator:active, #panel:overview .panel-button.screen-recording-indicator:overview, #panel:overview .panel-button.screen-recording-indicator:focus, #panel:overview .panel-button.screen-recording-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.85); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:active, #panel.unlock-screen .panel-button.screen-sharing-indicator:overview, #panel.unlock-screen .panel-button.screen-sharing-indicator:focus, #panel.unlock-screen .panel-button.screen-sharing-indicator:checked, #panel.login-screen .panel-button.screen-sharing-indicator:active, #panel.login-screen .panel-button.screen-sharing-indicator:overview, #panel.login-screen .panel-button.screen-sharing-indicator:focus, #panel.login-screen .panel-button.screen-sharing-indicator:checked, #panel:overview .panel-button.screen-sharing-indicator:active, #panel:overview .panel-button.screen-sharing-indicator:overview, #panel:overview .panel-button.screen-sharing-indicator:focus, #panel:overview .panel-button.screen-sharing-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.85); }
+ #panel.unlock-screen .panel-button:hover, #panel.login-screen .panel-button:hover, #panel:overview .panel-button:hover {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.1); }
+ #panel.unlock-screen .panel-button.clock-display:hover, #panel.login-screen .panel-button.clock-display:hover, #panel:overview .panel-button.clock-display:hover {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:hover .clock, #panel.login-screen .panel-button.clock-display:hover .clock, #panel:overview .panel-button.clock-display:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.1); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:hover, #panel.login-screen .panel-button.screen-recording-indicator:hover, #panel:overview .panel-button.screen-recording-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.9); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:hover, #panel.login-screen .panel-button.screen-sharing-indicator:hover, #panel:overview .panel-button.screen-sharing-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.9); }
+ #panel.unlock-screen .panel-button:active:hover, #panel.unlock-screen .panel-button:overview:hover, #panel.unlock-screen .panel-button:focus:hover, #panel.unlock-screen .panel-button:checked:hover, #panel.login-screen .panel-button:active:hover, #panel.login-screen .panel-button:overview:hover, #panel.login-screen .panel-button:focus:hover, #panel.login-screen .panel-button:checked:hover, #panel:overview .panel-button:active:hover, #panel:overview .panel-button:overview:hover, #panel:overview .panel-button:focus:hover, #panel:overview .panel-button:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
+ #panel.unlock-screen .panel-button.clock-display:active:hover, #panel.unlock-screen .panel-button.clock-display:overview:hover, #panel.unlock-screen .panel-button.clock-display:focus:hover, #panel.unlock-screen .panel-button.clock-display:checked:hover, #panel.login-screen .panel-button.clock-display:active:hover, #panel.login-screen .panel-button.clock-display:overview:hover, #panel.login-screen .panel-button.clock-display:focus:hover, #panel.login-screen .panel-button.clock-display:checked:hover, #panel:overview .panel-button.clock-display:active:hover, #panel:overview .panel-button.clock-display:overview:hover, #panel:overview .panel-button.clock-display:focus:hover, #panel:overview .panel-button.clock-display:checked:hover {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:active:hover .clock, #panel.unlock-screen .panel-button.clock-display:overview:hover .clock, #panel.unlock-screen .panel-button.clock-display:focus:hover .clock, #panel.unlock-screen .panel-button.clock-display:checked:hover .clock, #panel.login-screen .panel-button.clock-display:active:hover .clock, #panel.login-screen .panel-button.clock-display:overview:hover .clock, #panel.login-screen .panel-button.clock-display:focus:hover .clock, #panel.login-screen .panel-button.clock-display:checked:hover .clock, #panel:overview .panel-button.clock-display:active:hover .clock, #panel:overview .panel-button.clock-display:overview:hover .clock, #panel:overview .panel-button.clock-display:focus:hover .clock, #panel:overview .panel-button.clock-display:checked:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:active:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:overview:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:focus:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:checked:hover, #panel.login-screen .panel-button.screen-recording-indicator:active:hover, #panel.login-screen .panel-button.screen-recording-indicator:overview:hover, #panel.login-screen .panel-button.screen-recording-indicator:focus:hover, #panel.login-screen .panel-button.screen-recording-indicator:checked:hover, #panel:overview .panel-button.screen-recording-indicator:active:hover, #panel:overview .panel-button.screen-recording-indicator:overview:hover, #panel:overview .panel-button.screen-recording-indicator:focus:hover, #panel:overview .panel-button.screen-recording-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.8); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:active:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:overview:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:focus:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:checked:hover, #panel.login-screen .panel-button.screen-sharing-indicator:active:hover, #panel.login-screen .panel-button.screen-sharing-indicator:overview:hover, #panel.login-screen .panel-button.screen-sharing-indicator:focus:hover, #panel.login-screen .panel-button.screen-sharing-indicator:checked:hover, #panel:overview .panel-button.screen-sharing-indicator:active:hover, #panel:overview .panel-button.screen-sharing-indicator:overview:hover, #panel:overview .panel-button.screen-sharing-indicator:focus:hover, #panel:overview .panel-button.screen-sharing-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.8); }
+ #panel .panel-status-indicators-box,
+ #panel .panel-status-menu-box {
+ spacing: 2px; }
+ #panel .power-status.panel-status-indicators-box {
+ spacing: 0; }
+ #panel .screencast-indicator,
+ #panel .remote-access-indicator {
+ color: #cd9309; }
+
+#appMenu {
+ spacing: 6px; }
+ #appMenu .label-shadow {
+ color: transparent; }
+
+#appMenu .panel-status-menu-box {
+ padding: 0 6px;
+ spacing: 6px; }
+
+.clock-display-box {
+ spacing: 2px; }
+ .clock-display-box .clock {
+ padding-left: 12px;
+ padding-right: 12px; }
+
+/* Activities Ripple */
+.ripple-box {
+ background-color: rgba(255, 255, 255, 0.2);
+ box-shadow: 0 0 2px 2px rgba(255, 255, 255, 0.2);
+ width: 52px;
+ height: 52px;
+ border-radius: 0 0 52px 0; }
+ .ripple-box:rtl {
+ border-radius: 0 0 0 52px; }
+
+.quick-settings {
+ padding: 18px;
+ border-radius: 36px; }
+ .quick-settings .icon-button, .quick-settings .button {
+ padding: 10.5px; }
+
+.quick-settings-grid {
+ spacing-rows: 12px;
+ spacing-columns: 12px; }
+
+.quick-toggle {
+ border-radius: 99px;
+ min-width: 12em;
+ max-width: 12em;
+ min-height: 40px;
+ border: none;
+ /* Move padding into the box; this is to allow menu arrows
+ to extend to the border */ }
+ .quick-toggle:checked {
+ transition-duration: 100ms;
+ background-color: #3584e4;
+ color: #ffffff;
+ box-shadow: none; }
+ .quick-toggle:checked:focus {
+ box-shadow: inset 0 0 0 2px #629fea; }
+ .quick-toggle:checked:hover, .quick-toggle:checked:focus {
+ background-color: #4b92e7;
+ color: white; }
+ .quick-toggle:checked:active {
+ background-color: #1d72d8;
+ color: #ededed; }
+ .quick-toggle:checked:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: rgba(53, 132, 228, 0.5);
+ color: rgba(255, 255, 255, 0.5); }
+ .quick-toggle > StBoxLayout {
+ spacing: 6px; }
+ .quick-toggle.button, .quick-toggle.icon-button {
+ padding: 0; }
+ .quick-toggle > StBoxLayout {
+ padding: 0 12px; }
+ .quick-toggle:ltr > StBoxLayout {
+ padding-left: 15px; }
+ .quick-toggle:rtl > StBoxLayout {
+ padding-right: 15px; }
+ .quick-toggle .quick-toggle-label {
+ font-weight: bold; }
+ .quick-toggle .quick-toggle-icon, .quick-toggle .quick-toggle-arrow {
+ icon-size: 1.09em; }
+
+.quick-menu-toggle:ltr > StBoxLayout {
+ padding-right: 0; }
+
+.quick-menu-toggle:rtl > StBoxLayout {
+ padding-left: 0; }
+
+.quick-menu-toggle .quick-toggle-arrow {
+ background-color: rgba(255, 255, 255, 0.1);
+ padding: 6px 10.5px; }
+ .quick-menu-toggle .quick-toggle-arrow:ltr {
+ border-radius: 0 99px 99px 0; }
+ .quick-menu-toggle .quick-toggle-arrow:rtl {
+ border-radius: 99px 0 0 99px; }
+
+.quick-slider > StBoxLayout {
+ spacing: 6px; }
+
+.quick-slider .slider-bin {
+ min-height: 16px;
+ padding: 6px;
+ border-radius: 99px; }
+ .quick-slider .slider-bin:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1d252e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .quick-slider .slider-bin:focus:hover {
+ background-color: #242b35;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .quick-slider .slider-bin:focus:active {
+ background-color: #2a323c;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+
+.quick-slider .quick-toggle-icon {
+ icon-size: 1.09em; }
+ .quick-slider .quick-toggle-icon:ltr {
+ margin-left: 6px; }
+ .quick-slider .quick-toggle-icon:rtl {
+ margin-right: 6px; }
+
+.quick-toggle-menu {
+ background-color: #1f1f1f;
+ border-radius: 24px;
+ padding: 12px;
+ margin: 12px 18px 0; }
+ .quick-toggle-menu .popup-menu-item > StIcon {
+ -st-icon-style: symbolic; }
+ .quick-toggle-menu .header {
+ spacing-rows: 3px;
+ spacing-columns: 12px;
+ padding-bottom: 12px; }
+ .quick-toggle-menu .header .icon {
+ icon-size: 1.635em;
+ border-radius: 999px;
+ padding: 9px;
+ background-color: #1a1a1a; }
+ .quick-toggle-menu .header .icon.active {
+ background-color: #3584e4; }
+
+.quick-settings-system-item > StBoxLayout {
+ spacing: 12px; }
+
+.quick-settings-system-item .power-item {
+ min-height: 0;
+ min-width: 0; }
+ .quick-settings-system-item .power-item:insensitive {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #1a1a1a;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: transparent; }
+
+.nm-network-item .wireless-secure-icon {
+ icon-size: 0.545em; }
+
+/* OVERVIEW */
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: 12px; }
+
+#overviewGroup {
+ background-color: #2b2b2b; }
+
+.overview-controls {
+ padding-bottom: 32px; }
+
+/* Window Picker */
+.window-picker {
+ spacing: 6px; }
+
+.window-caption {
+ color: white;
+ background-color: #0d0d0d;
+ border-radius: 99px;
+ padding: 6px 12px; }
+
+.window-close, .screenshot-ui-close-button {
+ background-color: rgba(18, 18, 18, 0.98);
+ color: white;
+ border-radius: 99px;
+ box-shadow: 0 2px 4px 0 transparent;
+ padding: 3px;
+ height: 30px;
+ width: 30px;
+ transition-duration: 100ms; }
+ .window-close StIcon, .screenshot-ui-close-button StIcon {
+ icon-size: 24px; }
+ .window-close:hover, .screenshot-ui-close-button:hover {
+ background-color: rgba(36, 36, 36, 0.98); }
+ .window-close:active, .screenshot-ui-close-button:active {
+ background-color: rgba(51, 51, 51, 0.98); }
+
+.workspace-background {
+ border-radius: 30px;
+ background-color: rgba(3, 2, 1, 0);
+ box-shadow: 0 4px 16px 4px rgba(0, 0, 0, 0.3); }
+
+
+.search-entry {
+ border-radius: 18px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ padding: 7px 9px;
+ width: 320px;
+ background-color: #0d0d0d;
+ color: rgba(255, 255, 255, 0.7);
+ border: 2px solid #0d0d0d; }
+
+ .search-entry:hover {
+ background-color: #404040;
+ border-color: #404040;
+ color: rgba(255, 255, 255, 0.7); }
+
+ .search-entry:focus {
+ background-color: #0f1318;
+ border-color: #3584e4;
+ color: white; }
+
+ .search-entry:insensitive {
+ background-color: #0d0d0d;
+ border-color: #0d0d0d;
+ color: gray; }
+
+ .search-entry .search-entry-icon {
+ color: inherit;
+ icon-size: 1.09em;
+ margin-top: 2px;
+ padding: 0 4px; }
+
+/* Search */
+#searchResults {
+ margin: 0 4px; }
+
+#searchResultsContent {
+ max-width: 1072px; }
+
+.search-section {
+ spacing: 18px; }
+ .search-section .search-section-separator {
+ height: 8px;
+ background-color: transparent; }
+
+.search-section-content {
+ background-color: #383838;
+ border-radius: 24px;
+ border: 1px solid #000;
+ color: white;
+ padding: 12px;
+ margin: 0 12px; }
+
+.list-search-result, .search-provider-icon {
+ background-color: transparent;
+ border-radius: 11px; }
+ .list-search-result:hover, .search-provider-icon:hover {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .list-search-result:selected, .search-provider-icon:selected, .list-search-result:focus, .search-provider-icon:focus {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .list-search-result:selected:hover, .search-provider-icon:selected:hover, .list-search-result:focus:hover, .search-provider-icon:focus:hover {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .list-search-result:selected:active, .search-provider-icon:selected:active, .list-search-result:focus:active, .search-provider-icon:focus:active {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .list-search-result:active, .search-provider-icon:active {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .list-search-result:outlined, .search-provider-icon:outlined, .list-search-result:checked, .search-provider-icon:checked {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .list-search-result:outlined:active, .search-provider-icon:outlined:active, .list-search-result:checked:active, .search-provider-icon:checked:active {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .list-search-result:outlined:hover, .search-provider-icon:outlined:hover, .list-search-result:checked:hover, .search-provider-icon:checked:hover {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .list-search-result:drop, .search-provider-icon:drop {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.grid-search-results {
+ spacing: 30px;
+ margin: 0 12px; }
+
+.search-provider-icon:ltr {
+ margin-right: 4px; }
+
+.search-provider-icon:rtl {
+ margin-left: 4px; }
+
+.search-provider-icon .list-search-provider-content {
+ spacing: 12px; }
+ .search-provider-icon .list-search-provider-content .list-search-provider-details {
+ width: 120px;
+ color: white; }
+
+.list-search-results {
+ spacing: 6px; }
+
+.list-search-result .list-search-result-content {
+ spacing: 6px; }
+
+.list-search-result .list-search-result-title {
+ spacing: 12px; }
+
+.list-search-result .list-search-result-description {
+ color: #b3b3b3; }
+
+/* Dash */
+#dash {
+ margin-top: 12px; }
+ #dash .placeholder {
+ background-image: none;
+ background-size: contain;
+ height: 32px; }
+ #dash .empty-dash-drop-target {
+ width: 32px;
+ height: 32px; }
+ #dash .app-well-app-running-dot {
+ margin-bottom: 14px; }
+
+.dash-background {
+ background-color: #383838;
+ border-radius: 28px;
+ padding: 12px;
+ spacing: 6px;
+ margin-bottom: 12px; }
+
+.dash-item-container > * {
+ margin: 0 2px; }
+
+.dash-item-container:ltr:first-child {
+ margin-left: 0; }
+
+.dash-item-container:rtl:first-child {
+ margin-right: 0; }
+
+.dash-item-container .app-well-app .overview-icon, .dash-item-container .grid-search-result .overview-icon {
+ padding: 6px; }
+
+.dash-item-container .show-apps {
+ transition-duration: 400ms; }
+ .dash-item-container .show-apps .overview-icon {
+ background-color: transparent; }
+ .dash-item-container .show-apps:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .dash-item-container .show-apps:selected .overview-icon, .dash-item-container .show-apps:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .dash-item-container .show-apps:selected .overview-icon:hover .overview-icon, .dash-item-container .show-apps:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .dash-item-container .show-apps:selected .overview-icon:active .overview-icon, .dash-item-container .show-apps:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .dash-item-container .show-apps:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .dash-item-container .show-apps:outlined .overview-icon, .dash-item-container .show-apps:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .dash-item-container .show-apps:outlined .overview-icon:active .overview-icon, .dash-item-container .show-apps:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .dash-item-container .show-apps:outlined .overview-icon:hover .overview-icon, .dash-item-container .show-apps:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .dash-item-container .show-apps:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.dash-item-container .show-apps, .dash-item-container .app-well-app, .dash-item-container .grid-search-result {
+ padding-bottom: 12px; }
+
+.dash-separator {
+ width: 1px;
+ margin: 0 4px;
+ background-color: #2b2b2b;
+ margin-bottom: 12px; }
+
+.dash-label {
+ color: white;
+ background-color: #000;
+ border-radius: 99px;
+ padding: 6px 12px;
+ text-align: center;
+ -y-offset: 8px; }
+
+/* App Grid */
+.icon-grid {
+ row-spacing: 12px;
+ column-spacing: 12px;
+ max-row-spacing: 42px;
+ max-column-spacing: 42px;
+ page-padding-top: 24px;
+ page-padding-bottom: 24px;
+ page-padding-left: 18px;
+ page-padding-right: 18px; }
+
+/* App Icons */
+.app-well-app, .grid-search-result {
+ transition-duration: 400ms; }
+ .app-well-app .overview-icon, .grid-search-result .overview-icon {
+ background-color: transparent; }
+ .app-well-app:hover .overview-icon, .grid-search-result:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .app-well-app:selected .overview-icon, .grid-search-result:selected .overview-icon, .app-well-app:focus .overview-icon, .grid-search-result:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app:selected .overview-icon:hover .overview-icon, .grid-search-result:selected .overview-icon:hover .overview-icon, .app-well-app:focus .overview-icon:hover .overview-icon, .grid-search-result:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app:selected .overview-icon:active .overview-icon, .grid-search-result:selected .overview-icon:active .overview-icon, .app-well-app:focus .overview-icon:active .overview-icon, .grid-search-result:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app:active .overview-icon, .grid-search-result:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app:outlined .overview-icon, .grid-search-result:outlined .overview-icon, .app-well-app:checked .overview-icon, .grid-search-result:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app:outlined .overview-icon:active .overview-icon, .grid-search-result:outlined .overview-icon:active .overview-icon, .app-well-app:checked .overview-icon:active .overview-icon, .grid-search-result:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .app-well-app:outlined .overview-icon:hover .overview-icon, .grid-search-result:outlined .overview-icon:hover .overview-icon, .app-well-app:checked .overview-icon:hover .overview-icon, .grid-search-result:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .app-well-app:drop .overview-icon, .grid-search-result:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+ .app-well-app .overview-icon, .grid-search-result .overview-icon {
+ padding: 12px; }
+ .app-well-app .overview-icon.overview-icon-with-label > StBoxLayout, .grid-search-result .overview-icon.overview-icon-with-label > StBoxLayout {
+ spacing: 6px; }
+
+.app-well-app.app-folder, .app-folder.grid-search-result {
+ transition-duration: 400ms; }
+ .app-well-app.app-folder .overview-icon, .app-folder.grid-search-result .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app.app-folder:hover .overview-icon, .app-folder.grid-search-result:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .app-well-app.app-folder:selected .overview-icon, .app-folder.grid-search-result:selected .overview-icon, .app-well-app.app-folder:focus .overview-icon, .app-folder.grid-search-result:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app.app-folder:selected .overview-icon:hover .overview-icon, .app-folder.grid-search-result:selected .overview-icon:hover .overview-icon, .app-well-app.app-folder:focus .overview-icon:hover .overview-icon, .app-folder.grid-search-result:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app.app-folder:selected .overview-icon:active .overview-icon, .app-folder.grid-search-result:selected .overview-icon:active .overview-icon, .app-well-app.app-folder:focus .overview-icon:active .overview-icon, .app-folder.grid-search-result:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app.app-folder:active .overview-icon, .app-folder.grid-search-result:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app.app-folder:outlined .overview-icon, .app-folder.grid-search-result:outlined .overview-icon, .app-well-app.app-folder:checked .overview-icon, .app-folder.grid-search-result:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app.app-folder:outlined .overview-icon:active .overview-icon, .app-folder.grid-search-result:outlined .overview-icon:active .overview-icon, .app-well-app.app-folder:checked .overview-icon:active .overview-icon, .app-folder.grid-search-result:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .app-well-app.app-folder:outlined .overview-icon:hover .overview-icon, .app-folder.grid-search-result:outlined .overview-icon:hover .overview-icon, .app-well-app.app-folder:checked .overview-icon:hover .overview-icon, .app-folder.grid-search-result:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .app-well-app.app-folder:drop .overview-icon, .app-folder.grid-search-result:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.app-folder-dialog {
+ border-radius: 32px;
+ background-color: #383838; }
+ .app-folder-dialog .folder-name-container {
+ padding: 24px 36px 0;
+ spacing: 12px;
+ /* FIXME: this is to keep the label in sync with the entry */ }
+ .app-folder-dialog .folder-name-container .folder-name-entry {
+ width: 300px; }
+ .app-folder-dialog .folder-name-container .folder-name-label {
+ padding: 5px 7px;
+ color: white; }
+ .app-folder-dialog .folder-name-container .edit-folder-button {
+ padding: 0;
+ width: 36px;
+ height: 36px;
+ border-radius: 99px; }
+ .app-folder-dialog .folder-name-container .edit-folder-button > StIcon {
+ icon-size: 1.09em; }
+ .app-folder-dialog .icon-grid {
+ row-spacing: 12px;
+ column-spacing: 30px;
+ page-padding-top: 0;
+ page-padding-bottom: 0;
+ page-padding-left: 0;
+ page-padding-right: 0; }
+ .app-folder-dialog .page-indicators {
+ margin-bottom: 18px; }
+
+.app-folder-dialog-container {
+ padding: 12px;
+ width: 720px;
+ height: 720px; }
+
+.app-well-app-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius: 5px;
+ margin-bottom: 8px;
+ background-color: white; }
+
+.rename-folder-popup .rename-folder-popup-item {
+ spacing: 6px; }
+ .rename-folder-popup .rename-folder-popup-item:ltr, .rename-folder-popup .rename-folder-popup-item:rtl {
+ padding: 0 12px; }
+
+.page-indicator {
+ padding: 6px 12px 0;
+ transition-duration: 400ms; }
+ .page-indicator .page-indicator-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 10px;
+ background-color: white; }
+
+.apps-scroll-view {
+ padding: 0; }
+
+.system-action-icon {
+ background-color: rgba(0, 0, 0, 0.8);
+ color: #fff;
+ border-radius: 99px;
+ icon-size: 48px; }
+
+.page-navigation-hint.dnd {
+ background: rgba(255, 255, 255, 0.1); }
+
+.page-navigation-hint.next:ltr, .page-navigation-hint.previous:rtl {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: horizontal;
+ border-radius: 24px 0px 0px 24px; }
+
+.page-navigation-hint.previous:ltr, .page-navigation-hint.next:rtl {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: horizontal;
+ border-radius: 0px 24px 24px 0px; }
+
+.page-navigation-arrow > StIcon {
+ margin: 6px;
+ padding: 18px;
+ width: 24px;
+ height: 24px;
+ border-radius: 99px; }
+
+.page-navigation-arrow:insensitive > StIcon {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .page-navigation-arrow:insensitive > StIcon:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+
+.page-navigation-arrow:hover > StIcon {
+ transition-duration: 100ms;
+ color: white;
+ background-color: rgba(72, 72, 72, 0.55);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(221, 221, 221, 0.235); }
+
+.page-navigation-arrow:active > StIcon {
+ transition-duration: 100ms;
+ color: white;
+ background-color: rgba(79, 79, 79, 0.55);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(222, 222, 222, 0.235); }
+
+/* Workspace pager */
+.workspace-thumbnails {
+ visible-width: 32px;
+ spacing: 6px;
+ padding: 6px; }
+ .workspace-thumbnails .workspace-thumbnail {
+ border-radius: 3px; }
+ .workspace-thumbnails .placeholder {
+ background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
+ background-size: contain;
+ width: 18px; }
+
+.workspace-thumbnail-indicator {
+ border: 3px solid #3584e4;
+ border-radius: 3px;
+ padding: 0px; }
+
+.ripple-pointer-location {
+ width: 50px;
+ height: 50px;
+ border-radius: 25px;
+ background-color: rgba(188, 214, 246, 0.3);
+ box-shadow: 0 0 2px 2px #8fbbf0; }
+
+.pie-timer {
+ width: 60px;
+ height: 60px;
+ -pie-border-width: 3px;
+ -pie-border-color: #3584e4;
+ -pie-background-color: rgba(233, 242, 252, 0.3); }
+
+.magnifier-zoom-region {
+ border: 2px solid #3584e4; }
+ .magnifier-zoom-region.full-screen {
+ border-width: 0; }
+
+.select-area-rubberband {
+ background-color: rgba(53, 132, 228, 0.3);
+ border: 1px solid #3584e4; }
+
+.user-icon {
+ background-size: contain;
+ color: white;
+ border-radius: 99px;
+ icon-size: 4.36em; }
+ .user-icon:hover {
+ color: white; }
+ .user-icon StIcon {
+ background-color: rgba(255, 255, 255, 0.05);
+ border-radius: 99px;
+ padding: 12px;
+ width: 2.725em;
+ height: 2.725em; }
+ .user-icon.user-avatar {
+ border: 2px white; }
+
+.user-widget.vertical .user-icon {
+ icon-size: 6.54em; }
+ .user-widget.vertical .user-icon StIcon {
+ padding: 20px;
+ padding-top: 18px;
+ padding-bottom: 22px;
+ width: 5.995em;
+ height: 5.995em; }
+
+.lightbox {
+ background-color: black; }
+
+.flashspot {
+ background-color: white; }
+
+.hidden {
+ color: rgba(0, 0, 0, 0); }
+
+.caps-lock-warning-label {
+ text-align: center;
+ padding-bottom: 8px;
+ color: #cd9309; }
+
+/* Workspace animation */
+.workspace-animation {
+ background-color: #2b2b2b; }
+
+/* Tiled window previews */
+.tile-preview {
+ background-color: rgba(53, 132, 228, 0.5);
+ border: 1px solid #3584e4; }
+
+/* On-screen Keyboard */
+#keyboard {
+ background-color: #000;
+ box-shadow: inset 0 1px 0 0 #000; }
+ #keyboard .page-indicator {
+ padding: 6px; }
+ #keyboard .page-indicator .page-indicator-icon {
+ width: 8px;
+ height: 8px; }
+
+.key-container {
+ padding: 4px;
+ spacing: 4px; }
+
+.keyboard-key {
+ font-size: 16pt;
+ font-weight: bold;
+ min-height: 1.2em;
+ min-width: 1.2em;
+ border-width: 1px;
+ border-style: solid;
+ border-radius: 12px;
+ box-shadow: 0 1px 0 0 transparent;
+ color: white;
+ background-color: #545454; }
+ .keyboard-key:focus {
+ color: white;
+ background-color: #0c141e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .keyboard-key:focus:hover {
+ background-color: #182029;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-key:focus:active {
+ background-color: #1c242e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-key:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .keyboard-key:active {
+ color: white;
+ background-color: #666666; }
+ .keyboard-key:checked {
+ color: white;
+ background-color: #737373; }
+ .keyboard-key:grayed {
+ background-color: black;
+ color: white;
+ border-color: #000; }
+ .keyboard-key.default-key {
+ color: white;
+ background-color: #3b3b3b;
+ border-radius: 12px; }
+ .keyboard-key.default-key:hover {
+ color: white;
+ background-color: #454545; }
+ .keyboard-key.default-key:active {
+ color: white;
+ background-color: #4d4d4d; }
+ .keyboard-key.default-key:checked {
+ color: white;
+ background-color: #595959; }
+ .keyboard-key.default-key:latched {
+ border-color: #4b92e7;
+ background-color: #3584e4; }
+ .keyboard-key.enter-key {
+ color: #ffffff;
+ background-color: #428ce6;
+ border-radius: 12px;
+ color: white; }
+ .keyboard-key.enter-key:hover {
+ color: #ffffff;
+ background-color: #5497e8; }
+ .keyboard-key.enter-key:active {
+ color: #ffffff;
+ background-color: #629fea; }
+ .keyboard-key.enter-key:checked {
+ color: #ffffff;
+ background-color: #78aded; }
+ .keyboard-key.shift-key-uppercase {
+ background-color: gray;
+ color: #000; }
+ .keyboard-key.shift-key-uppercase:hover {
+ background-color: #8c8c8c;
+ color: #0d0d0d; }
+ .keyboard-key StIcon {
+ icon-size: 24px; }
+
+.keyboard-subkeys {
+ -arrow-border-radius: 16px;
+ -arrow-background-color: #000;
+ -arrow-border-width: 1px;
+ -arrow-border-color: #171717;
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: 6px;
+ padding: 6px; }
+ .keyboard-subkeys .keyboard-key {
+ color: white;
+ background-color: #545454;
+ border-radius: 12px; }
+ .keyboard-subkeys .keyboard-key:focus {
+ color: white;
+ background-color: #0c141e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .keyboard-subkeys .keyboard-key:focus:hover {
+ background-color: #182029;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-subkeys .keyboard-key:focus:active {
+ background-color: #1c242e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-subkeys .keyboard-key:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .keyboard-subkeys .keyboard-key:active {
+ color: white;
+ background-color: #666666; }
+ .keyboard-subkeys .keyboard-key:checked {
+ color: white;
+ background-color: #737373; }
+
+.emoji-page .keyboard-key {
+ background-color: transparent;
+ border: none;
+ color: initial; }
+
+.emoji-panel .keyboard-key:latched {
+ border-color: #4b92e7;
+ background-color: #3584e4; }
+
+.word-suggestions {
+ font-size: 12pt;
+ spacing: 12px;
+ min-height: 17pt;
+ padding: 12px;
+ color: white; }
+ .word-suggestions StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: 6px;
+ padding: 0px 18px;
+ background-color: transparent;
+ background-image: none; }
+ .word-suggestions StButton:focus {
+ color: white;
+ background-color: #0c141e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .word-suggestions StButton:focus:hover {
+ background-color: #182029;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .word-suggestions StButton:focus:active {
+ background-color: #1c242e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .word-suggestions StButton:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .word-suggestions StButton:active {
+ color: white;
+ background-color: #666666; }
+ .word-suggestions StButton:checked {
+ color: white;
+ background-color: #737373; }
+
+/* Looking Glass */
+#LookingGlassDialog {
+ background-color: #000;
+ border-radius: 0 0 16px 16px;
+ border-top-width: 0;
+ border: 1px solid #000;
+ color: white;
+ padding: 6px;
+ spacing: 6px;
+ box-shadow: 0 2px 4px 0 transparent; }
+ #LookingGlassDialog > #Toolbar {
+ border: none;
+ padding: 6px;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: 6px; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button {
+ padding: 6px 12px; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button > StIcon {
+ icon-size: 1.09em; }
+ #LookingGlassDialog .labels {
+ spacing: 6px; }
+ #LookingGlassDialog .notebook-tab {
+ -natural-hpadding: 12px;
+ -minimum-hpadding: 12px;
+ font-weight: bold;
+ padding: 6px 12px;
+ color: #d9d9d9;
+ transition-duration: 100ms;
+ box-shadow: none;
+ border: none;
+ border-radius: 6px;
+ background-color: transparent; }
+ #LookingGlassDialog .notebook-tab:hover {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.05); }
+ #LookingGlassDialog .notebook-tab:selected {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1); }
+ #LookingGlassDialog StBoxLayout#EvalBox {
+ padding: 4px;
+ spacing: 6px;
+ padding: 6px; }
+ #LookingGlassDialog StBoxLayout#ResultsArea {
+ spacing: 6px;
+ padding: 6px; }
+
+.lg-dialog StEntry {
+ background-color: rgba(13, 13, 13, 0.6);
+ color: white;
+ border-color: rgba(255, 255, 255, 0.2);
+ min-height: 22px;
+ selection-background-color: #3584e4;
+ selected-color: #ffffff; }
+
+.lg-dialog .shell-link {
+ color: #8fbbf0; }
+ .lg-dialog .shell-link:hover {
+ color: #bcd6f6; }
+ .lg-dialog .shell-link:active {
+ color: #629fea; }
+
+.lg-dialog .actor-link {
+ color: gray; }
+ .lg-dialog .actor-link:hover {
+ color: #b3b3b3; }
+ .lg-dialog .actor-link:active {
+ color: #4d4d4d; }
+ .lg-dialog .actor-link StIcon {
+ icon-size: 12px; }
+
+.lg-completions-text {
+ font-style: italic; }
+
+.lg-obj-inspector-title {
+ spacing: 6px; }
+
+.lg-obj-inspector-button {
+ border: 1px solid #000;
+ padding: 4px;
+ border-radius: 8px; }
+ .lg-obj-inspector-button:hover {
+ border: 1px solid #ffffff; }
+
+#lookingGlassExtensions {
+ padding: 6px; }
+
+.lg-extensions-list {
+ padding: 6px;
+ spacing: 6px; }
+
+.lg-extension {
+ padding: 12px;
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px #1f1f1f;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353535;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2); }
+ .lg-extension:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #353d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .lg-extension:focus:hover {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .lg-extension:focus:active {
+ background-color: #434b54;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .lg-extension:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(158, 158, 158, 0.28); }
+ .lg-extension:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #444444;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(162, 162, 162, 0.28); }
+
+.lg-extension-meta {
+ spacing: 6px; }
+
+#LookingGlassPropertyInspector {
+ background: #000;
+ border: 1px solid #000;
+ border-radius: 8px;
+ padding: 6px; }
+
+.lg-debug-flag-button {
+ color: white; }
+ .lg-debug-flag-button StLabel {
+ padding: 6px, 12px; }
+ .lg-debug-flag-button:hover {
+ color: white; }
+ .lg-debug-flag-button:active {
+ color: #cccccc; }
+
+.lg-debug-flags-header {
+ padding-top: 12px;
+ padding: 6px; }
+
+/* Login Dialog */
+.login-dialog-banner-view {
+ padding-top: 24px;
+ max-width: 23em; }
+
+.login-dialog,
+.unlock-dialog {
+ border: none;
+ background-color: transparent; }
+ .login-dialog .modal-dialog-button-box,
+ .unlock-dialog .modal-dialog-button-box {
+ spacing: 3px; }
+ .login-dialog .modal-dialog-button,
+ .unlock-dialog .modal-dialog-button {
+ padding: 4px 18px;
+ background-color: #242424;
+ border-color: #242424;
+ color: white; }
+ .login-dialog .modal-dialog-button:hover, .login-dialog .modal-dialog-button:focus,
+ .unlock-dialog .modal-dialog-button:hover,
+ .unlock-dialog .modal-dialog-button:focus {
+ background-color: #383838;
+ border-color: #383838; }
+ .login-dialog .modal-dialog-button:active,
+ .unlock-dialog .modal-dialog-button:active {
+ background-color: #1f1f1f;
+ border-color: #1f1f1f; }
+ .login-dialog .modal-dialog-button:insensitive,
+ .unlock-dialog .modal-dialog-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ border-color: #1f1f1f;
+ background-color: #1f1f1f;
+ color: rgba(255, 255, 255, 0.7); }
+ .login-dialog .modal-dialog-button:default,
+ .unlock-dialog .modal-dialog-button:default {
+ transition-duration: 100ms;
+ background-color: #3584e4;
+ color: #ffffff;
+ box-shadow: none; }
+ .login-dialog .modal-dialog-button:default:focus,
+ .unlock-dialog .modal-dialog-button:default:focus {
+ box-shadow: inset 0 0 0 2px #629fea; }
+ .login-dialog .modal-dialog-button:default:hover, .login-dialog .modal-dialog-button:default:focus,
+ .unlock-dialog .modal-dialog-button:default:hover,
+ .unlock-dialog .modal-dialog-button:default:focus {
+ background-color: #4b92e7;
+ color: white; }
+ .login-dialog .modal-dialog-button:default:active,
+ .unlock-dialog .modal-dialog-button:default:active {
+ background-color: #1d72d8;
+ color: #ededed; }
+ .login-dialog .modal-dialog-button:default:insensitive,
+ .unlock-dialog .modal-dialog-button:default:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0);
+ background-color: rgba(53, 132, 228, 0.5);
+ color: rgba(255, 255, 255, 0.5); }
+ .login-dialog .cancel-button,
+ .login-dialog .switch-user-button,
+ .login-dialog .login-dialog-session-list-button,
+ .unlock-dialog .cancel-button,
+ .unlock-dialog .switch-user-button,
+ .unlock-dialog .login-dialog-session-list-button {
+ padding: 0;
+ border-radius: 99px;
+ width: 2.18em;
+ height: 2.18em;
+ border-color: #242424;
+ background-color: #242424; }
+ .login-dialog .cancel-button StIcon,
+ .login-dialog .switch-user-button StIcon,
+ .login-dialog .login-dialog-session-list-button StIcon,
+ .unlock-dialog .cancel-button StIcon,
+ .unlock-dialog .switch-user-button StIcon,
+ .unlock-dialog .login-dialog-session-list-button StIcon {
+ icon-size: 1.09em; }
+ .login-dialog .caps-lock-warning-label,
+ .login-dialog .login-dialog-message-warning,
+ .unlock-dialog .caps-lock-warning-label,
+ .unlock-dialog .login-dialog-message-warning {
+ color: white; }
+
+.login-dialog-logo-bin {
+ padding: 24px 0px; }
+
+.login-dialog-banner {
+ color: #e6e6e6; }
+
+.login-dialog-button-box {
+ width: 23em;
+ spacing: 5px; }
+
+.login-dialog-message {
+ text-align: center; }
+
+.login-dialog-user-selection-box {
+ padding: 100px 0px; }
+
+.login-dialog-not-listed-label {
+ padding-left: 2px; }
+ .login-dialog-not-listed-button:focus .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
+ color: white; }
+
+.login-dialog-not-listed-label {
+ font-weight: bold;
+ color: #b3b3b3;
+ padding-top: 1em; }
+
+.login-dialog-auth-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em; }
+
+.login-dialog-auth-list-title {
+ margin-left: 2em; }
+
+.login-dialog-auth-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #b3b3b3; }
+ .login-dialog-auth-list-item:focus, .login-dialog-auth-list-item:selected {
+ background-color: #3584e4;
+ color: #ffffff; }
+
+.login-dialog-auth-list-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .login-dialog-auth-list-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .login-dialog-auth-list-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
+.login-dialog-user-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-user-list {
+ spacing: 12px;
+ width: 23em; }
+ .login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
+ background-color: #3584e4;
+ color: #ffffff; }
+ .login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
+ border-right: 2px solid #3584e4; }
+
+.login-dialog-user-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #b3b3b3; }
+ .login-dialog-user-list-item:ltr .user-widget {
+ padding-right: 1em; }
+ .login-dialog-user-list-item:rtl .user-widget {
+ padding-left: 1em; }
+ .login-dialog-user-list-item .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: 6px;
+ background-color: white; }
+ .login-dialog-user-list-item:focus .login-dialog-timed-login-indicator {
+ background-color: #ffffff; }
+
+.user-widget-label {
+ color: white; }
+
+.user-widget.horizontal .user-widget-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .user-widget.horizontal .user-widget-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .user-widget.horizontal .user-widget-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
+.user-widget.vertical .user-widget-label {
+ font-size: 16pt;
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px; }
+
+.login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: #999999; }
+
+.login-dialog-prompt-layout {
+ padding-top: 24px;
+ padding-bottom: 12px;
+ spacing: 12px;
+ width: 23em; }
+
+.login-dialog-prompt-entry {
+ height: 1.5em; }
+
+.login-dialog-prompt-label {
+ color: #cccccc;
+ font-size: 12pt;
+ padding-top: 1em; }
+
+.login-dialog StEntry {
+ background-color: #242424;
+ color: white; }
+
+.unlock-dialog StEntry {
+ border: none !important; }
+ .unlock-dialog StEntry:focus {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .unlock-dialog StEntry:insensitive {
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05); }
+
+.unlock-dialog .cancel-button,
+.unlock-dialog .switch-user-button,
+.unlock-dialog .login-dialog-session-list-button {
+ border-color: transparent;
+ background-color: rgba(255, 255, 255, 0.1); }
+
+/* Screen Shield */
+.unlock-dialog-clock {
+ color: white;
+ font-weight: 300;
+ text-align: center;
+ spacing: 24px;
+ padding-bottom: 2.5em; }
+
+.unlock-dialog-clock-time {
+ font-size: 64pt;
+ padding-top: 42px; }
+
+.unlock-dialog-clock-date {
+ font-size: 16pt;
+ font-weight: normal; }
+
+.unlock-dialog-clock-hint {
+ font-weight: normal;
+ padding-top: 48px; }
+
+.unlock-dialog-notifications-container {
+ margin: 12px;
+ spacing: 6px;
+ width: 23em;
+ background-color: transparent; }
+ .unlock-dialog-notifications-container .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0; }
+ .unlock-dialog-notifications-container .notification,
+ .unlock-dialog-notifications-container .unlock-dialog-notification-source {
+ padding: 12px 16px;
+ border: none;
+ background-color: rgba(255, 255, 255, 0.1);
+ color: white;
+ border-radius: 16px; }
+ .unlock-dialog-notifications-container .notification.critical,
+ .unlock-dialog-notifications-container .unlock-dialog-notification-source.critical {
+ background-color: rgba(255, 255, 255, 0.2); }
+
+.unlock-dialog-notification-label {
+ padding-left: 12px;
+ padding-right: 0; }
+ .unlock-dialog-notification-label:rtl {
+ padding-right: 12px;
+ padding-left: 0; }
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 12px;
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: 99px; }
+
+.screen-shield-background {
+ background: black;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.6); }
+
+#lockDialogGroup {
+ background-color: #2b2b2b; }
+
+#unlockDialogNotifications StButton#vhandle, #unlockDialogNotifications StButton#hhandle {
+ background-color: rgba(0, 0, 0, 0.3); }
+ #unlockDialogNotifications StButton#vhandle:hover, #unlockDialogNotifications StButton#vhandle:focus, #unlockDialogNotifications StButton#hhandle:hover, #unlockDialogNotifications StButton#hhandle:focus {
+ background-color: rgba(0, 0, 0, 0.5); }
+ #unlockDialogNotifications StButton#vhandle:active, #unlockDialogNotifications StButton#hhandle:active {
+ background-color: rgba(53, 132, 228, 0.5); }
+
+stage {
+ -st-icon-style: symbolic; }
+
+.toggle-switch {
+ width: 48px; }
+
+.toggle-switch {
+ background-image: url("resource:///org/gnome/shell/theme/toggle-off-hc.svg"); }
+ .toggle-switch:checked {
+ background-image: url("resource:///org/gnome/shell/theme/toggle-on-hc.svg"); }
+
+#panel.login-screen, #panel.unlock-screen, #panel:overview {
+ background-color: #000; }
+
+#panel .panel-button {
+ color: #fff !important; }
+
+.window-picker .icon-dropshadow {
+ icon-shadow: none;
+ background-color: #000;
+ padding: 12px;
+ border-radius: 16px; }
diff --git a/data/theme/gnome-shell-high-contrast.scss b/data/theme/gnome-shell-high-contrast.scss
new file mode 100644
index 0000000..55745f1
--- /dev/null
+++ b/data/theme/gnome-shell-high-contrast.scss
@@ -0,0 +1,38 @@
+$variant: 'dark';
+
+@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
+
+//force symbolic icons
+stage {
+ -st-icon-style: symbolic;
+}
+
+.toggle-switch { width: 48px; }
+.toggle-switch {
+ background-image: url("resource:///org/gnome/shell/theme/toggle-off-hc.svg");
+ &:checked { background-image: url("resource:///org/gnome/shell/theme/toggle-on-hc.svg"); }
+}
+
+//force opaque panel
+#panel {
+ &.login-screen,
+ &.unlock-screen,
+ &:overview {
+ background-color: #000;
+ }
+
+ .panel-button {
+ color: #fff !important;
+ }
+}
+
+//thumbnail app icons no dropshadow and forced color
+.window-picker .icon-dropshadow {
+ icon-shadow: none;
+ background-color: $osd_bg_color;
+ padding: $base_padding * 2;
+ border-radius: $modal_radius;
+}
diff --git a/data/theme/gnome-shell-sass/COPYING b/data/theme/gnome-shell-sass/COPYING
new file mode 100644
index 0000000..e55e5b8
--- /dev/null
+++ b/data/theme/gnome-shell-sass/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc. <http://fsf.org>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) 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
+this service 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 make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. 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.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+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
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the 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 a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE 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.
+
+ 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
+convey 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision 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, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This 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 Library General
+Public License instead of this License.
diff --git a/data/theme/gnome-shell-sass/NEWS b/data/theme/gnome-shell-sass/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/data/theme/gnome-shell-sass/NEWS
diff --git a/data/theme/gnome-shell-sass/README.md b/data/theme/gnome-shell-sass/README.md
new file mode 100644
index 0000000..443b4dc
--- /dev/null
+++ b/data/theme/gnome-shell-sass/README.md
@@ -0,0 +1,16 @@
+# GNOME Shell Sass
+GNOME Shell Sass is a project intended to allow the sharing of the
+theme sources in sass between gnome-shell and other projects like
+gnome-shell-extensions.
+
+Any changes should be done in the [GNOME Shell subtree][shell-subtree]
+and not the stand-alone [gnome-shell-sass repository][sass-repo]. They
+will then be synchronized periodically before releases.
+
+## License
+GNOME Shell Sass is distributed under the terms of the GNU General Public
+License, version 2 or later. See the [COPYING][license] file for details.
+
+[shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/HEAD/data/theme/gnome-shell-sass
+[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
+[license]: COPYING
diff --git a/data/theme/gnome-shell-sass/_colors.scss b/data/theme/gnome-shell-sass/_colors.scss
new file mode 100644
index 0000000..b83b1ed
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_colors.scss
@@ -0,0 +1,75 @@
+// When color definition differs for dark and light variant,
+// it gets @if-ed depending on $variant
+
+@import '_palette.scss';
+
+$is_highcontrast: "false";
+
+$_dark_base_color: darken(desaturate(#241f31, 100%), 2%);
+
+$base_color: if($variant == 'light', #fff, $_dark_base_color);
+$bg_color: if($variant == 'light', #f6f5f4, lighten($base_color, 5%));
+$fg_color: if($variant == 'light', transparentize(black, .2), white);
+
+$selected_fg_color: #fff;
+$selected_bg_color: #3584e4;
+$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
+
+$borders_color: if($variant == 'light', transparentize($fg_color, .5), transparentize($fg_color, .9));
+$borders_edge: if($variant == 'light', rgba(255,255,255,0.8), lighten($bg_color, 5%));
+
+$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
+$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
+
+$warning_color: if($variant == 'light', $yellow_5, #cd9309);
+$error_color: if($variant == 'light', $red_3, $red_4);
+$success_color: if($variant == 'light', $green_4, $green_5);
+$destructive_color: $error_color;
+
+$osd_fg_color: white;
+$osd_bg_color: $_dark_base_color; //hardcoded for both light & dark
+$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
+$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
+$osd_borders_color: transparentize(black, 0.3);
+$osd_outer_borders_color: transparentize($osd_fg_color, 0.98);
+
+$shadow_color: if($variant == 'light', rgba(0,0,0,0.1), rgba(0,0,0,0.2));
+
+// button
+$button_mix_factor: 5%;
+
+// cards
+$card_bg_color: if($variant == 'light', darken($bg_color, 5%), lighten($bg_color, 2%));
+$card_outer_borders_color: transparentize($fg_color, 0.98);
+
+// notifications
+$bubble_buttons_color: if($variant == 'light', darken($bg_color, 12%), lighten($bg_color, 10%));
+
+// overview background color
+$system_bg_color: $base_color;
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: mix($borders_color, $base_color, 60%);
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: if($variant =='light', darken($base_color,1%), lighten($base_color,1%));
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: if($variant =='light', darken($backdrop_bg_color,15%), lighten($backdrop_bg_color,15%));
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
+
+
+// derived checked colors
+$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 7%));
+$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 7%));
+
+// derived hover colors
+$hover_bg_color: if($variant=='light', darken($bg_color, 3%), lighten($bg_color, 10%));
+$hover_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 10%));
+
+// derived active colors
+$active_bg_color: if($variant=='light', darken($bg_color, 5%), lighten($bg_color, 12%));
+$active_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 12%));
diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
new file mode 100644
index 0000000..9ca89d1
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -0,0 +1,222 @@
+//This is the RIGHT PLACE to edit the stylesheet
+
+//let's start by telling people not to edit the generated CSS:
+$cakeisalie: "This stylesheet is generated, DO NOT EDIT";
+/* #{$cakeisalie} */
+
+/* Copyright 2009, 2015 Red Hat, Inc.
+ *
+ * Portions adapted from Mx's data/style/default.css
+ * Copyright 2009 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Global Values */
+
+// padding, margin and spacing
+$base_padding: 6px;
+$base_margin: 4px;
+
+// border radii
+$base_border_radius: 8px;
+
+// radii of things that display over other things, e.g. popovers
+$modal_radius: $base_border_radius*2; // 24px
+
+// Chroma key to flag when a background-color is always occluded, not visible.
+// This allows any box-shadow behind it to be rendered more efficiently by
+// omitting the middle rectangle.
+$invisible_occluded_bg_color: rgba(3,2,1,0);
+
+// fonts
+$base_font_size: 11;
+$text_shadow_color: if($variant == 'light', rgba(255,255,255,0.3), rgba(0,0,0,0.2));
+
+// icons
+$base_icon_size: 1.09em;
+$large_icon_size: $base_icon_size*2; // 32px
+// $base_icon_size: 16px;
+
+// Stage
+stage {
+ @include fontsize($base_font_size);
+ color: $fg_color;
+}
+
+/* Common Stylings */
+
+// osd panels
+%osd_panel {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border: 1px solid $osd_outer_borders_color;
+ border-radius: 999px;
+ padding: $base_padding*2;
+}
+
+// Overview panels
+// for the dash and workspace switcher
+%overview_panel {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+}
+
+// icon tiles
+%tile {
+ border-radius: $base_border_radius * 2; // 16px
+ padding: $base_padding;
+ spacing: $base_padding;
+ border: 2px solid transparent;
+ transition-duration: 200ms;
+ text-align: center;
+}
+
+// dialogs
+%bubble_panel {
+ color: $fg_color;
+ background-color: $bg_color;
+ border-radius: $base_border_radius*1.25 + 1px;
+ border: 1px solid $borders_edge;
+}
+
+// normal button styling
+%button {
+ border-radius: $base_border_radius - 2px; // 6px
+ border-style: solid;
+ border-width: 1px;
+ font-weight: bold;
+ padding: $base_padding*.5 $base_padding*4;
+
+ @include button(normal);
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover);}
+ &:insensitive { @include button(insensitive);}
+ &:active { @include button(active);}
+ &:checked { @include button(checked);}
+
+ &.flat {
+ @include button(normal, $flat:true);
+ &:focus { @include button(focus, $flat:true);}
+ &:hover { @include button(hover, $flat:true);}
+ &:insensitive { @include button(insensitive, $flat:true);}
+ &:active { @include button(active, $flat:true);}
+ &:checked { @include button(checked, $flat:true);}
+ }
+}
+
+// buttons in dialogs/notifications
+// lighter in color and have a greater radius
+
+$bubble_button_radius:$base_border_radius*1.25;
+
+%bubble_button {
+ padding: $base_padding * 2;
+ font-weight: bold !important;
+
+ &:ltr {margin-right: 1px;}
+ &:rtl {margin-left: 1px;}
+
+ @include button(normal, $c:$bubble_buttons_color);
+ &:insensitive { @include button(insensitive, $c:$bubble_buttons_color);}
+ &:focus { @include button(focus, $c:$bubble_buttons_color);}
+ &:hover { @include button(hover, $c:$bubble_buttons_color);}
+ &:active { @include button(active, $c:$bubble_buttons_color);}
+ &:checked { @include button(checked, $c:$bubble_buttons_color);}
+
+ &:first-child:ltr {
+ border-radius: 0 0 0 $bubble_button_radius;
+ }
+
+ &:last-child:ltr {
+ border-radius: 0 0 $bubble_button_radius 0;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:rtl {
+ border-radius: 0 0 $bubble_button_radius 0;
+ }
+
+ &:last-child:rtl {
+ border-radius: 0 0 0 $bubble_button_radius;
+ margin-left: 0 !important;
+ }
+
+ &:first-child:last-child {
+ border-radius: 0 0 $bubble_button_radius $bubble_button_radius !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+}
+
+// buttons on OSD elements
+// that are undecorated by default and use OSD colors
+%osd_button {
+ @include button(undecorated);
+ &:insensitive { @include button(undecorated, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:focus { @include button(focus, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:hover { @include button(hover, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:active { @include button(active, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:outlined,&:checked { @include button(checked, $tc:$osd_fg_color, $c:$osd_bg_color);}
+}
+
+/* General Typography */
+
+%large_title {
+ font-weight: 300;
+ @include fontsize(24);
+}
+
+%title_1 {
+ font-weight: 800;
+ @include fontsize(20);
+}
+
+%title_2 {
+ font-weight: 800;
+ @include fontsize(15);
+}
+
+%title_3 {
+ font-weight: 700;
+ @include fontsize(15);
+}
+
+%title_4 {
+ font-weight: 700;
+ @include fontsize(13);
+}
+
+%heading {
+ font-weight: 700;
+ @include fontsize(11);
+}
+
+%caption_heading {
+ font-weight: 700;
+ @include fontsize(9);
+}
+
+%caption {
+ font-weight: 400;
+ @include fontsize(9);
+}
+
+%smaller {
+ font-weight: 400;
+ @include fontsize(8);
+}
+
+%monospace {font-family: monospace;}
+%numeric { font-feature-settings: "tnum";}
diff --git a/data/theme/gnome-shell-sass/_drawing.scss b/data/theme/gnome-shell-sass/_drawing.scss
new file mode 100644
index 0000000..7c8959e
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_drawing.scss
@@ -0,0 +1,336 @@
+// Drawing mixins
+
+// generic drawing of more complex things
+
+@function draw_widget_edge($c:$borders_edge) {
+// outer highlight "used" on most widgets
+ @return 0 1px $c;
+}
+
+// provide font size in rem, with px fallback
+@mixin fontsize($size: 24, $base: 16) {
+ font-size: round($size) + pt;
+ //font-size: ($size / $base) * 1rem;
+}
+
+@mixin draw_shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
+//
+// Helper function to stack up to 4 box-shadows;
+//
+ @if $shadow4!=none { box-shadow: $shadow1, $shadow2, $shadow3, $shadow4; }
+ @else if $shadow3!=none { box-shadow: $shadow1, $shadow2, $shadow3; }
+ @else if $shadow2!=none { box-shadow: $shadow1, $shadow2; }
+ @else { box-shadow: $shadow1; }
+}
+
+// entries
+
+@mixin entry($t, $fc:$selected_bg_color) {
+//
+// Entries drawing function
+//
+// $t: entry type
+// $fc: focus color
+//
+// possible $t values:
+// normal, focus, insensitive
+//
+
+ @if $t==normal {
+ background-color: lighten($bg_color, 5%);
+ color: transparentize($fg_color,0.3);
+ border: 2px solid lighten($bg_color, 5%);
+ }
+
+ @if $t==focus {
+ background-color: mix(lighten($bg_color, 5%), $selected_bg_color, 95%);
+ border-color: $fc;
+ color: $fg_color;
+ &:hover {}
+ }
+
+ @if $t==hover {
+ background-color:lighten($hover_bg_color, 5%);
+ border-color:lighten($hover_bg_color, 5%);
+ color: transparentize($fg_color,0.3);
+ }
+
+ @if $t==insensitive {
+ background-color:lighten($insensitive_bg_color, 5%);
+ border-color: lighten($insensitive_bg_color, 5%);
+ color: $insensitive_fg_color;
+ }
+}
+
+// On-screen Keyboard
+@mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) {
+//
+// Keyboard key drawing function
+//
+// $t: key type,
+// $c: base key color for colored* types
+// $tc: optional text color for colored* types
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+
+ // normal key
+ @if $t==normal {
+ color: $tc;
+ background-color: lighten($c, 3%);
+ }
+
+ // focused key
+ @if $t==focus {
+ color: $tc;
+ background-color: mix(lighten($c, 3%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ &:hover {
+ background-color: mix(lighten($c, 8%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ &:active {
+ background-color: mix(lighten($c, 10%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ }
+
+ // hover key
+ @else if $t==hover {
+ color: $tc;
+ background-color: lighten($c, 7%);
+ }
+
+ // active key
+ @else if $t==active {
+ color: $tc;
+ background-color: lighten($c, 10%);
+ }
+
+ // checked key
+ @else if $t==checked {
+ color: $tc;
+ background-color: lighten($c, 15%);
+ }
+
+ // insensitive key
+ @else if $t==insensitive {
+ color: $insensitive_fg_color;
+ background-color: $insensitive_bg_color;
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-image: none;
+ }
+}
+
+//
+// Button drawing function
+//
+// $t: button type,
+// $c: base button colors, derived from fg_color
+// $tc: base button colors, derived from fg_color
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+// since buttons are all flat an borderless now the mixin is simpler
+
+@mixin button($t, $tc:$fg_color, $c:$bg_color, $flat: false) {
+
+ $button_bg_color: mix($tc, $c, $button_mix_factor);
+ transition-duration: 100ms;
+
+ // normal button
+ @if $t==normal {
+ color: $tc;
+ background-color: $button_bg_color;
+ @if $flat {
+ background-color: transparent;
+ }
+ @if $is_highcontrast == "true" {
+ box-shadow: inset 0 0 0 1px $button_inset_color;
+ }
+ }
+
+ // focused button
+ @if $t==focus {
+ color: $tc;
+ background-color: mix($button_bg_color, $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4) !important;
+ &:hover {
+ background-color: mix(lighten($button_bg_color, 3%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3) !important;
+ }
+ &:active {
+ background-color: mix(lighten($button_bg_color, 6%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3) !important;
+ }
+ }
+
+ // hover button
+ @else if $t==hover {
+ color: $tc;
+ background-color: lighten($button_bg_color, 3%);
+
+ @if $is_highcontrast == "true" {
+ box-shadow: inset 0 0 0 1px lighten($button_inset_color, 3%);
+ background-color: mix(lighten($button_bg_color, 3%), $button_inset_color, 10%);
+ }
+ }
+
+ // active button
+ @else if $t==active {
+ color: $tc;
+ background-color: lighten($button_bg_color, 6%);
+ @if $is_highcontrast == "true" {
+ box-shadow: inset 0 0 0 1px lighten($button_inset_color, 6%);
+ background-color: mix(lighten($button_bg_color, 6%), $button_inset_color, 10%);
+ }
+ }
+
+ // checked button
+ @else if $t==checked {
+ color: $tc;
+ background-color: lighten($button_bg_color, 9%);
+ @if $is_highcontrast == "true" {
+ box-shadow: inset 0 0 0 1px lighten($button_inset_color, 9%);
+ background-color: mix(lighten($button_bg_color, 9%), $button_inset_color, 10%);
+ }
+ &:hover { background-color: lighten($button_bg_color, 12%);}
+ &:active { background-color: lighten($button_bg_color, 15%);}
+ }
+
+ // insensitive button
+ @else if $t==insensitive {
+ color: transparentize($tc, 0.5);
+ background-color: transparentize($tc, .95);
+ @if $is_highcontrast == "true" {
+ box-shadow: inset 0 0 0 1px transparentize($button_inset_color, 0.5);
+ }
+ }
+
+ // default/suggested button
+ @else if $t==default {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ box-shadow: none;
+ &:focus {
+ box-shadow: inset 0 0 0 2px lighten($selected_bg_color, 10%);
+ }
+ &:hover, &:focus {
+ background-color: lighten($selected_bg_color, 5%);
+ color: lighten($selected_fg_color, 5%);
+ }
+ &:active {
+ background-color: darken($selected_bg_color, 7%);
+ color: darken($selected_fg_color, 7%);
+ }
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparentize($selected_bg_color, .5);
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none;
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparent;
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+}
+
+// tile
+@mixin tile_button($color, $flat: true) {
+ @extend %tile;
+ @if $flat {
+ background-color: transparent;
+ } @else {
+ background-color: transparentize($color, .84);
+ }
+ &:hover { background-color: transparentize($color, .9);}
+ &:selected, &:focus {
+ background-color: transparentize($color, .87);
+ &:hover { background-color: transparentize($color, .84);}
+ &:active { background-color: transparentize($color, .87);}
+ }
+ &:active { background-color: transparentize($color, .84);}
+ &:outlined, &:checked {
+ background-color: transparentize($color, .81);
+ &:active { background-color: transparentize($color, .78);}
+ &:hover { background-color: transparentize($color, .75);}
+ }
+ &:drop {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+}
+
+// overview icon, dash, app grid
+@mixin overview_icon($color, $flat: true) {
+ transition-duration: 400ms;
+ .overview-icon { @extend %tile; }
+ @if $flat {
+ .overview-icon { background-color: transparent;}
+ } @else {
+ .overview-icon { background-color: transparentize($color, .81);}
+ }
+ &:hover .overview-icon { background-color: transparentize($color, .9);}
+
+ &:selected .overview-icon,
+ &:focus .overview-icon {
+ background-color: transparentize($color, .87);
+ &:hover .overview-icon { background-color: transparentize($color, .84);}
+ &:active .overview-icon { background-color: transparentize($color, .87);}
+ }
+ &:active .overview-icon { background-color: transparentize($color, .84);}
+ &:outlined .overview-icon,
+ &:checked .overview-icon {
+ background-color: transparentize($color, .81);
+ &:active .overview-icon { background-color: transparentize($color, .78);}
+ &:hover .overview-icon { background-color: transparentize($color, .75);}
+ }
+ &:drop .overview-icon {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+}
+
+// styling for elements within popovers that look like notifications
+@mixin card($flat: false) {
+ border-radius: $base_border_radius;
+ margin: $base_margin;
+ box-shadow: inset 0 0 0 1px $card_outer_borders_color;
+
+ @if $flat {
+ @include button(undecorated);
+ box-shadow: none !important;
+ } @else {
+ @include button(normal, $c:$card_bg_color);
+ }
+
+ &:focus {
+ @include button(focus, $c:$card_bg_color);
+ }
+
+ &:hover {
+ @include button(hover, $c:$card_bg_color);
+ }
+
+ &:active {
+ @include button(active, $c:$card_bg_color);
+ }
+}
diff --git a/data/theme/gnome-shell-sass/_high-contrast-colors.scss b/data/theme/gnome-shell-sass/_high-contrast-colors.scss
new file mode 100644
index 0000000..15fdec3
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_high-contrast-colors.scss
@@ -0,0 +1,72 @@
+// When color definition differs for dark and light variant,
+// it gets @if ed depending on $variant
+
+@import '_palette.scss';
+
+$is_highcontrast: 'true';
+
+$base_color: if($variant == 'light', #fff, #000);
+$bg_color: $base_color;
+$fg_color: if($variant == 'light', transparentize(black, .2), white);
+
+$selected_fg_color: #ffffff;
+$selected_bg_color: $blue_3;
+
+$selected_borders_color: darken($selected_bg_color, 20%);
+$borders_color: lighten($bg_color,17%);
+$borders_edge: $borders_color;
+$link_color: lighten($selected_bg_color,20%);
+$link_visited_color: lighten($selected_bg_color,10%);
+
+$warning_color: if($variant == 'light', $yellow_5, #cd9309);
+$error_color: if($variant == 'light', $red_3, $red_4);
+$success_color: if($variant == 'light', $green_4, $green_5);
+$destructive_color: $error_color;
+
+$osd_fg_color: white;
+$osd_bg_color: $base_color;
+$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
+$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
+$osd_borders_color: $osd_bg_color;
+$osd_outer_borders_color: $osd_bg_color;
+
+$shadow_color: transparent;
+
+// button
+$button_inset_color: transparentize($fg_color, 0.8);
+$button_mix_factor: 10%;
+
+// cards
+$card_bg_color: if($variant == 'light', darken($bg_color, 12%), lighten($bg_color, 12%));
+$card_outer_borders_color: $card_bg_color;
+
+// notifications
+$bubble_buttons_color: if($variant == 'light', darken($bg_color, 22%), lighten($bg_color, 31%));
+
+// overview background color
+$system_bg_color: lighten($base_color, 17%);
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: lighten($base_color,1%);
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: lighten($backdrop_bg_color,15%);
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
+
+// derived checked colors
+$checked_bg_color: if($variant=='light', darken($bg_color, 12%), lighten($bg_color, 18%));
+$checked_fg_color: if($variant=='light', darken($fg_color, 12%), lighten($fg_color, 18%));
+
+// derived hover colors
+$hover_bg_color: if($variant=='light', darken($bg_color, 8%), lighten($bg_color, 20%));
+$hover_fg_color: if($variant=='light', darken($fg_color, 10%), lighten($fg_color, 20%));
+
+// derived active colors
+$active_bg_color: if($variant=='light', darken($bg_color, 10%), lighten($bg_color, 22%));
+$active_fg_color: if($variant=='light', darken($fg_color, 10%), lighten($fg_color, 22%));
diff --git a/data/theme/gnome-shell-sass/_palette.scss b/data/theme/gnome-shell-sass/_palette.scss
new file mode 100644
index 0000000..78847d9
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_palette.scss
@@ -0,0 +1,46 @@
+//GNOME Color Palette
+$blue_1: #99c1f1;
+$blue_2: #62a0ea;
+$blue_3: #3584e4;
+$blue_4: #1c71d8;
+$blue_5: #1a5fb4;
+$green_1: #8ff0a4;
+$green_2: #57e389;
+$green_3: #33d17a;
+$green_4: #2ec27e;
+$green_5: #26a269;
+$yellow_1: #f9f06b;
+$yellow_2: #f8e45c;
+$yellow_3: #f6d32d;
+$yellow_4: #f5c211;
+$yellow_5: #e5a50a;
+$orange_1: #ffbe6f;
+$orange_2: #ffa348;
+$orange_3: #ff7800;
+$orange_4: #e66100;
+$orange_5: #c64600;
+$red_1: #f66151;
+$red_2: #ed333b;
+$red_3: #e01b24;
+$red_4: #c01c28;
+$red_5: #a51d2d;
+$purple_1: #dc8add;
+$purple_2: #c061cb;
+$purple_3: #9141ac;
+$purple_4: #813d9c;
+$purple_5: #613583;
+$brown_1: #cdab8f;
+$brown_2: #b5835a;
+$brown_3: #986a44;
+$brown_4: #865e3c;
+$brown_5: #63452c;
+$light_1: #ffffff;
+$light_2: #f6f5f4;
+$light_3: #deddda;
+$light_4: #c0bfbc;
+$light_5: #9a9996;
+$dark_1: #77767b;
+$dark_2: #5e5c64;
+$dark_3: #3d3846;
+$dark_4: #241f31;
+$dark_5: #000000; \ No newline at end of file
diff --git a/data/theme/gnome-shell-sass/_widgets.scss b/data/theme/gnome-shell-sass/_widgets.scss
new file mode 100644
index 0000000..a09e0b5
--- /dev/null
+++ b/data/theme/gnome-shell-sass/_widgets.scss
@@ -0,0 +1,51 @@
+//
+// Shell widgets stylesheets are placed in separate .scss files
+// in 'widgets' and imported into the main stylesheet in this file.
+// To create or update a widget for the shell modify the list below.
+//
+
+/* WIDGETS */
+
+// Primary widgets
+@import 'widgets/base';
+@import 'widgets/entries';
+@import 'widgets/buttons';
+@import 'widgets/check-box';
+@import 'widgets/switches';
+@import 'widgets/slider';
+@import 'widgets/scrollbars';
+// Popovers
+@import 'widgets/popovers';
+@import 'widgets/calendar';
+@import 'widgets/message-list';
+@import 'widgets/ibus-popup';
+// Notifications
+@import 'widgets/notifications';
+@import 'widgets/hotplug';
+// Dialogs
+@import 'widgets/dialogs';
+// OSDs
+@import 'widgets/osd';
+@import 'widgets/switcher-popup';
+@import 'widgets/workspace-switcher';
+@import 'widgets/screenshot';
+// Panel
+@import 'widgets/panel';
+@import 'widgets/corner-ripple';
+@import 'widgets/quick-settings';
+// Overview
+@import 'widgets/overview';
+@import 'widgets/window-picker';
+@import 'widgets/search-entry';
+@import 'widgets/search-results';
+@import 'widgets/dash';
+@import 'widgets/app-grid';
+@import 'widgets/workspace-thumbnails';
+// A11y / misc
+@import 'widgets/a11y';
+@import 'widgets/misc';
+@import 'widgets/keyboard';
+@import 'widgets/looking-glass';
+// Lock / login screens
+@import 'widgets/login-dialog';
+@import 'widgets/screen-shield';
diff --git a/data/theme/gnome-shell-sass/gnome-shell-sass.doap b/data/theme/gnome-shell-sass/gnome-shell-sass.doap
new file mode 100644
index 0000000..f18ec1b
--- /dev/null
+++ b/data/theme/gnome-shell-sass/gnome-shell-sass.doap
@@ -0,0 +1,37 @@
+<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:gnome="http://api.gnome.org/doap-extensions#"
+ xmlns="http://usefulinc.com/ns/doap#">
+
+ <name xml:lang="en">GNOME Shell Sass</name>
+ <shortdesc xml:lang="en">Sass sources of GNOME Shell</shortdesc>
+ <description>GNOME Shell Sass is a project intended to allow the sharing of the
+ sass theme sources between gnome-shell and other projects like gnome-shell-extensions.</description>
+
+ <category rdf:resource="http://api.gnome.org/doap-extensions#core" />
+ <programming-language>sass</programming-language>
+ <programming-language>css</programming-language>
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Carlos Soriano</foaf:name>
+ <foaf:mbox rdf:resource="mailto:csoriano@gnome.org" />
+ <gnome:userid>csoriano</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Florian Müllner</foaf:name>
+ <foaf:mbox rdf:resource="mailto:fmuellner@gnome.org" />
+ <gnome:userid>fmuellner</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Jakub Steiner</foaf:name>
+ <foaf:mbox rdf:resource="mailto:jimmac@gmail.com" />
+ <gnome:userid>jimmac</gnome:userid>
+ </foaf:Person>
+ </maintainer>
+</Project>
diff --git a/data/theme/gnome-shell-sass/widgets/_a11y.scss b/data/theme/gnome-shell-sass/widgets/_a11y.scss
new file mode 100644
index 0000000..31b5c4b
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_a11y.scss
@@ -0,0 +1,24 @@
+// Pointer location
+.ripple-pointer-location {
+ width: $ripple_size;
+ height: $ripple_size;
+ border-radius: $ripple_size * 0.5; // radius equals the size of the box to give us the curve
+ background-color: lighten(transparentize($selected_bg_color, 0.7), 30%);
+ box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
+}
+
+// Pointer accessibility notifications
+.pie-timer {
+ width: 60px;
+ height: 60px;
+ -pie-border-width: 3px;
+ -pie-border-color: $selected_bg_color;
+ -pie-background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
+}
+
+// Screen zoom/Magnifier
+.magnifier-zoom-region {
+ border: 2px solid $selected_bg_color;
+
+ &.full-screen { border-width: 0; }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_app-grid.scss b/data/theme/gnome-shell-sass/widgets/_app-grid.scss
new file mode 100644
index 0000000..9da650c
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_app-grid.scss
@@ -0,0 +1,161 @@
+/* App Grid */
+
+$app_icon_size: 96px;
+
+// app icons
+.icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 2;
+ max-row-spacing: $base_padding * 7;
+ max-column-spacing: $base_padding * 7;
+ page-padding-top: $base_padding * 4;
+ page-padding-bottom: $base_padding * 4;
+ page-padding-left: $base_padding * 3;
+ page-padding-right: $base_padding * 3;
+}
+
+/* App Icons */
+
+// Icon tiles in the app grid
+.app-well-app {
+ @include overview_icon($osd_fg_color);
+
+ .overview-icon { padding: $base_padding*2;}
+ .overview-icon.overview-icon-with-label {
+ > StBoxLayout {
+ spacing: $base_padding;
+ }
+ }
+}
+
+// app folders
+.app-well-app.app-folder {
+ @include overview_icon($osd_fg_color, $flat: false);
+}
+
+// expanded folder
+.app-folder-dialog {
+ border-radius: $modal_radius*2;
+ background-color: $dash_background_color;
+
+ & .folder-name-container {
+ padding: 24px 36px 0;
+ spacing: 12px;
+
+ & .folder-name-label,
+ & .folder-name-entry {
+ @extend %title_1;
+ }
+
+ & .folder-name-entry { width: 300px }
+
+ /* FIXME: this is to keep the label in sync with the entry */
+ & .folder-name-label { padding: 5px 7px; color: $osd_fg_color; }
+
+ & .edit-folder-button {
+ @extend %button;
+ padding: 0;
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ & > StIcon { icon-size: $base_icon_size }
+ }
+ }
+
+ & .icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 5;
+ page-padding-top: 0;
+ page-padding-bottom: 0;
+ page-padding-left: 0;
+ page-padding-right: 0;
+ }
+
+ & .page-indicators {
+ margin-bottom: 18px;
+ }
+}
+
+.app-folder-dialog-container {
+ padding: $base_padding*2;
+ width: 720px;
+ height: 720px;
+}
+
+// Running app indicator (also shown in dash)
+.app-well-app-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius:5px;
+ margin-bottom: 8px;
+ background-color: $osd_fg_color;
+}
+
+// Rename popup for app folders
+.rename-folder-popup {
+ .rename-folder-popup-item {
+ spacing: $base_padding;
+ &:ltr, &:rtl { padding: 0 $base_padding * 2; }
+ }
+}
+
+// App Grid pagination indicators
+.page-indicator {
+ padding: $base_padding $base_padding * 2 0;
+ transition-duration:400ms;
+
+ .page-indicator-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 10px; // the same as height&width
+ background-color: white;
+ }
+}
+
+.apps-scroll-view {
+ padding: 0;
+}
+
+// shutdown and other actions in the grid
+.system-action-icon {
+ background-color: rgba(0,0,0,0.8);
+ color: #fff;
+ border-radius: 99px;
+ icon-size: $app_icon_size * 0.5;
+}
+
+.page-navigation-hint {
+ &.dnd {
+ background: rgba(255, 255, 255, 0.1);
+ }
+
+ &.next:ltr,
+ &.previous:rtl {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: horizontal;
+ border-radius: $modal_radius*1.5 0px 0px $modal_radius*1.5;
+ }
+
+ &.previous:ltr,
+ &.next:rtl {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: horizontal;
+ border-radius: 0px $modal_radius*1.5 $modal_radius*1.5 0px;
+ }
+}
+
+.page-navigation-arrow {
+ & > StIcon {
+ margin: 6px;
+ padding: 18px;
+ width: 24px;
+ height: 24px;
+ border-radius: 99px;
+ }
+
+ &:insensitive > StIcon { @include button(undecorated, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
+ &:hover > StIcon { @include button(hover, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
+ &:active > StIcon { @include button(active, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_base.scss b/data/theme/gnome-shell-sass/widgets/_base.scss
new file mode 100644
index 0000000..69ebb30
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_base.scss
@@ -0,0 +1,18 @@
+// Links
+.shell-link {
+ color: $link_color;
+
+ &:hover {
+ color: lighten($link_color, 10%);
+ }
+}
+
+// Outline for low res icons
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(black, 0.3);
+}
+
+// Dropshadow for large icons
+.icon-dropshadow {
+ icon-shadow: 0 1px 5px rgba(black, 0.8);
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_buttons.scss b/data/theme/gnome-shell-sass/widgets/_buttons.scss
new file mode 100644
index 0000000..def96fe
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_buttons.scss
@@ -0,0 +1,19 @@
+/* Buttons */
+
+.button {
+ @extend %button; // that's it
+ min-height: 22px;
+}
+
+.icon-button {
+ @extend .button; // same style as buttons
+
+ border-radius: 99px;
+ padding: $base_padding*2;
+ min-height: 16px;
+
+ StIcon {
+ icon-size: $base_icon_size;
+ -st-icon-style: symbolic;
+ }
+} \ No newline at end of file
diff --git a/data/theme/gnome-shell-sass/widgets/_calendar.scss b/data/theme/gnome-shell-sass/widgets/_calendar.scss
new file mode 100644
index 0000000..fa7080b
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_calendar.scss
@@ -0,0 +1,257 @@
+/* Date/Time Menu */
+
+// overall menu
+#calendarArea {
+ padding: $base_padding - 2px;
+}
+
+// Calendar menu side column
+.datemenu-calendar-column {
+ spacing: $base_padding;
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+ .datemenu-displays-box {spacing: $base_padding;}
+}
+
+/* today button (the date) */
+.datemenu-today-button {
+ @include card(flat);
+ padding: $base_padding * 1.5;
+
+ // weekday label
+ .day-label {
+ @extend %heading;
+ }
+
+ // date label
+ .date-label {
+ @extend %title_2;
+ }
+}
+
+/* Calendar */
+.calendar {
+ @include card(flat);
+ margin-top: 0;
+
+ // month header
+ .calendar-month-header {
+
+ // prev/next month icons
+ .calendar-change-month-back StIcon,
+ .calendar-change-month-forward StIcon {
+ icon-size: $base_icon_size;
+ }
+
+ // month label
+ .calendar-month-label {
+ color: lighten($fg_color,5%);
+ @extend %heading;
+ padding: 8px 0;
+ }
+ .pager-button {
+ background-color: transparent;
+ height: 32px;
+ width: 32px;
+ margin: 2px;
+ border-radius: $base_border_radius - 2px;
+ &:hover, &:focus {background-color: $hover_bg_color;}
+ &:active {background-color: $active_bg_color;}
+ }
+ }
+
+ $calendar_day_size: 3em;
+
+ .calendar-day-base {
+ text-align: center;
+ margin: 2px;
+ padding: 0 !important;
+ height: $calendar_day_size !important;
+ width: $calendar_day_size !important;
+ border-radius: 99px;
+ transition-duration: 100ms;
+ @extend %numeric;
+ @extend %smaller;
+
+ &:hover {background-color: $hover_bg_color;}
+ &:focus {
+ background-color: mix($bg_color, $selected_bg_color, 80%);
+ color: $selected_fg_color;
+ box-shadow:inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ }
+
+ &:active,&:selected {
+ color: $active_fg_color;
+ background-color: $active_bg_color;
+ &:focus {
+ background-color: mix($active_bg_color, $selected_bg_color, 80%);
+ }
+ }
+
+ // day of week heading
+ &.calendar-day-heading {
+ color: $insensitive_fg_color;
+ padding-top: $base_padding;
+ height: 16px !important; // force heading to be smaller height
+ font-weight: bold;
+ @extend %smaller;
+ }
+ }
+
+ .calendar-day {}
+ .calendar-work-day {}
+ .calendar-nonwork-day {color: $insensitive_fg_color;}
+ .calendar-other-month-day {
+ color: transparentize($fg_color, 0.5);
+ &.calendar-nonwork-day {
+ color: transparentize($insensitive_fg_color, 0.5);
+ }
+ }
+
+ // Today
+ .calendar-today {
+ background-color: $selected_bg_color;
+ font-weight: 800;
+ color: $selected_fg_color !important;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+
+ &:active,&:selected {
+ background-color: $selected_bg_color;
+ color: inherit;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+ }
+ }
+
+ .calendar-day-with-events {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/calendar-today-light.svg"),url("resource:///org/gnome/shell/theme/calendar-today.svg"));
+ background-size: contain;
+ }
+
+ .calendar-week-number {
+ @include fontsize($base_font_size - 4);
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: 6px;
+ padding: 0 $base_padding;
+ border-radius: 3px;
+ background-color: darken($bg_color, 2%);
+ color: $insensitive_fg_color
+ }
+}
+
+/* Events */
+.events-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .events-box {
+ spacing: $base_padding;
+ }
+
+ .events-list {
+ spacing: 2 * $base_padding;
+ }
+
+ .events-title {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ margin-bottom: $base_margin;
+ }
+
+ .event-time {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* World clocks */
+.world-clocks-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .world-clocks-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ // title
+ .world-clocks-header {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ }
+
+ // city label
+ .world-clocks-city {
+ color: $fg_color;
+ }
+
+ // timezone time
+ .world-clocks-time {
+ @extend %heading;
+ @extend %numeric;
+ color: $fg_color;
+
+ &:ltr {text-align: right;}
+ &:rtl {text-align: left;}
+ }
+
+ // timezone offset label
+ .world-clocks-timezone {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* Weather */
+.weather-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .weather-box {
+ spacing: $base_padding + $base_margin;
+ }
+
+ .weather-header-box {
+ spacing: $base_padding;
+ }
+
+ .weather-header {
+ color: $insensitive_fg_color;
+ @extend %heading;
+
+ &.location {
+ font-weight: normal;
+ }
+ }
+
+ .weather-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ .weather-forecast-time {
+ @extend %numeric;
+ @extend %caption;
+ color: darken($fg_color,30%);
+ padding-top: 0.2em;
+ padding-bottom: 0.4em;
+ }
+
+ .weather-forecast-icon {
+ icon-size: $large_icon_size;
+ }
+
+ .weather-forecast-temp {
+ @extend %heading;
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_check-box.scss b/data/theme/gnome-shell-sass/widgets/_check-box.scss
new file mode 100644
index 0000000..1480ade
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_check-box.scss
@@ -0,0 +1,18 @@
+/* Check Boxes */
+
+// these are equal to the size of the SVG assets
+$check_height: 24px;
+$check_width: 24px;
+
+
+.check-box {
+ StBoxLayout { spacing: .8em; }
+ StBin {
+ width: $check_width;
+ height: $check_height;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off.svg"));
+ }
+ &:focus StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-focused-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"));; }
+ &:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
+ &:focus:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_corner-ripple.scss b/data/theme/gnome-shell-sass/widgets/_corner-ripple.scss
new file mode 100644
index 0000000..9aff431
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_corner-ripple.scss
@@ -0,0 +1,15 @@
+/* Activities Ripple */
+
+$ripple_size: 50px;
+
+.ripple-box {
+ background-color: rgba(255,255,255,0.2);
+ box-shadow: 0 0 2px 2px rgba(255,255,255,0.2);
+ // plus + 2px for the border (box-shadow)
+ width: $ripple_size + 2px;
+ height: $ripple_size + 2px;
+ border-radius: 0 0 $ripple_size + 2px 0; // radius equals the size of the box to give us the curve
+
+ // just a simple change to the border radius position
+ &:rtl { border-radius: 0 0 0 $ripple_size + 2px; }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_dash.scss b/data/theme/gnome-shell-sass/widgets/_dash.scss
new file mode 100644
index 0000000..8f5d5f9
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_dash.scss
@@ -0,0 +1,75 @@
+/* Dash */
+
+$dash_background_color: lighten($system_bg_color, 5%);
+$dash_placeholder_size: 32px;
+$dash_padding: $base_padding*2; // 12px
+$dash_border_radius: $modal_radius + $dash_padding;
+
+// container for the dash
+#dash {
+ @extend %caption;
+ margin-top: $dash_padding;
+
+ .placeholder {
+ // background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
+ background-image:none;
+ background-size: contain;
+ height: $dash_placeholder_size;
+ }
+
+ .empty-dash-drop-target {
+ width: $dash_placeholder_size;
+ height: $dash_placeholder_size;
+ }
+
+ // Running app indicator (also shown in app grid)
+ .app-well-app-running-dot {
+ margin-bottom: 14px; // hardcoded
+ }
+}
+
+// background of the dash behind app icons
+.dash-background {
+ background-color: $dash_background_color;
+ border-radius: $dash_border_radius;
+ padding: $dash_padding;
+ spacing: $base_padding;
+ margin-bottom: $dash_padding;
+}
+
+// items on the dash
+.dash-item-container {
+ > * {margin: 0 2px;}
+ &:ltr:first-child {margin-left: 0;}
+ &:rtl:first-child {margin-right: 0;}
+
+ // each app item on the dash
+ .app-well-app .overview-icon {
+ padding: $base_padding;
+ }
+
+ // show apps button
+ .show-apps { @include overview_icon($osd_fg_color);}
+
+ .show-apps, .app-well-app {
+ padding-bottom: $dash_padding;
+ }
+}
+
+// separator between favourites and running apps
+.dash-separator {
+ width: 1px;
+ margin: 0 $base_margin;
+ background-color: $borders_color;
+ margin-bottom: $dash_padding;
+}
+
+// OSD Tooltip
+.dash-label {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: $base_margin * 2; // distance from the dash edge
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_dialogs.scss b/data/theme/gnome-shell-sass/widgets/_dialogs.scss
new file mode 100644
index 0000000..defa20b
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_dialogs.scss
@@ -0,0 +1,172 @@
+/* Modal Dialogs */
+
+.headline {
+ @extend %title_4;
+}
+
+.modal-dialog {
+ @extend %bubble_panel;
+
+ .modal-dialog-content-box {
+ margin: 32px 40px;
+ spacing: 32px;
+ max-width: 28em;
+ }
+
+ .modal-dialog-linked-button {
+ @extend %bubble_button;
+ }
+}
+
+/* End Session Dialog */
+.end-session-dialog {
+ width: 30em;
+
+ .end-session-dialog-battery-warning,
+ .dialog-list-title {
+ color: $warning_color;
+ }
+}
+
+/* Message Dialog */
+.message-dialog-content {
+ spacing: 18px;
+
+ .message-dialog-title {
+ text-align: center;
+ @extend %title_2;
+
+ &.lightweight { @extend %title_4;}
+ }
+ .message-dialog-description { text-align: center; }
+}
+
+/* Dialog List */
+.dialog-list {
+ spacing: 18px;
+
+ .dialog-list-title {
+ text-align: center;
+ @extend %heading;
+ }
+
+ .dialog-list-scrollview { max-height: 200px; }
+ .dialog-list-box {
+ spacing: 1em;
+
+ .dialog-list-item {
+ spacing: 1em;
+
+ .dialog-list-item-title { font-weight: bold; }
+ .dialog-list-item-description {
+ color: darken($fg_color,5%);
+ @extend %caption;
+ }
+ }
+ }
+}
+
+/* Run Dialog */
+.run-dialog {
+ .modal-dialog-content-box {
+ margin-top: 24px;
+ margin-bottom: 14px;
+ }
+ .run-dialog-entry { width: 20em; }
+ .run-dialog-description {
+ @extend %caption;
+ text-align: center;
+ color: darken($fg_color, 20%);
+ }
+}
+
+/* Password or Authentication Dialog */
+
+.prompt-dialog {
+ width: 28em;
+
+ .modal-dialog-content-box {
+ margin-bottom: 24px;
+ }
+}
+
+.prompt-dialog-password-grid {
+ spacing-rows: 8px;
+ spacing-columns: 4px;
+
+ .prompt-dialog-password-entry {
+ width: auto;
+
+ // 4px (spacing) + 16px (spinner-width)
+ &:ltr { margin-left: 20px; }
+ &:rtl { margin-right: 20px; }
+ }
+}
+
+.prompt-dialog-password-layout {
+ spacing: 8px;
+}
+
+.prompt-dialog-password-entry {
+ width: 20em;
+}
+
+.prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label {
+ text-align: center;
+ @extend %caption;
+}
+
+.prompt-dialog-error-label {
+ color: $warning_color;
+}
+
+
+/* Polkit Dialog */
+
+.polkit-dialog-user-layout {
+ text-align: center;
+ spacing: 8px;
+ margin-bottom: 6px;
+
+ .polkit-dialog-user-root-label { color: $warning_color; }
+}
+
+/* Audio selection dialog */
+.audio-device-selection-dialog {
+ .modal-dialog-content-box { margin-bottom: 28px; }
+ .audio-selection-box { spacing: 20px; }
+}
+
+.audio-selection-device {
+ border-radius: $base_border_radius*2;
+ &:hover,&:focus { background-color: $hover_bg_color; }
+ &:active {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ }
+}
+
+.audio-selection-device-box {
+ padding: 20px;
+ spacing: 20px;
+}
+
+.audio-selection-device-icon {
+ icon-size: $base_icon_size * 4;
+}
+
+/* Welcome dialog */
+.welcome-dialog-image {
+ background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
+ background-size: contain;
+ /* Reasonable maximum dimensions */
+ height: 300px;
+ width: 300px;
+}
+
+/* Access portal dialog */
+.access-dialog {
+ text-align: center;
+} \ No newline at end of file
diff --git a/data/theme/gnome-shell-sass/widgets/_entries.scss b/data/theme/gnome-shell-sass/widgets/_entries.scss
new file mode 100644
index 0000000..6be6760
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_entries.scss
@@ -0,0 +1,31 @@
+/* Entries */
+
+StEntry {
+ border-radius: $base_border_radius;
+ padding: 8px;
+ color: $fg_color;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+
+ StIcon.capslock-warning {
+ icon-size: 16px;
+ warning-color: $warning_color;
+ padding: 0 4px;
+ }
+
+ StIcon.peek-password {
+ icon-size: $base_icon_size;
+ padding: 0 4px;
+ }
+
+ StLabel.hint-text {
+ margin-left: 2px;
+ color: transparentize($fg_color, 0.3);
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_hotplug.scss b/data/theme/gnome-shell-sass/widgets/_hotplug.scss
new file mode 100644
index 0000000..acd0265
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_hotplug.scss
@@ -0,0 +1,10 @@
+// hotplug
+
+.hotplug-notification-item {
+ @extend %bubble_button;
+}
+
+.hotplug-notification-item-icon {
+ icon-size: 24px;
+ padding: 0 4px;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_ibus-popup.scss b/data/theme/gnome-shell-sass/widgets/_ibus-popup.scss
new file mode 100644
index 0000000..8cbaa95
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_ibus-popup.scss
@@ -0,0 +1,39 @@
+// IBus Candidate Popup
+
+.candidate-popup-boxpointer {
+ @extend .popup-menu-boxpointer;
+}
+
+.candidate-popup-content {
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend .popup-menu-content;
+}
+
+.candidate-index {
+ padding: 0;
+ padding-right: $base_padding;
+ color: $insensitive_fg_color;
+}
+
+.candidate-box {
+ padding: $base_padding $base_padding*2 $base_padding $base_padding*2;
+ border-radius: $base_border_radius;
+ &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+ &:hover { background-color: $hover_bg_color; color: $hover_fg_color; }
+}
+
+.candidate-page-button-box {
+ height: 2em;
+ .vertical & { padding-top: $base_padding*2; }
+ .horizontal & { padding-left: $base_padding*2; }
+}
+
+.candidate-page-button {
+ padding: $base_padding;
+
+ & StIcon { icon-size: $base_icon_size; }
+}
+
+.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;}
+.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;}
diff --git a/data/theme/gnome-shell-sass/widgets/_keyboard.scss b/data/theme/gnome-shell-sass/widgets/_keyboard.scss
new file mode 100644
index 0000000..1dc6b95
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_keyboard.scss
@@ -0,0 +1,159 @@
+/* On-screen Keyboard */
+
+$key_size: 1.2em;
+$key_border_radius: $base_border_radius + 4px; // 12px
+$key_bg_color: darken($osd_fg_color, 70%);
+// $default_key_bg_color: darken($key_bg_color, 4%);
+$default_key_bg_color: if($variant=='light', darken($key_bg_color, 11%), darken($key_bg_color, 10%));
+
+
+// draw keys using button function
+#keyboard {
+ // background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1);
+ background-color: $osd_bg_color;
+ box-shadow: inset 0 1px 0 0 $osd_outer_borders_color;
+
+ .page-indicator {
+ padding: $base_padding;
+
+ .page-indicator-icon {
+ width: 8px;
+ height: 8px;
+ }
+ }
+}
+
+// the container for individual keys
+.key-container {
+ padding: $base_margin;
+ spacing: $base_margin;
+}
+
+// the keys
+.keyboard-key {
+
+ @include fontsize($base_font_size + 5);
+ font-weight: bold;
+ min-height: $key_size;
+ min-width: $key_size;
+ border-width: 1px;
+ border-style: solid;
+ border-radius: $key_border_radius;
+ box-shadow: 0 1px 0 0 $shadow_color;
+
+ @include keyboard_key(normal, $key_bg_color, $osd_fg_color);
+
+ &:focus { @include keyboard_key(focus);}
+ &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
+ &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
+ &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
+
+ &:grayed { //FIXMEy
+ background-color: darken($bg_color, 3%);
+ color: $osd_fg_color;
+ border-color: $osd_borders_color;
+ }
+
+ // non-character keys
+ &.default-key {
+ @include keyboard_key(normal, $default_key_bg_color, $osd_fg_color);
+ &:hover {@include keyboard_key(hover, $default_key_bg_color, $osd_fg_color);}
+ &:active { @include keyboard_key(active, $default_key_bg_color, $osd_fg_color);}
+ &:checked { @include keyboard_key(checked, $default_key_bg_color, $osd_fg_color);}
+ border-radius: $key_border_radius;
+
+ // keys that may be latched: ctrl/alt/shift
+ &:latched {
+ border-color: lighten($selected_bg_color, 5%);
+ background-color: $selected_bg_color;
+ }
+ }
+
+ // enter key is suggested-action
+ &.enter-key {
+ @include keyboard_key(normal, $selected_bg_color, $selected_fg_color);
+ &:hover { @include keyboard_key(hover, $selected_bg_color, $selected_fg_color);}
+ &:active {@include keyboard_key(active, $selected_bg_color, $selected_fg_color);}
+ &:checked {@include keyboard_key(checked, $selected_bg_color, $selected_fg_color);}
+ border-radius: $key_border_radius;
+ color: $osd_fg_color;
+ }
+
+ &.shift-key-lowercase {}
+
+ // pressed shift has different style
+ &.shift-key-uppercase {
+ background-color: lighten($key_bg_color, 20%);
+ color: $osd_bg_color;
+ &:hover {
+ background-color: lighten($key_bg_color, 25%);
+ color: lighten($osd_bg_color, 5%);
+ }
+ }
+
+ // size of icons on keys
+ StIcon { icon-size: 24px; }
+}
+
+// long press on a key popup
+.keyboard-subkeys {
+ -arrow-border-radius: $base_border_radius*2;
+ -arrow-background-color: $osd_bg_color;
+ -arrow-border-width: 1px;
+ -arrow-border-color: lighten($osd_bg_color, 9%);
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: $base_padding;
+ padding: $base_padding;
+
+ .keyboard-key {
+ @include keyboard_key(normal, $key_bg_color, $osd_fg_color);
+
+ &:focus { @include keyboard_key(focus);}
+ &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
+ &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
+ &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
+
+ border-radius:$key_border_radius;
+ }
+}
+
+// emoji
+.emoji-page {
+ .keyboard-key {
+ background-color: transparent;
+ border: none;
+ color: initial;
+ }
+}
+
+.emoji-panel {
+ .keyboard-key:latched {
+ border-color: lighten($selected_bg_color, 5%);
+ background-color: $selected_bg_color;
+ }
+}
+
+// suggestions
+.word-suggestions {
+ @include fontsize($base_font_size + 1);
+ spacing: 12px;
+ min-height: 17pt;
+ padding: $base_padding*2;
+ color: $osd_fg_color;
+
+ // each suggestion
+ StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: $base_border_radius - 2px;
+ padding: 0px $base_padding*3;
+
+ @include keyboard_key(undecorated, $key_bg_color, $osd_fg_color);
+
+ &:focus { @include keyboard_key(focus);}
+ &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
+ &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
+ &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_login-dialog.scss b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
new file mode 100644
index 0000000..208165d
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_login-dialog.scss
@@ -0,0 +1,201 @@
+/* Login Dialog */
+
+.login-dialog-banner-view {
+ padding-top: 24px;
+ max-width: 23em;
+}
+
+.login-dialog,
+.unlock-dialog {
+ //reset
+ border: none;
+ background-color: transparent;
+
+ $_gdm_bg: $system_bg_color;
+
+ .modal-dialog-button-box { spacing: 3px; }
+ .modal-dialog-button {
+ padding: 4px 18px;
+ background-color: darken($system_bg_color, 3%);
+ border-color: darken($system_bg_color, 3%);
+ color: $osd_fg_color;
+
+ $_hover_c: lighten($_gdm_bg, 5%);
+ &:hover, &:focus {
+ background-color: $_hover_c;
+ border-color: $_hover_c;
+ }
+ &:active {
+ $_active_c: darken($_gdm_bg, 5%);
+ background-color: $_active_c;
+ border-color: $_active_c;
+ }
+ &:insensitive {
+ @include button(insensitive);
+ border-color: darken($_gdm_bg, 5%);
+ background-color: darken($_gdm_bg, 5%);
+ color: transparentize($osd_fg_color, 0.3);
+ }
+ &:default {
+ @include button(default);
+ }
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ padding: 0;
+ border-radius: 99px;
+ width: $large_icon_size;
+ height: $large_icon_size;
+ border-color: darken($system_bg_color, 3%);
+ background-color: darken($system_bg_color, 3%);
+
+ StIcon { icon-size: $base_icon_size; }
+ }
+
+ .caps-lock-warning-label,
+ .login-dialog-message-warning {
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-logo-bin { padding: 24px 0px; }
+.login-dialog-banner { color: darken($osd_fg_color,10%); }
+.login-dialog-button-box { width: 23em; spacing: 5px; }
+.login-dialog-message { text-align: center; }
+.login-dialog-user-selection-box { padding: 100px 0px; }
+.login-dialog-not-listed-label {
+ padding-left: 2px;
+ .login-dialog-not-listed-button:focus &,
+ .login-dialog-not-listed-button:hover & {
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-not-listed-label {
+ @extend %caption;
+ font-weight: bold;
+ color: darken($osd_fg_color,30%);
+ padding-top: 1em;
+}
+
+.login-dialog-auth-list-view { -st-vfade-offset: 1em; }
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-title {
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:focus, &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+}
+
+.login-dialog-auth-list-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.login-dialog-user-list-view { -st-vfade-offset: 1em; }
+.login-dialog-user-list {
+ spacing: 12px;
+ width: 23em;
+ &:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+ &:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; }
+}
+
+.login-dialog-user-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:ltr .user-widget { padding-right: 1em; }
+ &:rtl .user-widget { padding-left: 1em; }
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: 6px;
+ background-color: $osd_fg_color;
+ }
+ &:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
+}
+
+.user-widget-label {
+ color: $osd_fg_color;
+}
+
+.user-widget.horizontal .user-widget-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.user-widget.vertical .user-widget-label {
+ @include fontsize($base_font_size + 5);
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px;
+}
+
+.login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: darken($fg_color,40%);
+}
+
+.login-dialog-prompt-layout {
+ padding-top: 24px;
+ padding-bottom: 12px;
+ spacing: $base_padding * 2;
+ width: 23em;
+}
+
+.login-dialog-prompt-entry {
+ height: 1.5em;
+}
+
+.login-dialog-prompt-label {
+ color: darken($osd_fg_color, 20%);
+ @include fontsize($base_font_size + 1);
+ padding-top: 1em;
+}
+
+.login-dialog {
+ StEntry {
+ @if $variant=='dark' {
+ $_gdm_entry_bg: darken($system_bg_color, 3%);
+ background-color: $_gdm_entry_bg;
+ color: $fg_color;
+ }
+ }
+}
+
+// Custom styling for unlock entry
+.unlock-dialog {
+ StEntry {
+ border:none !important;
+ &:focus {
+ background-color: if($variant == 'light', transparentize(white, 0.9), transparentize($fg_color, 0.9));
+ }
+ &:insensitive {
+ color: if($variant == 'light', transparentize(white, 0.5), transparentize($fg_color, 0.5));
+ background-color: if($variant == 'light', transparentize(white, 0.95), transparentize($fg_color, 0.95));
+ }
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ border-color: transparent;
+ background-color: transparentize($fg_color, 0.9);
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_looking-glass.scss b/data/theme/gnome-shell-sass/widgets/_looking-glass.scss
new file mode 100644
index 0000000..00630c3
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_looking-glass.scss
@@ -0,0 +1,144 @@
+/* Looking Glass */
+
+// Dialog
+#LookingGlassDialog {
+ background-color: $osd_bg_color;
+ border-radius: 0 0 $modal_radius $modal_radius;
+ border-top-width: 0;
+ border: 1px solid $osd_outer_borders_color;
+ color: $osd_fg_color;
+ padding: $base_padding;
+ spacing: $base_padding;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+
+ & > #Toolbar {
+ border: none;
+ padding: $base_padding;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: $base_padding;
+
+ .lg-toolbar-button {
+ padding: $base_padding $base_padding*2;
+ @extend %button;
+
+ & > StIcon { icon-size: $base_icon_size; }
+ }
+ }
+
+ .labels {
+ spacing: $base_padding;
+ }
+
+ .notebook-tab {
+ -natural-hpadding: $base_padding*2;
+ -minimum-hpadding: $base_padding*2;
+
+ font-weight: bold;
+ padding: $base_padding $base_padding*2;
+ color: darken($osd_fg_color, 15%);
+ transition-duration: 100ms;
+ box-shadow:none;
+ border:none;
+ border-radius: $base_border_radius - 2px;
+ background-color: transparent;
+
+ &:hover {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.95);
+ }
+
+ &:selected {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ }
+ }
+
+ StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; }
+ StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; }
+}
+
+.lg-dialog {
+
+ StEntry {
+ background-color: transparentize(lighten($osd_bg_color, 5%), 0.4);
+ color: $osd_fg_color;
+ border-color: transparentize($osd_fg_color, 0.8);
+ min-height: 22px;
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+ }
+
+ .shell-link {
+ color: $link_color;
+ &:hover { color: lighten($link_color, 10%); }
+ &:active { color: darken($link_color, 10%); }
+ }
+
+ .actor-link {
+ color: $insensitive_fg_color;
+ &:hover { color: lighten($insensitive_fg_color, 20%); }
+ &:active { color: darken($insensitive_fg_color, 20%); }
+
+ & StIcon { icon-size: 12px; }
+ }
+}
+
+.lg-completions-text {
+ @extend %caption;
+ font-style: italic;
+}
+
+.lg-obj-inspector-title {
+ spacing: $base_padding;
+}
+
+.lg-obj-inspector-button {
+ border: 1px solid $osd_borders_color;
+ padding: 4px;
+ border-radius: $base_border_radius;
+ &:hover { border: 1px solid #ffffff; }
+}
+
+// Extensions
+#lookingGlassExtensions { padding: $base_padding; }
+
+.lg-extensions-list {
+ padding: $base_padding;
+ spacing: $base_padding;
+}
+
+.lg-extension {
+ padding: $base_padding*2;
+ @include card;
+}
+
+.lg-extension-name {
+ @extend %heading;
+}
+
+.lg-extension-meta {
+ spacing: $base_padding;
+}
+
+// Inspector
+#LookingGlassPropertyInspector {
+ background: $osd_bg_color;
+ border: 1px solid $osd_borders_color;
+ border-radius: $base_border_radius;
+ padding: $base_padding;
+}
+
+.lg-debug-flag-button {
+ StLabel { padding: $base_padding, 2 * $base_padding; }
+
+ color: $fg_color;
+ &:hover { color: lighten($fg_color, 20%); }
+ &:active { color: darken($fg_color, 20%); }
+}
+
+.lg-debug-flags-header {
+ padding-top: 2 * $base_padding;
+ padding: $base_padding;
+ @extend %title_2;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_message-list.scss b/data/theme/gnome-shell-sass/widgets/_message-list.scss
new file mode 100644
index 0000000..5196661
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_message-list.scss
@@ -0,0 +1,180 @@
+/* Message List */
+// a.k.a. notifications in the menu
+
+// main list
+.message-list {
+ width: 29em;
+ border: solid $borders_color;
+
+ // padding and margins to account for scrollbar
+ &:ltr {margin-left: 0; margin-right: $base_margin; padding-right: $base_padding; border-right-width: 1px; }
+ &:rtl {margin-right: 0; margin-left: $base_margin; padding-left: $base_padding; border-left-width: 1px; }
+
+ .message-list-placeholder {
+ @extend %title_2;
+ color: transparentize($insensitive_fg_color, .5);
+
+ // icon size and color
+ > StIcon {
+ icon-size: $base_icon_size*3; // 48px
+ margin-bottom: $base_margin*3;
+ -st-icon-style: symbolic;
+ }
+ }
+}
+
+.message-list-sections {
+ spacing: $base_padding;
+ margin: 0;
+ padding-bottom: $base_padding;
+
+ // to account for scrollbar
+ &:ltr {margin-right: $base_margin * 3; }
+ &:rtl {margin-left: $base_margin * 3;}
+}
+
+.message-list-section,
+.message-list-section-list {
+ spacing: $base_padding;
+}
+
+// do-not-disturb + clear button
+.message-list-controls {
+ // NOTE: remove the padding if notification_bubble could remove margin for drop shadow
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend %heading;
+
+ .dnd-button {
+ // We need this because the focus outline isn't inset like for the buttons
+ // so the dnd button would grow when it gets focus if we didn't change only
+ // its color when focusing.
+ border-width: 2px;
+ border-color: transparent;
+ border-radius: 32px;
+ border-style: solid;
+
+ &:focus {
+ border-color: transparentize($selected_bg_color, 0.4);
+ }
+ }
+}
+
+// message bubbles
+.message {
+ @include card;
+
+ // icon container
+ .message-icon-bin {
+ padding: ($base_padding * 3);
+
+ &:ltr {padding-right:$base_padding;}
+ &:rtl {padding-left:$base_padding;}
+
+ // icon size and color
+ > StIcon {
+ icon-size: $large_icon_size; // 32px
+ -st-icon-style: symbolic;
+ }
+
+ // fallback
+ > .fallback-app-icon {
+ width: $base_icon_size;
+ height: $base_icon_size;
+ }
+ }
+
+ // content
+ .message-content {
+ spacing: 4px;
+ padding: ($base_padding*1.5);
+ margin-bottom: $base_margin*2;
+ }
+
+ // title
+ .message-title {
+ font-weight: bold;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-top: 0.57em;
+ }
+
+ // secondary container in title box
+ .message-secondary-bin {
+ padding: 0 $base_margin * 2;
+
+ // notification time stamp
+ > .event-time {
+ color: transparentize($fg_color, 0.5);
+ @include fontsize($base_font_size - 2);
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-bottom: 0.13em;
+
+ &:ltr { text-align: right };
+ &:rtl { text-align: left };
+ }
+ }
+
+ // close button
+ .message-close-button {
+ color: $fg_color;
+ background-color: transparentize($fg_color, 0.9);
+ border-radius: 99px;
+ padding: $base_padding - 1px;
+ margin: 1px;
+ &:hover {background-color: transparentize($fg_color, 0.8);}
+ &:active {background-color: transparentize($fg_color, 0.9);}
+
+ & StIcon { icon-size: $base_icon_size; }
+ }
+
+ // body
+ .message-body {color: darken($fg_color, 10%);}
+}
+
+// URLs in messages
+.url-highlighter {
+ link-color: $link_color;
+}
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 $base_padding*3;
+ margin: $base_padding*2 0;
+ border-radius: $base_border_radius;
+ color: $fg_color;
+
+ // colors are lightened since the media controls are in a card
+ &:hover {
+ background-color: lighten($hover_bg_color, 5%);
+ color: $fg_color;
+ }
+
+ &:active {
+ background-color: lighten($active_bg_color, 5%);
+ color: $fg_color;
+ }
+
+ &:insensitive { color: lighten($insensitive_fg_color, 5%); }
+
+ // fix margin for last button
+ &:last-child:ltr { margin-right: $base_margin*3; }
+ &:last-child:rtl { margin-left: $base_margin*3; }
+
+ & StIcon { icon-size: $base_icon_size; }
+}
+
+// album-art
+.media-message-cover-icon {
+ icon-size: $base_icon_size*3 !important; // 48px
+ border-radius: $base_border_radius;
+
+ // when there is no artwork
+ &.fallback {
+ color: darken($fg_color, 17%);
+ background-color: $bg_color;
+ border: 1px solid transparent;
+ border-radius: $base_border_radius;
+ icon-size: $large_icon_size !important; // 32px
+ padding: ($base_padding*2 + 2); // 16px
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_misc.scss b/data/theme/gnome-shell-sass/widgets/_misc.scss
new file mode 100644
index 0000000..7409278
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_misc.scss
@@ -0,0 +1,65 @@
+// Rubberband for select-area screenshots
+.select-area-rubberband {
+ background-color: transparentize($selected_bg_color,0.7);
+ border: 1px solid $selected_bg_color;
+}
+
+// User icon
+.user-icon {
+ background-size: contain;
+ color: $osd_fg_color;
+ border-radius: 99px;
+ icon-size: $base_icon_size * 4; // 64px
+ &:hover {
+ color: lighten($osd_fg_color,30%);
+ }
+
+ & StIcon {
+ background-color: transparentize($osd_fg_color,0.95);
+ border-radius: 99px;
+ padding: $base_padding * 2 ; // 12px
+ width: $base_icon_size * 2.5; height: $base_icon_size * 2.5; // 40px;
+ }
+
+ &.user-avatar {
+ border: 2px $osd_fg_color;
+ }
+}
+
+.user-widget.vertical .user-icon {
+ icon-size: $base_icon_size * 6; // 128px
+
+ & StIcon {
+ padding: $base_padding * 3 + 2px; // 20px
+ padding-top: $base_padding * 3; // 18 px
+ padding-bottom: $base_padding * 3 + 4px; // 22px
+ width: $base_icon_size * 5.5; height: $base_icon_size * 5.5; // 88px;
+ }
+}
+
+.lightbox { background-color: black; }
+.flashspot { background-color: white; }
+
+
+// Hidden
+.hidden { color: rgba(0,0,0,0);}
+
+// Caps-lock warning
+.caps-lock-warning-label {
+ text-align: center;
+ padding-bottom: 8px;
+ @extend %caption;
+ color: $warning_color;
+}
+
+/* Workspace animation */
+
+.workspace-animation {
+ background-color: $system_bg_color;
+}
+
+/* Tiled window previews */
+.tile-preview {
+ background-color: transparentize($selected_bg_color,0.5);
+ border: 1px solid $selected_bg_color;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_notifications.scss b/data/theme/gnome-shell-sass/widgets/_notifications.scss
new file mode 100644
index 0000000..86480a8
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_notifications.scss
@@ -0,0 +1,61 @@
+/* Notifications & Message Tray */
+
+$notification_banner_height: 64px;
+$notification_banner_width: 34em;
+$notification_banner_radius: $base_border_radius*1.5;
+
+// Banner notifications
+.notification-banner {
+ min-height: $notification_banner_height;
+ width: $notification_banner_width;
+ box-shadow: 0 2px 4px 2px $shadow_color;
+ border-radius: $notification_banner_radius;
+ margin: $base_margin;
+
+ .notification-actions {
+ spacing: 0;
+ }
+
+ .notification-button {
+ @extend %bubble_button;
+ }
+}
+
+// counter
+.summary-source-counter {
+ font-size: $base_font_size - 1pt;
+ font-weight: bold;
+ height: 1.6em;
+ width: 1.6em;
+ -shell-counter-overlap-x: 3px;
+ -shell-counter-overlap-y: 3px;
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ border: 2px solid $fg_color;
+ box-shadow: 0 2px 2px rgba(0,0,0,0.5);
+ border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
+}
+
+// chat bubbles
+.chat-body { spacing: 5px; }
+.chat-response { margin: 5px; }
+.chat-log-message { color: darken($fg_color,10%); }
+.chat-new-group { padding-top: 1em; }
+.chat-received {
+ padding-left: 4px;
+ &:rtl { padding-left: 0px; padding-right: 4px; }
+}
+
+.chat-sent {
+ padding-left: 18pt;
+ color: lighten($fg_color, 15%);
+ &:rtl { padding-left: 0; padding-right: 18pt; }
+}
+
+.chat-meta-message {
+ padding-left: 4px;
+ @include fontsize($base_font_size - 2);
+ font-weight: bold;
+ color: lighten($fg_color,18%);
+ &:rtl { padding-left: 0; padding-right: 4px; }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_osd.scss b/data/theme/gnome-shell-sass/widgets/_osd.scss
new file mode 100644
index 0000000..a8d1a55
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_osd.scss
@@ -0,0 +1,64 @@
+/* OSD */
+
+$osd_levelbar_height:6px;
+
+.osd-window {
+ @extend %osd_panel;
+ @extend %heading;
+ text-align: center;
+ font-weight: bold;
+ spacing: $base_padding * 2; // 12px
+ padding: $base_padding * 2 $base_padding * 3;
+ & > * { spacing: 8px; }
+ margin-bottom: 4em;
+
+ StIcon { icon-size:$large_icon_size;}
+
+ StLabel {
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+
+ .level {
+ margin-bottom: 4px;
+ &:first-child { margin-bottom: 0px; }
+
+ height: $osd_levelbar_height;
+ min-width:$base_icon_size * 10;
+ -barlevel-height: $osd_levelbar_height;
+ -barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9));
+ -barlevel-active-background-color: $osd_fg_color;
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-separator-width: 3px;
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+}
+
+// Monitor number label
+.osd-monitor-label {
+ @extend %osd_panel;
+ border-radius: $modal_radius;
+ font-size: 3em;
+ font-weight: bold;
+ margin: $base_margin * 3;
+ text-align: center;
+ min-width: 1.3em;
+}
+
+/* Pad OSD */
+.pad-osd-window {
+ padding: 32px;
+ background-color: transparentize(#000, 0.2);
+
+ .pad-osd-title-box { spacing: 12px; }
+ .pad-osd-title-menu-box { spacing: 6px; }
+}
+
+.combo-box-label {
+ width: 15em;
+}
+
+.resize-popup {
+ @extend %osd_panel;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_overview.scss b/data/theme/gnome-shell-sass/widgets/_overview.scss
new file mode 100644
index 0000000..d8e70ea
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_overview.scss
@@ -0,0 +1,13 @@
+/* OVERVIEW */
+
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: $base_padding * 2;
+}
+
+#overviewGroup {
+ background-color: $system_bg_color;
+}
+
+.overview-controls {
+ padding-bottom: 32px;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_panel.scss b/data/theme/gnome-shell-sass/widgets/_panel.scss
new file mode 100644
index 0000000..fd3e7d2
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_panel.scss
@@ -0,0 +1,233 @@
+/* Top Bar */
+// a.k.a. the panel
+
+$panel_bg_color: #000;
+$panel_fg_color: if($variant == 'light', lighten($bg_color, 10%), darken($fg_color, 5%));
+$panel_height: 2.2em;
+$panel_transition_duration: 250ms; // same as the overview transition duration
+
+#panel {
+ background-color: $panel_bg_color;
+ font-weight: bold;
+ height: $panel_height;
+ @extend %numeric;
+ transition-duration: $panel_transition_duration;
+
+ // transparent panel on lock & login screens
+ &.unlock-screen,
+ &.login-screen,
+ &:overview {
+ background-color: transparent;
+ }
+
+ // panel menus
+ .panel-button {
+ font-weight: bold;
+ color: $panel_fg_color;
+ -natural-hpadding: $base_padding * 2;
+ -minimum-hpadding: $base_padding;
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+
+ &.clock-display {
+ .clock {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px $screenshot_ui_button_red;
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px $warning_color;
+ StBoxLayout { margin: 0 $base_padding; }
+ }
+
+ &.screen-recording-indicator,
+ &.screen-sharing-indicator {
+ StBoxLayout {
+ spacing: $base_padding;
+ }
+
+ StIcon {
+ icon-size: $base_icon_size;
+ }
+ }
+
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+
+ // The clock display needs to have the background on .clock because
+ // we want to exclude the do-not-disturb indicator from the background
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.2);
+ }
+ }
+
+ // status area icons
+ .system-status-icon {
+ icon-size: $base_icon_size;
+ padding: $base_padding - 1px;
+ margin: 0 $base_margin;
+ }
+
+ .panel-status-indicators-box .system-status-icon,
+ .panel-status-menu-box .system-status-icon {
+ margin: 0;
+ }
+
+ // app menu icon
+ .app-menu-icon {
+ -st-icon-style: symbolic;
+ // dimensions of the icon are hardcoded
+ }
+
+ &#panelActivities {
+ -natural-hpadding: $base_padding * 3;
+ }
+ }
+
+ &.unlock-screen,
+ &.login-screen,
+ &:overview {
+ .panel-button {
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ &.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.2);
+ }
+ }
+ }
+ }
+
+ .panel-status-indicators-box,
+ .panel-status-menu-box {
+ spacing: 2px;
+ }
+
+ // spacing between power icon and (optional) percentage label
+ .power-status.panel-status-indicators-box {
+ spacing: 0;
+ }
+
+ // indicator for active
+ .screencast-indicator,
+ .remote-access-indicator { color: $warning_color; }
+}
+
+// App Menu
+#appMenu {
+ spacing: $base_padding;
+ .label-shadow { color: transparent; }
+}
+
+#appMenu .panel-status-menu-box {
+ padding: 0 $base_padding;
+ spacing: $base_padding;
+}
+
+
+// Clock
+
+.clock-display-box {
+ spacing: 2px;
+
+ .clock {
+ padding-left: $base_padding * 2;
+ padding-right: $base_padding * 2;
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_popovers.scss b/data/theme/gnome-shell-sass/widgets/_popovers.scss
new file mode 100644
index 0000000..138a4fc
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_popovers.scss
@@ -0,0 +1,182 @@
+/* Popovers/Menus */
+
+// the popover itself
+.popup-menu-boxpointer {
+ -arrow-rise: $base_margin+2px; // distance from the panel & screen edge
+}
+
+// container of the popover menu
+.popup-menu {
+ min-width: 15em;
+ color: $fg_color;
+
+ //.popup-status-menu-item {font-weight: normal; color: pink;} //dunno what that is
+ &.panel-menu {
+ margin-bottom: 1.75em; // so it doesn't touch the bottom of the screen
+ }
+}
+
+// popover content
+.popup-menu-content {
+ padding: $base_padding;
+ border-radius: $modal_radius*1.25;
+ border: 1px solid $borders_edge;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+ background-color: $bg_color;
+}
+
+// menu items
+.popup-menu-item {
+ padding: $base_padding*1.5 $base_padding*2;
+ border-radius: $base_border_radius*1.5;
+ spacing: $base_padding;
+ transition-duration: 100ms;
+ background-color: transparent;
+
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+
+ &:focus, &:hover {
+ background-color: $hover_bg_color !important;
+ &:active { background-color: $active_bg_color !important;}
+ }
+
+ &:checked {background-color: $checked_bg_color !important;}
+
+ &:checked {
+ margin-bottom: 0;
+ box-shadow: inset 0 -1px 0 0 darken($checked_bg_color, 5%);
+ border-radius: $base_border_radius $base_border_radius 0 0;
+ &:focus,&:hover { background-color: lighten($checked_bg_color, 3%) !important;}
+ &:active { background-color: lighten($checked_bg_color, 5%) !important;}
+ }
+
+ &:active {
+ background-color: lighten($active_bg_color, 5%);
+ color: $active_fg_color;
+ }
+
+ &:insensitive {color: transparentize($fg_color,0.5);}
+
+ // add margin to switches in menu items
+ .toggle-switch {
+ &:ltr { margin-left: $base_margin;}
+ &:rtl { margin-right: $base_margin;}
+ }
+}
+
+
+// all other graphical elements (sliders)
+.popup-inactive-menu-item {
+ color: $fg_color;
+ &:insensitive { color: $insensitive_fg_color; }
+}
+
+// symbolic icons in popover
+.popup-menu-arrow,
+.popup-menu-icon {
+ icon-size: 16px !important; // for some reason the variable doesn't work here
+}
+
+.popup-menu-arrow {
+}
+
+
+// popover submenus
+.popup-sub-menu {
+ background-color: $checked_bg_color;
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+
+ .popup-menu-ornament {
+ min-width: $base_icon_size !important;
+ }
+
+ // submenu specific styles
+ .popup-menu-item {
+ border-radius: 0;
+ margin: 0;
+
+ &:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+
+ &:focus,&:hover { background-color: $hover_bg_color !important;}
+ &:checked {
+ background-color: $checked_bg_color !important;
+ &:focus,&:hover { background-color: lighten($checked_bg_color, 8%) !important;}
+ }
+ &:active { background-color: $active_bg_color !important;}
+ }
+
+ .popup-menu-section {
+ .popup-menu-item:last-child {
+ &:hover,&:focus { border-radius: 0;}
+ }
+ &:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+ }
+}
+
+// container for radio and check boxes
+.popup-menu-ornament {
+ @extend %heading;
+ width: 1.2em;
+ text-align: center !important;
+
+ &:ltr { text-align: right;}
+ &:rtl { text-align: left;}
+}
+
+// separator
+.popup-separator-menu-item {
+ margin: 6px 0;
+ padding:0 !important;
+ &:ltr { margin-right: $base_margin;}
+ &:rtl { margin-left: $base_margin;}
+
+ .popup-separator-menu-item-separator {
+ height: 1px; //not really the whole box
+ background-color: $borders_color;
+ }
+
+ .popup-menu-ornament {
+ width: 0 !important;
+ }
+
+ // separators in submenus
+ .popup-sub-menu & {
+ background-color: transparent;
+
+ // account for ornament
+ &:ltr { margin-right: 2.5em;}
+ &:rtl { margin-left: 2.5em;}
+
+ .popup-separator-menu-item-separator {
+ background-color: lighten($borders_color, 7%);
+ }
+ }
+}
+
+// desktop background menu
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; // hide the beak on the menu
+}
+
+// right-click (and panel) app menu
+.app-menu {
+ max-width: 27.25em;
+
+ // this is unneeded at the top-level in this menu, hide it
+ .popup-menu-ornament { width: 0 !important; }
+
+ .popup-inactive-menu-item:first-child {
+ // "Open Windows" label
+ > StLabel {
+ @extend %caption_heading;
+ &:ltr {margin-right: $base_margin*2;}
+ &:rtl {margin-left: $base_margin*2;}
+ }
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_quick-settings.scss b/data/theme/gnome-shell-sass/widgets/_quick-settings.scss
new file mode 100644
index 0000000..b429a2d
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_quick-settings.scss
@@ -0,0 +1,118 @@
+.quick-settings {
+ padding: $base_padding*3;
+ border-radius: $modal_radius*2.25;
+
+ .icon-button, .button {
+ padding: $base_padding*1.75;
+ }
+}
+
+.quick-settings-grid {
+ spacing-rows: $base_padding*2;
+ spacing-columns: $base_padding*2;
+}
+
+.quick-toggle {
+ border-radius: 99px;
+ min-width: 12em;
+ max-width: 12em;
+ min-height: 40px;
+ border:none;
+
+ &:checked { @include button(default); }
+
+ & > StBoxLayout { spacing: $base_padding; }
+
+ /* Move padding into the box; this is to allow menu arrows
+ to extend to the border */
+ &.button { padding: 0; }
+ & > StBoxLayout { padding: 0 $base_padding*2; }
+ &:ltr > StBoxLayout { padding-left: $base_padding*2.5; }
+ &:rtl > StBoxLayout { padding-right: $base_padding*2.5; }
+
+ .quick-toggle-label { font-weight: bold; }
+ .quick-toggle-icon, .quick-toggle-arrow { icon-size: $base_icon_size; }
+}
+
+.quick-menu-toggle {
+ &:ltr > StBoxLayout { padding-right: 0; }
+ &:rtl > StBoxLayout { padding-left: 0; }
+
+ & .quick-toggle-arrow {
+ background-color: transparentize($fg_color, 0.9);
+ padding: $base_padding $base_padding*1.75;
+
+ &:ltr { border-radius: 0 99px 99px 0; }
+ &:rtl { border-radius: 99px 0 0 99px; }
+ }
+}
+
+.quick-slider {
+ & > StBoxLayout { spacing: $base_padding; }
+
+ .slider-bin {
+ &:focus {@include button(focus);}
+ min-height: 16px; // slider size
+ padding: $base_padding;
+ border-radius: 99px;
+ }
+ .quick-toggle-icon {
+ icon-size: $base_icon_size;
+
+ &:ltr { margin-left: $base_padding; }
+ &:rtl { margin-right: $base_padding; }
+ }
+}
+
+.quick-toggle-menu {
+ background-color: $card_bg_color;
+ border-radius: $base_border_radius*3;
+ padding: $base_padding*2;
+ margin: $base_padding*2 $base_padding*3 0;
+
+ .popup-menu-item > StIcon { -st-icon-style: symbolic; }
+
+ & .header {
+ spacing-rows: 0.5 * $base_padding;
+ spacing-columns: $base_padding*2;
+ padding-bottom: 2 * $base_padding;
+
+ & .icon {
+ icon-size: $base_icon_size*1.5; // a non-standard symbolic size but ok
+ border-radius: 999px;
+ padding: 1.5 * $base_padding;
+ background-color: lighten($bg_color, 10%);
+
+ &.active { background-color: $selected_bg_color; }
+ }
+
+ & .title {
+ @extend %title_3;
+ }
+
+ & .subtitle {
+ @extend %caption_heading;
+ }
+ }
+}
+
+.quick-toggle-menu-container {
+}
+
+.quick-settings-system-item {
+ & > StBoxLayout { spacing: 2 * $base_padding; }
+
+ & .power-item {
+ min-height: 0;
+ min-width: 0;
+
+ &:insensitive {
+ @include button(normal);
+ background-color: transparent;
+ }
+ }
+}
+
+.nm-network-item {
+ .wireless-secure-icon { icon-size: 0.5 * $base_icon_size; }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_screen-shield.scss b/data/theme/gnome-shell-sass/widgets/_screen-shield.scss
new file mode 100644
index 0000000..a459ba1
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_screen-shield.scss
@@ -0,0 +1,78 @@
+/* Screen Shield */
+
+.unlock-dialog-clock {
+ color: white;
+ font-weight: 300;
+ text-align: center;
+ spacing: 24px;
+ padding-bottom: 2.5em;
+}
+
+.unlock-dialog-clock-time {
+ font-size: 64pt;
+ padding-top: 42px;
+ @extend %numeric;
+}
+
+.unlock-dialog-clock-date {
+ font-size: 16pt;
+ font-weight: normal;
+}
+
+.unlock-dialog-clock-hint {
+ font-weight: normal;
+ padding-top: 48px;
+}
+
+.unlock-dialog-notifications-container {
+ margin: 12px;
+ spacing: 6px;
+ width: 23em;
+ background-color: transparent;
+
+ .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ .notification,
+ .unlock-dialog-notification-source {
+ padding: 12px 16px;
+ border: none;
+ background-color: transparentize($osd_fg_color,0.9);
+ color: $osd_fg_color;
+ border-radius: $modal_radius;
+
+ &.critical { background-color: transparentize($osd_fg_color,0.8) }
+ }
+}
+
+.unlock-dialog-notification-label {
+ padding-left: 12px;
+ padding-right: 0;
+ &:rtl { padding-right: 12px; padding-left: 0; }
+}
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 12px;
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ border-radius: 99px;
+}
+
+.screen-shield-background { //just the shadow, really
+ background: black;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.6);
+}
+
+#lockDialogGroup {
+ background-color: $system_bg_color;
+}
+#unlockDialogNotifications {
+ StButton#vhandle, StButton#hhandle {
+ background-color: transparentize($bg_color,0.7);
+ &:hover, &:focus { background-color: transparentize($bg_color,0.5); }
+ &:active { background-color: transparentize($selected_bg_color,0.5); }
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_screenshot.scss b/data/theme/gnome-shell-sass/widgets/_screenshot.scss
new file mode 100644
index 0000000..150f273
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_screenshot.scss
@@ -0,0 +1,204 @@
+// Screenshot UI
+.icon-label-button-container {
+ spacing: $base_padding;
+ @extend %caption;
+
+ StIcon { icon-size: 32px;}
+}
+
+$screenshot_ui_panel_padding: $base_padding*3;
+$screenshot_ui_shot_cast_margin: 21px;
+$screenshot_ui_panel_border_radius: $modal_radius + $screenshot_ui_shot_cast_margin;
+$screenshot_ui_shot_cast_spacing: 3px;
+
+$screenshot_ui_button_red: $error_color;
+
+.screenshot-ui-panel {
+ @extend %osd_panel;
+ border-radius: $screenshot_ui_panel_border_radius;
+ padding: $screenshot_ui_panel_padding;
+ // Reduce the bottom padding a little to accommodate the large capture button.
+ padding-bottom: $screenshot_ui_panel_padding - 6px;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+}
+
+.screenshot-ui-close-button {
+ @extend .window-close; // copy window close button
+ padding: $base_padding !important; // but with more padding
+ margin-top: 12px;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+ &.left { margin-left: 12px;}
+ &.right { margin-right: 12px;}
+}
+
+.screenshot-ui-type-button {
+ @extend %osd_button;
+ min-width: 48px;
+ padding: $base_padding * 2 $base_padding * 3 !important;
+ border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding;
+}
+
+.screenshot-ui-capture-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ border: 4px $osd_fg_color;
+ padding: 4px;
+
+ .screenshot-ui-capture-button-circle {
+ background-color: $osd_fg_color;
+ transition-duration: 200ms;
+ &:hover, &:focus { background-color: $hover_bg_color;}
+ border-radius: 99px;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 15%);
+ }
+ }
+
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 50%);
+ }
+ }
+
+ &:cast {
+ .screenshot-ui-capture-button-circle {
+ background-color: $screenshot_ui_button_red;
+ }
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: lighten($screenshot_ui_button_red, 5%);
+ }
+ }
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($screenshot_ui_button_red, 7%);
+ }
+ }
+ }
+}
+
+.screenshot-ui-shot-cast-container {
+ background-color: lighten($osd_bg_color,5%);
+ border-radius: $modal_radius;
+ padding: $screenshot_ui_shot_cast_spacing;
+ spacing: $screenshot_ui_shot_cast_spacing;
+
+ &:ltr { margin-left: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+ &:rtl { margin-right: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+}
+
+.screenshot-ui-shot-cast-button {
+ padding: $base_padding $base_padding*2;
+ background-color: transparent;
+ &:hover, &:focus { background-color: lighten($osd_bg_color, 10%);}
+ &:active { background-color: lighten($active_bg_color,5%);}
+ &:checked { background-color: white;color: black;}
+ &:insensitive { color: transparentize($osd_fg_color, 0.5);}
+
+ border-radius: $modal_radius - $screenshot_ui_shot_cast_spacing;
+
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-show-pointer-button {
+ @extend %osd_button;
+ border-radius: 99px;
+ padding: $base_padding * 2 !important;
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.3);
+}
+
+.screenshot-ui-area-selector {
+ .screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.5);
+ }
+
+ .screenshot-ui-area-indicator-selection {
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-area-selector-handle {
+ border-radius: 99px;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px rgba(0,0,0,0.2);
+ width: 24px;
+ height: 24px;
+}
+
+.screenshot-ui-window-selector {
+ background-color: $system_bg_color;
+
+ .screenshot-ui-window-selector-window-container {
+ margin: 100px;
+ }
+
+ &:primary-monitor {
+ .screenshot-ui-window-selector-window-container {
+ // Make some room for the panel.
+ margin-bottom: 200px;
+ }
+ }
+}
+
+.screenshot-ui-window-selector-window-border {
+ transition-duration: 200ms;
+ border-radius: $modal_radius;
+ border: 6px transparent;
+}
+
+.screenshot-ui-window-selector-check {
+ transition-duration: 200ms;
+ color: transparent;
+ border-radius: 99px;
+ border-width: 12px;
+ icon-size: 24px;
+}
+
+.screenshot-ui-window-selector-window {
+ &:hover {
+ .screenshot-ui-window-selector-window-border {
+ border-color: darken($selected_bg_color, 15%);
+ }
+ }
+ &:checked {
+ .screenshot-ui-window-selector-window-border {
+ border-color: $selected_bg_color;
+ background-color: transparentize($selected_bg_color, 0.8);
+ }
+
+ .screenshot-ui-window-selector-check {
+ color: $selected_fg_color;
+ background-color: $selected_bg_color;
+ }
+ }
+}
+
+.screenshot-ui-screen-selector {
+ transition-duration: 200ms;
+ background-color: rgba(0,0,0,.5);
+
+ &:hover { background-color: rgba(0,0,0,.3);}
+ &:active { background-color: rgba(0,0,0,.7);}
+ &:checked {
+ background-color: transparent;
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-tooltip {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: 24px;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_scrollbars.scss b/data/theme/gnome-shell-sass/widgets/_scrollbars.scss
new file mode 100644
index 0000000..77cde65
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_scrollbars.scss
@@ -0,0 +1,29 @@
+/* Scrollbars */
+
+StScrollView {
+ &.vfade { -st-vfade-offset: 68px; }
+ &.hfade { -st-hfade-offset: 68px; }
+}
+
+StScrollBar {
+ padding: 0;
+
+ StScrollView & {
+ min-width: 8px;
+ min-height: 8px;
+ }
+
+ StBin#trough {
+ border-radius: 0;
+ background-color: transparent;
+ }
+
+ StButton#vhandle, StButton#hhandle {
+ border-radius: 8px;
+ background-color: mix($fg_color, $bg_color, 30%);
+ border: 3px solid transparent; //would be nice to margin or at least to transparent
+ transition: 500ms all ease;
+ &:hover {background-color: mix($fg_color, $bg_color, 50%);}
+ &:active {background-color: mix($fg_color, $bg_color, 40%);}
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_search-entry.scss b/data/theme/gnome-shell-sass/widgets/_search-entry.scss
new file mode 100644
index 0000000..faca50e
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_search-entry.scss
@@ -0,0 +1,26 @@
+// Search entry
+
+$search_entry_width: 320px;
+$search_entry_height: 36px;
+
+%search_entry,
+.search-entry {
+ border-radius: $search_entry_height * 0.5; // half the height
+
+ margin-top: $base_padding * 2;
+ margin-bottom: $base_padding;
+ padding: $base_padding+1 $base_padding+3;
+ width: $search_entry_width;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ .search-entry-icon {
+ color: inherit;
+ icon-size: $base_icon_size;
+ margin-top: 2px; // center vertically
+ padding: 0 4px;
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_search-results.scss b/data/theme/gnome-shell-sass/widgets/_search-results.scss
new file mode 100644
index 0000000..644c53d
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_search-results.scss
@@ -0,0 +1,96 @@
+/* Search */
+
+// search overview container
+#searchResults {
+ margin: 0 $base_margin;
+}
+
+#searchResultsContent {
+ max-width: 1072px;
+}
+
+// search results sections "the boxes"
+.search-section {
+ // This should be equal to #searchResultsContent spacing
+ spacing: $base_padding*3;
+
+ // separator (unstyled)
+ .search-section-separator {
+ height: $base_margin*2; // use it as a spacer
+ background-color: transparent;
+ }
+}
+
+// content
+.search-section-content {
+ background-color: lighten($system_bg_color, 5%);
+ border-radius: $modal_radius*1.5;
+ border: 1px solid $osd_outer_borders_color;
+ color: $osd_fg_color;
+ padding: $base_padding*2;
+ margin:0 $base_margin*3;
+}
+
+%search_section_content_item {
+ @include tile_button($osd_fg_color);
+ border-radius: $base_border_radius+3px;
+}
+
+// "no results" text
+.search-statustext {
+ @extend %title_1;
+}
+
+.grid-search-results {
+ spacing: $base_padding*5;
+ margin:0 $base_margin*3;
+}
+
+// Search results with icons
+.grid-search-result {
+ @extend .app-well-app;
+}
+
+// search result provider
+.search-provider-icon {
+ @extend %search_section_content_item;
+ &:ltr {margin-right: $base_margin;}
+ &:rtl {margin-left: $base_margin;}
+
+ // content
+ .list-search-provider-content {
+ spacing: $base_padding * 2;
+
+ // provider labels
+ .list-search-provider-details {
+ width: 120px;
+ color: $osd_fg_color;
+ }
+ }
+}
+
+// search results list
+.list-search-results {
+ spacing: $base_padding;
+}
+
+// search result listitem
+.list-search-result {
+ @extend %search_section_content_item;
+
+ // content
+ .list-search-result-content {
+ spacing: $base_padding;
+ }
+
+ // list item title (with leading icon)
+ .list-search-result-title {
+ spacing: $base_padding * 2;
+ // font-weight: bold;
+ }
+
+ // list item description
+ .list-search-result-description {
+ color: $osd_insensitive_fg_color;
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_slider.scss b/data/theme/gnome-shell-sass/widgets/_slider.scss
new file mode 100644
index 0000000..500249a
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_slider.scss
@@ -0,0 +1,22 @@
+/* Slider */
+
+$slider_size: 16px;
+
+.slider {
+ // slider trough
+ -barlevel-height: 4px;
+ -barlevel-background-color: if($variant == 'light', transparentize($fg_color, 0.6), transparentize($fg_color, 0.8)); //background of the trough
+ -barlevel-border-width: 2px;
+ -barlevel-border-color: transparent; // trough border color
+ // fill style
+ -barlevel-active-background-color: $selected_bg_color;
+ -barlevel-active-border-color: transparent;
+ // overfill style (red in this case)
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-border-color: transparent; //trough border when red;
+ -barlevel-overdrive-separator-width:1px;
+ // slider handler
+ -slider-handle-radius: $slider_size * 0.5; // half the size of the size
+ -slider-handle-border-width: 0;
+ -slider-handle-border-color: transparent; // because 0 width
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_switcher-popup.scss b/data/theme/gnome-shell-sass/widgets/_switcher-popup.scss
new file mode 100644
index 0000000..cec6c9a
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_switcher-popup.scss
@@ -0,0 +1,72 @@
+/* App Switcher */
+
+// same as dash
+$switcher_padding: $base_padding + 4px; // 10px
+$switcher_border_radius: $modal_radius + 8px;
+
+
+// the full screen container of the switcher
+.switcher-popup {
+ padding: 0;
+ spacing: $base_padding * 4;
+}
+
+// switcher onscreen panel
+.switcher-list {
+ @extend %osd_panel;
+ padding: $switcher_padding;
+ border-radius: $switcher_border_radius;
+ box-shadow: 0 8px 8px 0 rgba(0,0,0,0.1);
+
+ // container for items in list
+ .switcher-list-item-container {
+ spacing: $base_padding * 2;
+ }
+
+ // each item in the list
+ .item-box {
+ @include tile_button($osd_fg_color);
+ // override over style so mouse doesn't steal focus
+ &:hover {background: none;}
+ }
+
+ .separator {
+ width: 1px;
+ background: $borders_color;
+ }
+
+ // container of thumbnails
+ .thumbnail-box {
+ padding: 2px;
+ spacing: $base_padding;
+ }
+
+ // window thumbnail itself
+ .thumbnail {
+ width: 256px; // equal to THUMBNAIL_DEFAULT_SIZE in altTab.js
+ border-radius:$base_border_radius;
+ }
+}
+
+// arrow if app has multiple windows
+.switcher-arrow {
+ border-color: transparentize($osd_fg_color, 0.2);
+ color: transparentize($osd_fg_color, 0.2);
+
+ &:highlighted {
+ border-color: $osd_fg_color;
+ color: $osd_fg_color;
+ }
+}
+
+// Input Source Switcher
+.input-source-switcher-symbol {
+ font-size: 34pt;
+ width: 96px;
+ height: 96px;
+}
+
+// Window cycler highlight
+.cycler-highlight {
+ border: 5px solid $selected_bg_color;
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_switches.scss b/data/theme/gnome-shell-sass/widgets/_switches.scss
new file mode 100644
index 0000000..b6d8fe8
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_switches.scss
@@ -0,0 +1,16 @@
+/* Switches */
+
+// these are equal to the size of the SVG assets
+$switch_height: 26px;
+$switch_width: 48px;
+
+.toggle-switch {
+ color: $fg_color;
+ height: $switch_height;
+ width: $switch_width;
+ background-size: contain;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off-light.svg"),url("resource:///org/gnome/shell/theme/toggle-off.svg"));
+ &:checked {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on-light.svg"),url("resource:///org/gnome/shell/theme/toggle-on.svg"));
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_window-picker.scss b/data/theme/gnome-shell-sass/widgets/_window-picker.scss
new file mode 100644
index 0000000..9067a6d
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_window-picker.scss
@@ -0,0 +1,53 @@
+/* Window Picker */
+
+$window_picker_spacing: $base_padding; // 6px
+$window_picker_padding: $base_padding * 2; // 12px
+
+$window_thumbnail_label_color: transparentize($osd_bg_color, 0.4);
+
+$window_close_button_color: transparentize(lighten($osd_bg_color, 7%), .02);
+$window_close_button_size: 30px;
+$window_close_button_padding: 3px;
+
+// Window picker
+.window-picker {
+ // Space between window thumbnails
+ spacing: $window_picker_spacing;
+}
+
+// Window titles
+.window-caption {
+ color: $osd_fg_color;
+ background-color: lighten($osd_bg_color, 5%);
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+}
+
+// Close button
+.window-close {
+ background-color: $window_close_button_color;
+ color: $osd_fg_color;
+ border-radius: 99px;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+ padding: $window_close_button_padding;
+ height: $window_close_button_size;
+ width: $window_close_button_size;
+ transition-duration: 100ms;
+
+ & StIcon { icon-size: 24px; } // uses non standard icon size
+
+ &:hover {
+ background-color: lighten($window_close_button_color, 7%);
+ }
+
+ &:active {
+ background-color: lighten($window_close_button_color, 13%);
+ }
+}
+
+.workspace-background {
+ // keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
+ border-radius: 30px;
+ background-color: $invisible_occluded_bg_color;
+ box-shadow: 0 4px 16px 4px transparentize(darken($osd_bg_color, 30%), 0.7);
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_workspace-switcher.scss b/data/theme/gnome-shell-sass/widgets/_workspace-switcher.scss
new file mode 100644
index 0000000..f06130b
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_workspace-switcher.scss
@@ -0,0 +1,25 @@
+/* Workspace Switcher */
+
+$ws_indicator_height: $large_icon_size;
+$ws_dot_active: $ws_indicator_height / 3;
+$ws_dot_inactive: $ws_indicator_height / 6;
+
+.workspace-switcher {
+ @extend %osd_panel;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+ padding: $base_padding * 2 $base_padding * 3;
+}
+
+.ws-switcher-indicator {
+ background-color: transparentize($osd_fg_color,0.5);
+ padding: $ws_dot_inactive / 2;
+ margin: ($ws_indicator_height - $ws_dot_inactive) / 2;
+ border-radius: $ws_indicator_height;
+
+ &:active {
+ background-color: $osd_fg_color;
+ padding: $ws_dot_active / 2;
+ margin: ($ws_indicator_height - $ws_dot_active) / 2;
+ }
+}
diff --git a/data/theme/gnome-shell-sass/widgets/_workspace-thumbnails.scss b/data/theme/gnome-shell-sass/widgets/_workspace-thumbnails.scss
new file mode 100644
index 0000000..0a1867c
--- /dev/null
+++ b/data/theme/gnome-shell-sass/widgets/_workspace-thumbnails.scss
@@ -0,0 +1,28 @@
+/* Workspace pager */
+
+// thumbnails in overview
+.workspace-thumbnails {
+ visible-width: 32px; //amount visible before hover
+ spacing: $base_padding;
+ padding: $base_padding;
+
+ .workspace-thumbnail {
+ @extend %overview_panel;
+ border-radius: 3px;
+ }
+
+ // drag and drop indicator
+ .placeholder {
+ background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
+ background-size: contain;
+ width: 18px;
+ }
+}
+
+// selected indicator
+.workspace-thumbnail-indicator {
+ border: 3px solid $selected_bg_color;
+ border-radius: 3px;
+ padding: 0px;
+ // background-color: transparentize($selected_bg_color, 0.9);
+}
diff --git a/data/theme/gnome-shell-start.svg b/data/theme/gnome-shell-start.svg
new file mode 100644
index 0000000..af139cf
--- /dev/null
+++ b/data/theme/gnome-shell-start.svg
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 600 400"
+ height="400"
+ width="600"
+ sodipodi:docname="gnome-shell-start.svg">
+ <defs
+ id="defs2">
+ <linearGradient
+ id="a">
+ <stop
+ offset="0"
+ stop-color="#eef4fc"
+ id="stop3"
+ style="stop-color:#b2cdf1;stop-opacity:1" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ id="stop5" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10562"
+ id="linearGradient10564"
+ x1="-1179.9999"
+ y1="1314.5198"
+ x2="-940.00006"
+ y2="1314.5198"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3993149,0,0,1.3993149,1306.25,-919.42736)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10562">
+ <stop
+ style="stop-color:#3580e4;stop-opacity:1"
+ offset="0"
+ id="stop10558" />
+ <stop
+ style="stop-color:#8abfdd;stop-opacity:1"
+ offset="1"
+ id="stop10560" />
+ </linearGradient>
+ <clipPath
+ id="e-3"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ d="m 65,177 c -18.502,0 -33.5,14.998 -33.5,33.5 0.008,7.371 4.131,15.807 11.388,23.526 l 12.617,13.171 H 75.02 l 12.137,-13.245 c 6.636,-7.059 11.33,-16.117 11.344,-23.452 0,-18.502 -14.998,-33.5 -33.5,-33.5 z"
+ style="marker:none"
+ fill="#ffffff"
+ stroke-width="2"
+ id="path34-6" />
+ </clipPath>
+ <radialGradient
+ r="33.5"
+ fy="48.405998"
+ fx="79.091003"
+ cy="48.405998"
+ cx="79.091003"
+ gradientTransform="matrix(0.00476,1.62228,-1.43419,0.00422,141.702,-82.047)"
+ gradientUnits="userSpaceOnUse"
+ id="f-7"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ offset="0"
+ stop-color="#fff"
+ id="stop11" />
+ <stop
+ offset=".519"
+ stop-color="#fff"
+ id="stop13" />
+ <stop
+ offset=".734"
+ stop-color="#cfcfcf"
+ id="stop15" />
+ <stop
+ offset="1"
+ stop-color="#dcdcdc"
+ id="stop17" />
+ </linearGradient>
+ <radialGradient
+ r="12"
+ fy="54.102001"
+ fx="71.473999"
+ cy="54.102001"
+ cx="71.473999"
+ gradientTransform="matrix(4.50607,0,0,4.76661,-259.306,-59.706)"
+ gradientUnits="userSpaceOnUse"
+ id="g-2"
+ xlink:href="#c" />
+ <linearGradient
+ id="c">
+ <stop
+ offset="0"
+ stop-color="#ed686f"
+ id="stop20" />
+ <stop
+ offset=".865"
+ stop-color="#a51d2d"
+ id="stop22" />
+ <stop
+ offset="1"
+ stop-color="#e01b24"
+ id="stop24" />
+ </linearGradient>
+ <radialGradient
+ r="14.583"
+ fy="49.777"
+ fx="40.152"
+ cy="49.777"
+ cx="40.152"
+ gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
+ gradientUnits="userSpaceOnUse"
+ id="h-7"
+ xlink:href="#d" />
+ <linearGradient
+ id="d">
+ <stop
+ offset="0"
+ stop-color="#ed686f"
+ id="stop27" />
+ <stop
+ offset=".911"
+ stop-color="#a51d2d"
+ id="stop29" />
+ <stop
+ offset="1"
+ stop-color="#e01b24"
+ id="stop31" />
+ </linearGradient>
+ <radialGradient
+ r="14.583"
+ fy="49.777"
+ fx="40.152"
+ cy="49.777"
+ cx="40.152"
+ gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
+ gradientUnits="userSpaceOnUse"
+ id="i-6"
+ xlink:href="#d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient860"
+ id="linearGradient22"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.575111,0,0,1.575111,1217.8748,47.173672)"
+ x1="85"
+ y1="107.162"
+ x2="85"
+ y2="86" />
+ <linearGradient
+ id="linearGradient860">
+ <stop
+ offset="0"
+ stop-color="#eef4fc"
+ id="stop856"
+ style="stop-color:#c5dcf7;stop-opacity:1" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ id="stop858" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient860"
+ id="linearGradient24"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.1158457,0,0,2.1158457,1459.4994,-118.92278)"
+ x1="85"
+ y1="110.30392"
+ x2="85"
+ y2="86.986084" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient860"
+ id="linearGradient23"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5463767,0,0,1.5463767,655.03375,-16.075361)"
+ x1="85"
+ y1="107.162"
+ x2="85"
+ y2="82.13472" />
+ </defs>
+ <sodipodi:namedview
+ units="px"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="75.603256"
+ inkscape:cx="199.00314"
+ inkscape:zoom="0.98994949"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ borderopacity="1"
+ bordercolor="#383838"
+ pagecolor="#1f1f1f"
+ id="base"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:snap-bbox="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid900" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ transform="translate(-620,9.4371882)">
+ <g
+ id="g4043"
+ transform="translate(-15.793175)">
+ <circle
+ style="fill:url(#linearGradient10564);fill-opacity:1;stroke:none;stroke-width:3.66905;stroke-linecap:round;stroke-linejoin:round"
+ id="path10517"
+ cx="-177.02397"
+ cy="920"
+ r="167.91774"
+ transform="rotate(-90)" />
+ <path
+ d="m 1066.6646,147.98131 c 12.3048,0.0174 23.474,7.19166 28.6008,18.37784 a 23.631877,23.631877 0 0 1 10.7762,-2.62748 c 12.4288,0.0178 22.7209,9.65384 23.5474,22.05492 h 0.08 c 8.6991,0 15.7508,7.05171 15.7508,15.75083 0,8.69911 -7.0522,15.75083 -15.7513,15.75083 h -88.2056 a 18.901933,18.901933 0 0 1 -18.9019,-18.901 18.901933,18.901933 0 0 1 12.6566,-17.81853 33.12417,33.12417 0 0 1 -0.056,-1.08246 c 0,-17.39824 14.1038,-31.50213 31.5025,-31.50213 z"
+ id="path10"
+ style="fill:url(#linearGradient22);stroke-width:0.577558" />
+ <g
+ id="g245"
+ transform="matrix(1.5161629,0,0,1.5161629,396.40481,-143.42807)">
+ <g
+ id="g126"
+ transform="matrix(0.75000161,0,0,0.75000161,154.45946,111.99828)">
+ <g
+ id="g265">
+ <g
+ transform="matrix(3.12129,0,0,2.9344,91.063695,-499.94397)"
+ clip-path="url(#e-3)"
+ id="g47-0">
+ <path
+ transform="translate(-8,156)"
+ d="M 73,21 C 54.498,21 39.5,35.998 39.5,54.5 39.508,61.871 43,68.922 46.44,74.879 L 58,98 H 88 L 99.605,74.79 C 103,68.91 106.485,61.835 106.5,54.5 106.5,35.998 91.502,21 73,21 Z"
+ style="fill:url(#f-7);marker:none"
+ fill="url(#f)"
+ id="path39-6" />
+ <path
+ d="m 64,177 c 0,0 -18.332,12.132 -18.332,30.989 0,14.571 16.174,46.011 16.174,46.011 H 67 c 0,0 1.333,-31.44 1.333,-46.011 C 68.333,189.132 64,177 64,177 Z"
+ fill="url(#g)"
+ id="path41-2"
+ style="fill:url(#g-2)" />
+ <path
+ transform="translate(-8,156)"
+ d="m 71.983,21.106 c -8.207,0.147 -16.328,3.285 -22.5,8.695 -6.174,5.409 -10.35,13.047 -11.574,21.163 -1.24,8.225 0.567,16.874 4.995,23.915 L 61.902,98 h 6.432 L 55.002,81.27 C 50.702,75.875 46.53,70.2 44.406,63.636 42.283,57.072 42.24,49.836 44.409,43.288 A 32.824,32.824 0 0 1 54.925,28.13 32.824,32.824 0 0 1 71.983,21.105 Z"
+ fill="url(#h)"
+ id="path43-6"
+ style="fill:url(#h-7)" />
+ <path
+ transform="matrix(-1,0,0,1,137.16,155.823)"
+ d="M 73.003,21.303 C 65.294,19.756 57.033,21.149 50.257,25.138 43.481,29.127 38.255,35.675 35.867,43.167 A 32.484,32.484 0 0 0 35.11,59.972 32.484,32.484 0 0 0 42.904,74.879 L 54.11,98 H 67.493 L 54.16,74.356 C 51.292,69.269 48.603,63.95 47.733,58.175 46.863,52.4 47.769,46.404 50.107,41.052 54.28,31.502 62.943,24.03 73.002,21.304 Z"
+ fill="url(#i)"
+ id="path45-1"
+ style="fill:url(#i-6)" />
+ </g>
+ <path
+ style="marker:none"
+ d="m 271.0607,256.22128 v 19.397 a 9.702,9.702 0 0 0 9.724,9.726 h 26.326 c 5.388,0 8.594,-4.457 9.725,-9.726 v -19.397 z"
+ fill="#e5a50a"
+ id="path49-8" />
+ <path
+ style="marker:none"
+ d="m 271.0607,252.06028 v 19.397 a 9.702,9.702 0 0 0 9.724,9.724 h 26.326 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
+ fill="#e5a50a"
+ id="path51-7" />
+ <path
+ style="marker:none"
+ d="m 300.1907,252.06028 v 29.121 h 6.92 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
+ fill="#f3af0b"
+ id="path53-9" />
+ </g>
+ </g>
+ </g>
+ <path
+ style="font-variation-settings:normal;fill:url(#linearGradient24);fill-opacity:1;stroke-width:0.822282"
+ d="m 1051.0577,24.011554 a 37.111799,37.111799 0 0 0 -36.9465,35.120895 c -13.3251,2.089947 -23.45686,13.564137 -23.45686,27.494149 0,15.421302 12.41476,27.836692 27.83666,27.836692 h 72.3273 c 11.9284,0 21.5316,-9.60251 21.5316,-21.530902 0,-11.928386 -9.6032,-21.532163 -21.5316,-21.532163 h -3.9868 a 37.111799,37.111799 0 0 0 1.4509,-10.27624 37.111799,37.111799 0 0 0 -37.1118,-37.111798 37.111799,37.111799 0 0 0 -0.1123,0 z"
+ id="path12" />
+ <path
+ d="m 803.48555,82.893284 c -12.0805,0.0171 -23.046,7.06046 -28.0791,18.042576 a 23.200767,23.200767 0 0 0 -10.5796,-2.579546 c -12.2021,0.0175 -22.3064,9.477716 -23.1179,21.652566 h -0.079 c -8.5404,0 -15.4634,6.92307 -15.4634,15.46349 0,8.54042 6.9235,15.46349 15.4639,15.46349 h 86.5965 a 18.55711,18.55711 0 0 0 18.5571,-18.55619 18.55711,18.55711 0 0 0 -12.4257,-17.49347 32.519894,32.519894 0 0 0 0.055,-1.06272 c 0,-17.080836 -13.8466,-30.927426 -30.9279,-30.927426 z"
+ id="path21"
+ style="fill:url(#linearGradient23);fill-opacity:1;stroke-width:0.999999" />
+ </g>
+ </g>
+</svg>
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
new file mode 100644
index 0000000..6e4abda
--- /dev/null
+++ b/data/theme/gnome-shell.css
@@ -0,0 +1,2784 @@
+/* This stylesheet is generated, DO NOT EDIT */
+/* Copyright 2009, 2015 Red Hat, Inc.
+ *
+ * Portions adapted from Mx's data/style/default.css
+ * Copyright 2009 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+/* Global Values */
+stage {
+ font-size: 11pt;
+ color: white; }
+
+/* Common Stylings */
+.screenshot-ui-panel, .workspace-switcher, .switcher-list, .resize-popup, .osd-monitor-label, .osd-window {
+ color: white;
+ background-color: #232323;
+ border: 1px solid rgba(255, 255, 255, 0.02);
+ border-radius: 999px;
+ padding: 12px; }
+
+.workspace-thumbnails .workspace-thumbnail {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1); }
+
+.app-well-app.app-folder .overview-icon, .app-folder.grid-search-result .overview-icon, .app-well-app .overview-icon, .grid-search-result .overview-icon, .dash-item-container .show-apps .overview-icon, .list-search-result, .search-provider-icon, .switcher-list .item-box {
+ border-radius: 16px;
+ padding: 6px;
+ spacing: 6px;
+ border: 2px solid transparent;
+ transition-duration: 200ms;
+ text-align: center; }
+
+.modal-dialog {
+ color: white;
+ background-color: #303030;
+ border-radius: 11px;
+ border: 1px solid #3c3c3c; }
+
+#LookingGlassDialog > #Toolbar .lg-toolbar-button, .app-folder-dialog .folder-name-container .edit-folder-button, .button, .icon-button {
+ border-radius: 6px;
+ border-style: solid;
+ border-width: 1px;
+ font-weight: bold;
+ padding: 3px 24px;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a3a3a; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus, .app-folder-dialog .folder-name-container .edit-folder-button:focus, .button:focus, .icon-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a414b;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus:hover, .app-folder-dialog .folder-name-container .edit-folder-button:focus:hover, .button:focus:hover, .icon-button:focus:hover {
+ background-color: #404852;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:focus:active, .app-folder-dialog .folder-name-container .edit-folder-button:focus:active, .button:focus:active, .icon-button:focus:active {
+ background-color: #474f59;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:hover, .app-folder-dialog .folder-name-container .edit-folder-button:hover, .button:hover, .icon-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #424242; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:insensitive, .app-folder-dialog .folder-name-container .edit-folder-button:insensitive, .button:insensitive, .icon-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05); }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:active, .app-folder-dialog .folder-name-container .edit-folder-button:active, .button:active, .icon-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #494949; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked, .app-folder-dialog .folder-name-container .edit-folder-button:checked, .button:checked, .icon-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #515151; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked:hover, .app-folder-dialog .folder-name-container .edit-folder-button:checked:hover, .button:checked:hover, .icon-button:checked:hover {
+ background-color: #595959; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button:checked:active, .app-folder-dialog .folder-name-container .edit-folder-button:checked:active, .button:checked:active, .icon-button:checked:active {
+ background-color: #606060; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button, .app-folder-dialog .folder-name-container .flat.edit-folder-button, .flat.button, .flat.icon-button {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a3a3a;
+ background-color: transparent; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus, .flat.button:focus, .flat.icon-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a414b;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus:hover, .flat.button:focus:hover, .flat.icon-button:focus:hover {
+ background-color: #404852;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:focus:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:focus:active, .flat.button:focus:active, .flat.icon-button:focus:active {
+ background-color: #474f59;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:hover, .flat.button:hover, .flat.icon-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #424242; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:insensitive, .app-folder-dialog .folder-name-container .flat.edit-folder-button:insensitive, .flat.button:insensitive, .flat.icon-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05); }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:active, .flat.button:active, .flat.icon-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #494949; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked, .flat.button:checked, .flat.icon-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #515151; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked:hover, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked:hover, .flat.button:checked:hover, .flat.icon-button:checked:hover {
+ background-color: #595959; }
+ #LookingGlassDialog > #Toolbar .flat.lg-toolbar-button:checked:active, .app-folder-dialog .folder-name-container .flat.edit-folder-button:checked:active, .flat.button:checked:active, .flat.icon-button:checked:active {
+ background-color: #606060; }
+
+.modal-dialog .modal-dialog-linked-button, .hotplug-notification-item, .notification-banner .notification-button {
+ padding: 12px;
+ font-weight: bold !important;
+ transition-duration: 100ms;
+ color: white;
+ background-color: #525252; }
+ .modal-dialog .modal-dialog-linked-button:ltr, .hotplug-notification-item:ltr, .notification-banner .notification-button:ltr {
+ margin-right: 1px; }
+ .modal-dialog .modal-dialog-linked-button:rtl, .hotplug-notification-item:rtl, .notification-banner .notification-button:rtl {
+ margin-left: 1px; }
+ .modal-dialog .modal-dialog-linked-button:insensitive, .hotplug-notification-item:insensitive, .notification-banner .notification-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05); }
+ .modal-dialog .modal-dialog-linked-button:focus, .hotplug-notification-item:focus, .notification-banner .notification-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4f5761;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .modal-dialog .modal-dialog-linked-button:focus:hover, .hotplug-notification-item:focus:hover, .notification-banner .notification-button:focus:hover {
+ background-color: #565e67;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .modal-dialog .modal-dialog-linked-button:focus:active, .hotplug-notification-item:focus:active, .notification-banner .notification-button:focus:active {
+ background-color: #5d656e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .modal-dialog .modal-dialog-linked-button:hover, .hotplug-notification-item:hover, .notification-banner .notification-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #5a5a5a; }
+ .modal-dialog .modal-dialog-linked-button:active, .hotplug-notification-item:active, .notification-banner .notification-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #616161; }
+ .modal-dialog .modal-dialog-linked-button:checked, .hotplug-notification-item:checked, .notification-banner .notification-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: dimgray; }
+ .modal-dialog .modal-dialog-linked-button:checked:hover, .hotplug-notification-item:checked:hover, .notification-banner .notification-button:checked:hover {
+ background-color: #717171; }
+ .modal-dialog .modal-dialog-linked-button:checked:active, .hotplug-notification-item:checked:active, .notification-banner .notification-button:checked:active {
+ background-color: #787878; }
+ .modal-dialog .modal-dialog-linked-button:first-child:ltr, .hotplug-notification-item:first-child:ltr, .notification-banner .notification-button:first-child:ltr {
+ border-radius: 0 0 0 10px; }
+ .modal-dialog .modal-dialog-linked-button:last-child:ltr, .hotplug-notification-item:last-child:ltr, .notification-banner .notification-button:last-child:ltr {
+ border-radius: 0 0 10px 0;
+ margin-right: 0 !important; }
+ .modal-dialog .modal-dialog-linked-button:first-child:rtl, .hotplug-notification-item:first-child:rtl, .notification-banner .notification-button:first-child:rtl {
+ border-radius: 0 0 10px 0; }
+ .modal-dialog .modal-dialog-linked-button:last-child:rtl, .hotplug-notification-item:last-child:rtl, .notification-banner .notification-button:last-child:rtl {
+ border-radius: 0 0 0 10px;
+ margin-left: 0 !important; }
+ .modal-dialog .modal-dialog-linked-button:first-child:last-child, .hotplug-notification-item:first-child:last-child, .notification-banner .notification-button:first-child:last-child {
+ border-radius: 0 0 10px 10px !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important; }
+
+.screenshot-ui-show-pointer-button, .screenshot-ui-type-button {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .screenshot-ui-show-pointer-button:insensitive, .screenshot-ui-type-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-show-pointer-button:insensitive, .screenshot-ui-type-button:insensitive {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .screenshot-ui-show-pointer-button:insensitive:insensitive, .screenshot-ui-type-button:insensitive:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-show-pointer-button:focus, .screenshot-ui-type-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #2f3740;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .screenshot-ui-show-pointer-button:focus:hover, .screenshot-ui-type-button:focus:hover {
+ background-color: #363d47;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .screenshot-ui-show-pointer-button:focus:active, .screenshot-ui-type-button:focus:active {
+ background-color: #3c444e;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .screenshot-ui-show-pointer-button:hover, .screenshot-ui-type-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #363636; }
+ .screenshot-ui-show-pointer-button:active, .screenshot-ui-type-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3d3d3d; }
+ .screenshot-ui-show-pointer-button:outlined, .screenshot-ui-type-button:outlined, .screenshot-ui-show-pointer-button:checked, .screenshot-ui-type-button:checked {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #454545; }
+ .screenshot-ui-show-pointer-button:outlined:hover, .screenshot-ui-type-button:outlined:hover, .screenshot-ui-show-pointer-button:checked:hover, .screenshot-ui-type-button:checked:hover {
+ background-color: #4d4d4d; }
+ .screenshot-ui-show-pointer-button:outlined:active, .screenshot-ui-type-button:outlined:active, .screenshot-ui-show-pointer-button:checked:active, .screenshot-ui-type-button:checked:active {
+ background-color: #545454; }
+
+/* General Typography */
+.app-folder-dialog .folder-name-container .folder-name-label, .app-folder-dialog .folder-name-container .folder-name-entry, .search-statustext {
+ font-weight: 800;
+ font-size: 20pt; }
+
+.lg-debug-flags-header, .message-dialog-content .message-dialog-title, .message-list .message-list-placeholder, .datemenu-today-button .date-label {
+ font-weight: 800;
+ font-size: 15pt; }
+
+.quick-toggle-menu .header .title {
+ font-weight: 700;
+ font-size: 15pt; }
+
+.message-dialog-content .message-dialog-title.lightweight, .headline {
+ font-weight: 700;
+ font-size: 13pt; }
+
+.lg-extension-name, .osd-window, .dialog-list .dialog-list-title, .message-list-controls, .weather-button .weather-forecast-temp, .weather-button .weather-header, .world-clocks-button .world-clocks-time, .world-clocks-button .world-clocks-header, .events-button .events-title, .calendar .calendar-month-header .calendar-month-label, .datemenu-today-button .day-label, .popup-menu-ornament {
+ font-weight: 700;
+ font-size: 11pt; }
+
+.quick-toggle-menu .header .subtitle, .app-menu .popup-inactive-menu-item:first-child > StLabel {
+ font-weight: 700;
+ font-size: 9pt; }
+
+.login-dialog-not-listed-label, .lg-completions-text, .caps-lock-warning-label, #dash, .icon-label-button-container, .prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label, .run-dialog .run-dialog-description, .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-description, .weather-button .weather-forecast-time, .world-clocks-button .world-clocks-timezone, .events-button .event-time {
+ font-weight: 400;
+ font-size: 9pt; }
+
+.calendar .calendar-day-base.calendar-day-heading, .calendar .calendar-day-base {
+ font-weight: 400;
+ font-size: 8pt; }
+
+.unlock-dialog-clock-time, #panel, .weather-button .weather-forecast-time, .world-clocks-button .world-clocks-timezone, .world-clocks-button .world-clocks-time, .events-button .event-time, .calendar .calendar-day-base {
+ font-feature-settings: "tnum"; }
+
+/* WIDGETS */
+.shell-link {
+ color: #8fbbf0; }
+ .shell-link:hover {
+ color: #bcd6f6; }
+
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }
+
+.icon-dropshadow {
+ icon-shadow: 0 1px 5px rgba(0, 0, 0, 0.8); }
+
+/* Entries */
+StEntry {
+ border-radius: 8px;
+ padding: 8px;
+ color: white;
+ background-color: #3c3c3c;
+ color: rgba(255, 255, 255, 0.7);
+ border: 2px solid #3c3c3c;
+ selection-background-color: #3584e4;
+ selected-color: #fff; }
+ StEntry:hover {
+ background-color: #565656;
+ border-color: #565656;
+ color: rgba(255, 255, 255, 0.7); }
+ StEntry:focus {
+ background-color: #3c4045;
+ border-color: #3584e4;
+ color: white; }
+ StEntry:insensitive {
+ background-color: #383838;
+ border-color: #383838;
+ color: #979797; }
+ StEntry StIcon.capslock-warning {
+ icon-size: 16px;
+ warning-color: #cd9309;
+ padding: 0 4px; }
+ StEntry StIcon.peek-password {
+ icon-size: 1.09em;
+ padding: 0 4px; }
+ StEntry StLabel.hint-text {
+ margin-left: 2px;
+ color: rgba(255, 255, 255, 0.7); }
+
+/* Buttons */
+.button, .icon-button {
+ min-height: 22px; }
+
+.icon-button {
+ border-radius: 99px;
+ padding: 12px;
+ min-height: 16px; }
+ .icon-button StIcon {
+ icon-size: 1.09em;
+ -st-icon-style: symbolic; }
+
+/* Check Boxes */
+.check-box StBoxLayout {
+ spacing: .8em; }
+
+.check-box StBin {
+ width: 24px;
+ height: 24px;
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
+
+.check-box:focus StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
+
+.check-box:checked StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
+
+.check-box:focus:checked StBin {
+ background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
+
+/* Switches */
+.toggle-switch {
+ color: white;
+ height: 26px;
+ width: 48px;
+ background-size: contain;
+ background-image: url("resource:///org/gnome/shell/theme/toggle-off.svg"); }
+ .toggle-switch:checked {
+ background-image: url("resource:///org/gnome/shell/theme/toggle-on.svg"); }
+
+/* Slider */
+.slider {
+ -barlevel-height: 4px;
+ -barlevel-background-color: rgba(255, 255, 255, 0.2);
+ -barlevel-border-width: 2px;
+ -barlevel-border-color: transparent;
+ -barlevel-active-background-color: #3584e4;
+ -barlevel-active-border-color: transparent;
+ -barlevel-overdrive-color: #c01c28;
+ -barlevel-overdrive-border-color: transparent;
+ -barlevel-overdrive-separator-width: 1px;
+ -slider-handle-radius: 8px;
+ -slider-handle-border-width: 0;
+ -slider-handle-border-color: transparent; }
+
+/* Scrollbars */
+StScrollView.vfade {
+ -st-vfade-offset: 68px; }
+
+StScrollView.hfade {
+ -st-hfade-offset: 68px; }
+
+StScrollBar {
+ padding: 0; }
+ StScrollView StScrollBar {
+ min-width: 8px;
+ min-height: 8px; }
+ StScrollBar StBin#trough {
+ border-radius: 0;
+ background-color: transparent; }
+ StScrollBar StButton#vhandle, StScrollBar StButton#hhandle {
+ border-radius: 8px;
+ background-color: #6e6e6e;
+ border: 3px solid transparent;
+ transition: 500ms all ease; }
+ StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover {
+ background-color: #979797; }
+ StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active {
+ background-color: #838383; }
+
+/* Popovers/Menus */
+.popup-menu-boxpointer, .candidate-popup-boxpointer {
+ -arrow-rise: 6px; }
+
+.popup-menu {
+ min-width: 15em;
+ color: white; }
+ .popup-menu.panel-menu {
+ margin-bottom: 1.75em; }
+
+.popup-menu-content, .candidate-popup-content {
+ padding: 6px;
+ border-radius: 20px;
+ border: 1px solid #3c3c3c;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
+ background-color: #303030; }
+
+.popup-menu-item {
+ padding: 9px 12px;
+ border-radius: 12px;
+ spacing: 6px;
+ transition-duration: 100ms;
+ background-color: transparent; }
+ .popup-menu-item:ltr {
+ padding-left: 6px; }
+ .popup-menu-item:rtl {
+ padding-right: 6px; }
+ .popup-menu-item:focus, .popup-menu-item:hover {
+ background-color: #494949 !important; }
+ .popup-menu-item:focus:active, .popup-menu-item:hover:active {
+ background-color: #4e4e4e !important; }
+ .popup-menu-item:checked {
+ background-color: #424242 !important; }
+ .popup-menu-item:checked {
+ margin-bottom: 0;
+ box-shadow: inset 0 -1px 0 0 #353535;
+ border-radius: 8px 8px 0 0; }
+ .popup-menu-item:checked:focus, .popup-menu-item:checked:hover {
+ background-color: #494949 !important; }
+ .popup-menu-item:checked:active {
+ background-color: #4e4e4e !important; }
+ .popup-menu-item:active {
+ background-color: #5b5b5b;
+ color: white; }
+ .popup-menu-item:insensitive {
+ color: rgba(255, 255, 255, 0.5); }
+ .popup-menu-item .toggle-switch:ltr {
+ margin-left: 4px; }
+ .popup-menu-item .toggle-switch:rtl {
+ margin-right: 4px; }
+
+.popup-inactive-menu-item {
+ color: white; }
+ .popup-inactive-menu-item:insensitive {
+ color: #979797; }
+
+.popup-menu-arrow,
+.popup-menu-icon {
+ icon-size: 16px !important; }
+
+.popup-sub-menu {
+ background-color: #424242;
+ border-radius: 0 0 8px 8px; }
+ .popup-sub-menu .popup-menu-ornament {
+ min-width: 1.09em !important; }
+ .popup-sub-menu .popup-menu-item {
+ border-radius: 0;
+ margin: 0; }
+ .popup-sub-menu .popup-menu-item:last-child {
+ border-radius: 0 0 8px 8px; }
+ .popup-sub-menu .popup-menu-item:focus, .popup-sub-menu .popup-menu-item:hover {
+ background-color: #494949 !important; }
+ .popup-sub-menu .popup-menu-item:checked {
+ background-color: #424242 !important; }
+ .popup-sub-menu .popup-menu-item:checked:focus, .popup-sub-menu .popup-menu-item:checked:hover {
+ background-color: #565656 !important; }
+ .popup-sub-menu .popup-menu-item:active {
+ background-color: #4e4e4e !important; }
+ .popup-sub-menu .popup-menu-section .popup-menu-item:last-child:hover, .popup-sub-menu .popup-menu-section .popup-menu-item:last-child:focus {
+ border-radius: 0; }
+ .popup-sub-menu .popup-menu-section:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 8px 8px; }
+
+.popup-menu-ornament {
+ width: 1.2em;
+ text-align: center !important; }
+ .popup-menu-ornament:ltr {
+ text-align: right; }
+ .popup-menu-ornament:rtl {
+ text-align: left; }
+
+.popup-separator-menu-item {
+ margin: 6px 0;
+ padding: 0 !important; }
+ .popup-separator-menu-item:ltr {
+ margin-right: 4px; }
+ .popup-separator-menu-item:rtl {
+ margin-left: 4px; }
+ .popup-separator-menu-item .popup-separator-menu-item-separator {
+ height: 1px;
+ background-color: rgba(255, 255, 255, 0.1); }
+ .popup-separator-menu-item .popup-menu-ornament {
+ width: 0 !important; }
+ .popup-sub-menu .popup-separator-menu-item {
+ background-color: transparent; }
+ .popup-sub-menu .popup-separator-menu-item:ltr {
+ margin-right: 2.5em; }
+ .popup-sub-menu .popup-separator-menu-item:rtl {
+ margin-left: 2.5em; }
+ .popup-sub-menu .popup-separator-menu-item .popup-separator-menu-item-separator {
+ background-color: rgba(255, 255, 255, 0.1); }
+
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; }
+
+.app-menu {
+ max-width: 27.25em; }
+ .app-menu .popup-menu-ornament {
+ width: 0 !important; }
+ .app-menu .popup-inactive-menu-item:first-child > StLabel:ltr {
+ margin-right: 8px; }
+ .app-menu .popup-inactive-menu-item:first-child > StLabel:rtl {
+ margin-left: 8px; }
+
+/* Date/Time Menu */
+#calendarArea {
+ padding: 4px; }
+
+.datemenu-calendar-column {
+ spacing: 6px; }
+ .datemenu-calendar-column:ltr {
+ padding-left: 6px; }
+ .datemenu-calendar-column:rtl {
+ padding-right: 6px; }
+ .datemenu-calendar-column .datemenu-displays-box {
+ spacing: 6px; }
+
+/* today button (the date) */
+.datemenu-today-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none;
+ box-shadow: none !important;
+ padding: 9px; }
+ .datemenu-today-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .datemenu-today-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .datemenu-today-button:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .datemenu-today-button:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .datemenu-today-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .datemenu-today-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+
+/* Calendar */
+.calendar {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none;
+ box-shadow: none !important;
+ margin-top: 0; }
+ .calendar:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+ .calendar:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .calendar:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .calendar:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .calendar:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .calendar:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+ .calendar .calendar-month-header .calendar-change-month-back StIcon,
+ .calendar .calendar-month-header .calendar-change-month-forward StIcon {
+ icon-size: 1.09em; }
+ .calendar .calendar-month-header .calendar-month-label {
+ color: white;
+ padding: 8px 0; }
+ .calendar .calendar-month-header .pager-button {
+ background-color: transparent;
+ height: 32px;
+ width: 32px;
+ margin: 2px;
+ border-radius: 6px; }
+ .calendar .calendar-month-header .pager-button:hover, .calendar .calendar-month-header .pager-button:focus {
+ background-color: #494949; }
+ .calendar .calendar-month-header .pager-button:active {
+ background-color: #4e4e4e; }
+ .calendar .calendar-day-base {
+ text-align: center;
+ margin: 2px;
+ padding: 0 !important;
+ height: 3em !important;
+ width: 3em !important;
+ border-radius: 99px;
+ transition-duration: 100ms; }
+ .calendar .calendar-day-base:hover {
+ background-color: #494949; }
+ .calendar .calendar-day-base:focus {
+ background-color: #314154;
+ color: #fff;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .calendar .calendar-day-base:active, .calendar .calendar-day-base:selected {
+ color: white;
+ background-color: #4e4e4e; }
+ .calendar .calendar-day-base:active:focus, .calendar .calendar-day-base:selected:focus {
+ background-color: #49596c; }
+ .calendar .calendar-day-base.calendar-day-heading {
+ color: #979797;
+ padding-top: 6px;
+ height: 16px !important;
+ font-weight: bold; }
+ .calendar .calendar-nonwork-day {
+ color: #979797; }
+ .calendar .calendar-other-month-day {
+ color: rgba(255, 255, 255, 0.5); }
+ .calendar .calendar-other-month-day.calendar-nonwork-day {
+ color: rgba(151, 151, 151, 0.5); }
+ .calendar .calendar-today {
+ background-color: #3584e4;
+ font-weight: 800;
+ color: #fff !important; }
+ .calendar .calendar-today:hover, .calendar .calendar-today:focus {
+ background-color: #428ce6;
+ color: inherit; }
+ .calendar .calendar-today:active, .calendar .calendar-today:selected {
+ background-color: #3584e4;
+ color: inherit; }
+ .calendar .calendar-today:active:hover, .calendar .calendar-today:active:focus, .calendar .calendar-today:selected:hover, .calendar .calendar-today:selected:focus {
+ background-color: #428ce6;
+ color: inherit; }
+ .calendar .calendar-day-with-events {
+ background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg");
+ background-size: contain; }
+ .calendar .calendar-week-number {
+ font-size: 7pt;
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: 6px;
+ padding: 0 6px;
+ border-radius: 3px;
+ background-color: #2b2b2b;
+ color: #979797; }
+
+/* Events */
+.events-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3f3f3f;
+ padding: 12px; }
+ .events-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .events-button:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .events-button:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .events-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .events-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+ .events-button .events-box {
+ spacing: 6px; }
+ .events-button .events-list {
+ spacing: 12px; }
+ .events-button .events-title {
+ color: #979797;
+ margin-bottom: 4px; }
+ .events-button .event-time {
+ color: #979797; }
+
+/* World clocks */
+.world-clocks-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3f3f3f;
+ padding: 12px; }
+ .world-clocks-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .world-clocks-button:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .world-clocks-button:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .world-clocks-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .world-clocks-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+ .world-clocks-button .world-clocks-grid {
+ spacing-rows: 6px;
+ spacing-columns: 12px; }
+ .world-clocks-button .world-clocks-header {
+ color: #979797; }
+ .world-clocks-button .world-clocks-city {
+ color: white; }
+ .world-clocks-button .world-clocks-time {
+ color: white; }
+ .world-clocks-button .world-clocks-time:ltr {
+ text-align: right; }
+ .world-clocks-button .world-clocks-time:rtl {
+ text-align: left; }
+ .world-clocks-button .world-clocks-timezone {
+ color: #979797; }
+
+/* Weather */
+.weather-button {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3f3f3f;
+ padding: 12px; }
+ .weather-button:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .weather-button:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .weather-button:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .weather-button:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .weather-button:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+ .weather-button .weather-box {
+ spacing: 10px; }
+ .weather-button .weather-header-box {
+ spacing: 6px; }
+ .weather-button .weather-header {
+ color: #979797; }
+ .weather-button .weather-header.location {
+ font-weight: normal; }
+ .weather-button .weather-grid {
+ spacing-rows: 6px;
+ spacing-columns: 12px; }
+ .weather-button .weather-forecast-time {
+ color: #b3b3b3;
+ padding-top: 0.2em;
+ padding-bottom: 0.4em; }
+ .weather-button .weather-forecast-icon {
+ icon-size: 2.18em; }
+
+/* Message List */
+.message-list {
+ width: 29em;
+ border: solid rgba(255, 255, 255, 0.1); }
+ .message-list:ltr {
+ margin-left: 0;
+ margin-right: 4px;
+ padding-right: 6px;
+ border-right-width: 1px; }
+ .message-list:rtl {
+ margin-right: 0;
+ margin-left: 4px;
+ padding-left: 6px;
+ border-left-width: 1px; }
+ .message-list .message-list-placeholder {
+ color: rgba(151, 151, 151, 0.5); }
+ .message-list .message-list-placeholder > StIcon {
+ icon-size: 3.27em;
+ margin-bottom: 12px;
+ -st-icon-style: symbolic; }
+
+.message-list-sections {
+ spacing: 6px;
+ margin: 0;
+ padding-bottom: 6px; }
+ .message-list-sections:ltr {
+ margin-right: 12px; }
+ .message-list-sections:rtl {
+ margin-left: 12px; }
+
+.message-list-section,
+.message-list-section-list {
+ spacing: 6px; }
+
+.message-list-controls {
+ padding: 6px;
+ spacing: 6px; }
+ .message-list-controls .dnd-button {
+ border-width: 2px;
+ border-color: transparent;
+ border-radius: 32px;
+ border-style: solid; }
+ .message-list-controls .dnd-button:focus {
+ border-color: rgba(53, 132, 228, 0.6); }
+
+.message {
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3f3f3f; }
+ .message:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .message:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .message:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .message:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .message:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+ .message .message-icon-bin {
+ padding: 18px; }
+ .message .message-icon-bin:ltr {
+ padding-right: 6px; }
+ .message .message-icon-bin:rtl {
+ padding-left: 6px; }
+ .message .message-icon-bin > StIcon {
+ icon-size: 2.18em;
+ -st-icon-style: symbolic; }
+ .message .message-icon-bin > .fallback-app-icon {
+ width: 1.09em;
+ height: 1.09em; }
+ .message .message-content {
+ spacing: 4px;
+ padding: 9px;
+ margin-bottom: 8px; }
+ .message .message-title {
+ font-weight: bold;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-top: 0.57em; }
+ .message .message-secondary-bin {
+ padding: 0 8px; }
+ .message .message-secondary-bin > .event-time {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 9pt;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-bottom: 0.13em; }
+ .message .message-secondary-bin > .event-time:ltr {
+ text-align: right; }
+ .message .message-secondary-bin > .event-time:rtl {
+ text-align: left; }
+ .message .message-close-button {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: 99px;
+ padding: 5px;
+ margin: 1px; }
+ .message .message-close-button:hover {
+ background-color: rgba(255, 255, 255, 0.2); }
+ .message .message-close-button:active {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .message .message-close-button StIcon {
+ icon-size: 1.09em; }
+ .message .message-body {
+ color: #e6e6e6; }
+
+.url-highlighter {
+ link-color: #8fbbf0; }
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 18px;
+ margin: 12px 0;
+ border-radius: 8px;
+ color: white; }
+ .message-media-control:hover {
+ background-color: #565656;
+ color: white; }
+ .message-media-control:active {
+ background-color: #5b5b5b;
+ color: white; }
+ .message-media-control:insensitive {
+ color: #a4a4a4; }
+ .message-media-control:last-child:ltr {
+ margin-right: 12px; }
+ .message-media-control:last-child:rtl {
+ margin-left: 12px; }
+ .message-media-control StIcon {
+ icon-size: 1.09em; }
+
+.media-message-cover-icon {
+ icon-size: 3.27em !important;
+ border-radius: 8px; }
+ .media-message-cover-icon.fallback {
+ color: #d4d4d4;
+ background-color: #303030;
+ border: 1px solid transparent;
+ border-radius: 8px;
+ icon-size: 2.18em !important;
+ padding: 14px; }
+
+.candidate-popup-content {
+ padding: 6px;
+ spacing: 6px; }
+
+.candidate-index {
+ padding: 0;
+ padding-right: 6px;
+ color: #979797; }
+
+.candidate-box {
+ padding: 6px 12px 6px 12px;
+ border-radius: 8px; }
+ .candidate-box:selected {
+ background-color: #3584e4;
+ color: #fff; }
+ .candidate-box:hover {
+ background-color: #494949;
+ color: white; }
+
+.candidate-page-button-box {
+ height: 2em; }
+ .vertical .candidate-page-button-box {
+ padding-top: 12px; }
+ .horizontal .candidate-page-button-box {
+ padding-left: 12px; }
+
+.candidate-page-button {
+ padding: 6px; }
+ .candidate-page-button StIcon {
+ icon-size: 1.09em; }
+
+.candidate-page-button-previous {
+ border-radius: 8px 0px 0px 8px;
+ border-right-width: 0;
+ box-shadow: none; }
+
+.candidate-page-button-next {
+ border-radius: 0px 8px 8px 0px;
+ box-shadow: none; }
+
+/* Notifications & Message Tray */
+.notification-banner {
+ min-height: 64px;
+ width: 34em;
+ box-shadow: 0 2px 4px 2px rgba(0, 0, 0, 0.2);
+ border-radius: 12px;
+ margin: 4px; }
+ .notification-banner .notification-actions {
+ spacing: 0; }
+
+.summary-source-counter {
+ font-size: 10pt;
+ font-weight: bold;
+ height: 1.6em;
+ width: 1.6em;
+ -shell-counter-overlap-x: 3px;
+ -shell-counter-overlap-y: 3px;
+ background-color: #3584e4;
+ color: #fff;
+ border: 2px solid white;
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.5);
+ border-radius: 0.9em; }
+
+.chat-body {
+ spacing: 5px; }
+
+.chat-response {
+ margin: 5px; }
+
+.chat-log-message {
+ color: #e6e6e6; }
+
+.chat-new-group {
+ padding-top: 1em; }
+
+.chat-received {
+ padding-left: 4px; }
+ .chat-received:rtl {
+ padding-left: 0px;
+ padding-right: 4px; }
+
+.chat-sent {
+ padding-left: 18pt;
+ color: white; }
+ .chat-sent:rtl {
+ padding-left: 0;
+ padding-right: 18pt; }
+
+.chat-meta-message {
+ padding-left: 4px;
+ font-size: 9pt;
+ font-weight: bold;
+ color: white; }
+ .chat-meta-message:rtl {
+ padding-left: 0;
+ padding-right: 4px; }
+
+.hotplug-notification-item-icon {
+ icon-size: 24px;
+ padding: 0 4px; }
+
+/* Modal Dialogs */
+.modal-dialog .modal-dialog-content-box {
+ margin: 32px 40px;
+ spacing: 32px;
+ max-width: 28em; }
+
+/* End Session Dialog */
+.end-session-dialog {
+ width: 30em; }
+ .end-session-dialog .end-session-dialog-battery-warning,
+ .end-session-dialog .dialog-list-title {
+ color: #cd9309; }
+
+/* Message Dialog */
+.message-dialog-content {
+ spacing: 18px; }
+ .message-dialog-content .message-dialog-title {
+ text-align: center; }
+ .message-dialog-content .message-dialog-description {
+ text-align: center; }
+
+/* Dialog List */
+.dialog-list {
+ spacing: 18px; }
+ .dialog-list .dialog-list-title {
+ text-align: center; }
+ .dialog-list .dialog-list-scrollview {
+ max-height: 200px; }
+ .dialog-list .dialog-list-box {
+ spacing: 1em; }
+ .dialog-list .dialog-list-box .dialog-list-item {
+ spacing: 1em; }
+ .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-title {
+ font-weight: bold; }
+ .dialog-list .dialog-list-box .dialog-list-item .dialog-list-item-description {
+ color: #f2f2f2; }
+
+/* Run Dialog */
+.run-dialog .modal-dialog-content-box {
+ margin-top: 24px;
+ margin-bottom: 14px; }
+
+.run-dialog .run-dialog-entry {
+ width: 20em; }
+
+.run-dialog .run-dialog-description {
+ text-align: center;
+ color: #cccccc; }
+
+/* Password or Authentication Dialog */
+.prompt-dialog {
+ width: 28em; }
+ .prompt-dialog .modal-dialog-content-box {
+ margin-bottom: 24px; }
+
+.prompt-dialog-password-grid {
+ spacing-rows: 8px;
+ spacing-columns: 4px; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry {
+ width: auto; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry:ltr {
+ margin-left: 20px; }
+ .prompt-dialog-password-grid .prompt-dialog-password-entry:rtl {
+ margin-right: 20px; }
+
+.prompt-dialog-password-layout {
+ spacing: 8px; }
+
+.prompt-dialog-password-entry {
+ width: 20em; }
+
+.prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label {
+ text-align: center; }
+
+.prompt-dialog-error-label {
+ color: #cd9309; }
+
+/* Polkit Dialog */
+.polkit-dialog-user-layout {
+ text-align: center;
+ spacing: 8px;
+ margin-bottom: 6px; }
+ .polkit-dialog-user-layout .polkit-dialog-user-root-label {
+ color: #cd9309; }
+
+/* Audio selection dialog */
+.audio-device-selection-dialog .modal-dialog-content-box {
+ margin-bottom: 28px; }
+
+.audio-device-selection-dialog .audio-selection-box {
+ spacing: 20px; }
+
+.audio-selection-device {
+ border-radius: 16px; }
+ .audio-selection-device:hover, .audio-selection-device:focus {
+ background-color: #494949; }
+ .audio-selection-device:active {
+ background-color: #3584e4;
+ color: #fff; }
+
+.audio-selection-device-box {
+ padding: 20px;
+ spacing: 20px; }
+
+.audio-selection-device-icon {
+ icon-size: 4.36em; }
+
+/* Welcome dialog */
+.welcome-dialog-image {
+ background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
+ background-size: contain;
+ /* Reasonable maximum dimensions */
+ height: 300px;
+ width: 300px; }
+
+/* Access portal dialog */
+.access-dialog {
+ text-align: center; }
+
+/* OSD */
+.osd-window {
+ text-align: center;
+ font-weight: bold;
+ spacing: 12px;
+ padding: 12px 18px;
+ margin-bottom: 4em; }
+ .osd-window > * {
+ spacing: 8px; }
+ .osd-window StIcon {
+ icon-size: 2.18em; }
+ .osd-window StLabel:ltr {
+ margin-right: 6px; }
+ .osd-window StLabel:rtl {
+ margin-left: 6px; }
+ .osd-window .level {
+ margin-bottom: 4px;
+ height: 6px;
+ min-width: 10.9em;
+ -barlevel-height: 6px;
+ -barlevel-background-color: rgba(255, 255, 255, 0.1);
+ -barlevel-active-background-color: white;
+ -barlevel-overdrive-color: #c01c28;
+ -barlevel-overdrive-separator-width: 3px; }
+ .osd-window .level:first-child {
+ margin-bottom: 0px; }
+ .osd-window .level:ltr {
+ margin-right: 6px; }
+ .osd-window .level:rtl {
+ margin-left: 6px; }
+
+.osd-monitor-label {
+ border-radius: 16px;
+ font-size: 3em;
+ font-weight: bold;
+ margin: 12px;
+ text-align: center;
+ min-width: 1.3em; }
+
+/* Pad OSD */
+.pad-osd-window {
+ padding: 32px;
+ background-color: rgba(0, 0, 0, 0.8); }
+ .pad-osd-window .pad-osd-title-box {
+ spacing: 12px; }
+ .pad-osd-window .pad-osd-title-menu-box {
+ spacing: 6px; }
+
+.combo-box-label {
+ width: 15em; }
+
+/* App Switcher */
+.switcher-popup {
+ padding: 0;
+ spacing: 24px; }
+
+.switcher-list {
+ padding: 10px;
+ border-radius: 24px;
+ box-shadow: 0 8px 8px 0 rgba(0, 0, 0, 0.1); }
+ .switcher-list .switcher-list-item-container {
+ spacing: 12px; }
+ .switcher-list .item-box {
+ background-color: transparent; }
+ .switcher-list .item-box:hover {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .switcher-list .item-box:selected, .switcher-list .item-box:focus {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .switcher-list .item-box:selected:hover, .switcher-list .item-box:focus:hover {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .switcher-list .item-box:selected:active, .switcher-list .item-box:focus:active {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .switcher-list .item-box:active {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .switcher-list .item-box:outlined, .switcher-list .item-box:checked {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .switcher-list .item-box:outlined:active, .switcher-list .item-box:checked:active {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .switcher-list .item-box:outlined:hover, .switcher-list .item-box:checked:hover {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .switcher-list .item-box:drop {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+ .switcher-list .item-box:hover {
+ background: none; }
+ .switcher-list .separator {
+ width: 1px;
+ background: rgba(255, 255, 255, 0.1); }
+ .switcher-list .thumbnail-box {
+ padding: 2px;
+ spacing: 6px; }
+ .switcher-list .thumbnail {
+ width: 256px;
+ border-radius: 8px; }
+
+.switcher-arrow {
+ border-color: rgba(255, 255, 255, 0.8);
+ color: rgba(255, 255, 255, 0.8); }
+ .switcher-arrow:highlighted {
+ border-color: white;
+ color: white; }
+
+.input-source-switcher-symbol {
+ font-size: 34pt;
+ width: 96px;
+ height: 96px; }
+
+.cycler-highlight {
+ border: 5px solid #3584e4; }
+
+/* Workspace Switcher */
+.workspace-switcher {
+ margin-bottom: 4em;
+ spacing: 12px;
+ padding: 12px 18px; }
+
+.ws-switcher-indicator {
+ background-color: rgba(255, 255, 255, 0.5);
+ padding: 0.1816666667em;
+ margin: 0.9083333333em;
+ border-radius: 2.18em; }
+ .ws-switcher-indicator:active {
+ background-color: white;
+ padding: 0.3633333333em;
+ margin: 0.7266666667em; }
+
+.icon-label-button-container {
+ spacing: 6px; }
+ .icon-label-button-container StIcon {
+ icon-size: 32px; }
+
+.screenshot-ui-panel {
+ border-radius: 37px;
+ padding: 18px;
+ padding-bottom: 12px;
+ margin-bottom: 4em;
+ spacing: 12px; }
+
+.screenshot-ui-close-button {
+ padding: 6px !important;
+ margin-top: 12px;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2); }
+ .screenshot-ui-close-button.left {
+ margin-left: 12px; }
+ .screenshot-ui-close-button.right {
+ margin-right: 12px; }
+
+.screenshot-ui-type-button {
+ min-width: 48px;
+ padding: 12px 18px !important;
+ border-radius: 19px; }
+
+.screenshot-ui-capture-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ border: 4px white;
+ padding: 4px; }
+ .screenshot-ui-capture-button .screenshot-ui-capture-button-circle {
+ background-color: white;
+ transition-duration: 200ms;
+ border-radius: 99px; }
+ .screenshot-ui-capture-button .screenshot-ui-capture-button-circle:hover, .screenshot-ui-capture-button .screenshot-ui-capture-button-circle:focus {
+ background-color: #494949; }
+ .screenshot-ui-capture-button:hover .screenshot-ui-capture-button-circle, .screenshot-ui-capture-button:focus .screenshot-ui-capture-button-circle {
+ background-color: #d9d9d9; }
+ .screenshot-ui-capture-button:active .screenshot-ui-capture-button-circle {
+ background-color: gray; }
+ .screenshot-ui-capture-button:cast .screenshot-ui-capture-button-circle {
+ background-color: #c01c28; }
+ .screenshot-ui-capture-button:cast:hover .screenshot-ui-capture-button-circle, .screenshot-ui-capture-button:cast:focus .screenshot-ui-capture-button-circle {
+ background-color: #d61f2d; }
+ .screenshot-ui-capture-button:cast:active .screenshot-ui-capture-button-circle {
+ background-color: #a11722; }
+
+.screenshot-ui-shot-cast-container {
+ background-color: #303030;
+ border-radius: 16px;
+ padding: 3px;
+ spacing: 3px; }
+ .screenshot-ui-shot-cast-container:ltr {
+ margin-left: 3px; }
+ .screenshot-ui-shot-cast-container:rtl {
+ margin-right: 3px; }
+
+.screenshot-ui-shot-cast-button {
+ padding: 6px 12px;
+ background-color: transparent;
+ border-radius: 13px; }
+ .screenshot-ui-shot-cast-button:hover, .screenshot-ui-shot-cast-button:focus {
+ background-color: #3c3c3c; }
+ .screenshot-ui-shot-cast-button:active {
+ background-color: #5b5b5b; }
+ .screenshot-ui-shot-cast-button:checked {
+ background-color: white;
+ color: black; }
+ .screenshot-ui-shot-cast-button:insensitive {
+ color: rgba(255, 255, 255, 0.5); }
+ .screenshot-ui-shot-cast-button StIcon {
+ icon-size: 1.09em; }
+
+.screenshot-ui-show-pointer-button {
+ border-radius: 99px;
+ padding: 12px !important; }
+ .screenshot-ui-show-pointer-button StIcon {
+ icon-size: 1.09em; }
+
+.screenshot-ui-area-indicator-shade {
+ background-color: rgba(0, 0, 0, 0.3); }
+
+.screenshot-ui-area-selector .screenshot-ui-area-indicator-shade {
+ background-color: rgba(0, 0, 0, 0.5); }
+
+.screenshot-ui-area-selector .screenshot-ui-area-indicator-selection {
+ border: 2px white; }
+
+.screenshot-ui-area-selector-handle {
+ border-radius: 99px;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px rgba(0, 0, 0, 0.2);
+ width: 24px;
+ height: 24px; }
+
+.screenshot-ui-window-selector {
+ background-color: #232323; }
+ .screenshot-ui-window-selector .screenshot-ui-window-selector-window-container {
+ margin: 100px; }
+ .screenshot-ui-window-selector:primary-monitor .screenshot-ui-window-selector-window-container {
+ margin-bottom: 200px; }
+
+.screenshot-ui-window-selector-window-border {
+ transition-duration: 200ms;
+ border-radius: 16px;
+ border: 6px transparent; }
+
+.screenshot-ui-window-selector-check {
+ transition-duration: 200ms;
+ color: transparent;
+ border-radius: 99px;
+ border-width: 12px;
+ icon-size: 24px; }
+
+.screenshot-ui-window-selector-window:hover .screenshot-ui-window-selector-window-border {
+ border-color: #185fb4; }
+
+.screenshot-ui-window-selector-window:checked .screenshot-ui-window-selector-window-border {
+ border-color: #3584e4;
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.screenshot-ui-window-selector-window:checked .screenshot-ui-window-selector-check {
+ color: #fff;
+ background-color: #3584e4; }
+
+.screenshot-ui-screen-selector {
+ transition-duration: 200ms;
+ background-color: rgba(0, 0, 0, 0.5); }
+ .screenshot-ui-screen-selector:hover {
+ background-color: rgba(0, 0, 0, 0.3); }
+ .screenshot-ui-screen-selector:active {
+ background-color: rgba(0, 0, 0, 0.7); }
+ .screenshot-ui-screen-selector:checked {
+ background-color: transparent;
+ border: 2px white; }
+
+.screenshot-ui-tooltip {
+ color: white;
+ background-color: #232323;
+ border-radius: 99px;
+ padding: 6px 12px;
+ text-align: center;
+ -y-offset: 24px; }
+
+/* Top Bar */
+#panel {
+ background-color: #000;
+ font-weight: bold;
+ height: 2.2em;
+ transition-duration: 250ms; }
+ #panel.unlock-screen, #panel.login-screen, #panel:overview {
+ background-color: transparent; }
+ #panel .panel-button {
+ font-weight: bold;
+ color: #f2f2f2;
+ -natural-hpadding: 12px;
+ -minimum-hpadding: 6px;
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px; }
+ #panel .panel-button.clock-display .clock {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px; }
+ #panel .panel-button.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px #c01c28; }
+ #panel .panel-button.screen-sharing-indicator {
+ box-shadow: inset 0 0 0 100px #cd9309; }
+ #panel .panel-button.screen-sharing-indicator StBoxLayout {
+ margin: 0 6px; }
+ #panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
+ spacing: 6px; }
+ #panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
+ icon-size: 1.09em; }
+ #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.2); }
+ #panel .panel-button.clock-display:active, #panel .panel-button.clock-display:overview, #panel .panel-button.clock-display:focus, #panel .panel-button.clock-display:checked {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.2); }
+ #panel .panel-button.screen-recording-indicator:active, #panel .panel-button.screen-recording-indicator:overview, #panel .panel-button.screen-recording-indicator:focus, #panel .panel-button.screen-recording-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.85); }
+ #panel .panel-button.screen-sharing-indicator:active, #panel .panel-button.screen-sharing-indicator:overview, #panel .panel-button.screen-sharing-indicator:focus, #panel .panel-button.screen-sharing-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.85); }
+ #panel .panel-button:hover {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.15); }
+ #panel .panel-button.clock-display:hover {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.15); }
+ #panel .panel-button.screen-recording-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.9); }
+ #panel .panel-button.screen-sharing-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.9); }
+ #panel .panel-button:active:hover, #panel .panel-button:overview:hover, #panel .panel-button:focus:hover, #panel .panel-button:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.25); }
+ #panel .panel-button.clock-display:active:hover, #panel .panel-button.clock-display:overview:hover, #panel .panel-button.clock-display:focus:hover, #panel .panel-button.clock-display:checked:hover {
+ box-shadow: none; }
+ #panel .panel-button.clock-display:active:hover .clock, #panel .panel-button.clock-display:overview:hover .clock, #panel .panel-button.clock-display:focus:hover .clock, #panel .panel-button.clock-display:checked:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(242, 242, 242, 0.25); }
+ #panel .panel-button.screen-recording-indicator:active:hover, #panel .panel-button.screen-recording-indicator:overview:hover, #panel .panel-button.screen-recording-indicator:focus:hover, #panel .panel-button.screen-recording-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.8); }
+ #panel .panel-button.screen-sharing-indicator:active:hover, #panel .panel-button.screen-sharing-indicator:overview:hover, #panel .panel-button.screen-sharing-indicator:focus:hover, #panel .panel-button.screen-sharing-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.8); }
+ #panel .panel-button .system-status-icon {
+ icon-size: 1.09em;
+ padding: 5px;
+ margin: 0 4px; }
+ #panel .panel-button .panel-status-indicators-box .system-status-icon,
+ #panel .panel-button .panel-status-menu-box .system-status-icon {
+ margin: 0; }
+ #panel .panel-button .app-menu-icon {
+ -st-icon-style: symbolic; }
+ #panel #panelActivities.panel-button {
+ -natural-hpadding: 18px; }
+ #panel.unlock-screen .panel-button:active, #panel.unlock-screen .panel-button:overview, #panel.unlock-screen .panel-button:focus, #panel.unlock-screen .panel-button:checked, #panel.login-screen .panel-button:active, #panel.login-screen .panel-button:overview, #panel.login-screen .panel-button:focus, #panel.login-screen .panel-button:checked, #panel:overview .panel-button:active, #panel:overview .panel-button:overview, #panel:overview .panel-button:focus, #panel:overview .panel-button:checked {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
+ #panel.unlock-screen .panel-button.clock-display:active, #panel.unlock-screen .panel-button.clock-display:overview, #panel.unlock-screen .panel-button.clock-display:focus, #panel.unlock-screen .panel-button.clock-display:checked, #panel.login-screen .panel-button.clock-display:active, #panel.login-screen .panel-button.clock-display:overview, #panel.login-screen .panel-button.clock-display:focus, #panel.login-screen .panel-button.clock-display:checked, #panel:overview .panel-button.clock-display:active, #panel:overview .panel-button.clock-display:overview, #panel:overview .panel-button.clock-display:focus, #panel:overview .panel-button.clock-display:checked {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:active .clock, #panel.unlock-screen .panel-button.clock-display:overview .clock, #panel.unlock-screen .panel-button.clock-display:focus .clock, #panel.unlock-screen .panel-button.clock-display:checked .clock, #panel.login-screen .panel-button.clock-display:active .clock, #panel.login-screen .panel-button.clock-display:overview .clock, #panel.login-screen .panel-button.clock-display:focus .clock, #panel.login-screen .panel-button.clock-display:checked .clock, #panel:overview .panel-button.clock-display:active .clock, #panel:overview .panel-button.clock-display:overview .clock, #panel:overview .panel-button.clock-display:focus .clock, #panel:overview .panel-button.clock-display:checked .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:active, #panel.unlock-screen .panel-button.screen-recording-indicator:overview, #panel.unlock-screen .panel-button.screen-recording-indicator:focus, #panel.unlock-screen .panel-button.screen-recording-indicator:checked, #panel.login-screen .panel-button.screen-recording-indicator:active, #panel.login-screen .panel-button.screen-recording-indicator:overview, #panel.login-screen .panel-button.screen-recording-indicator:focus, #panel.login-screen .panel-button.screen-recording-indicator:checked, #panel:overview .panel-button.screen-recording-indicator:active, #panel:overview .panel-button.screen-recording-indicator:overview, #panel:overview .panel-button.screen-recording-indicator:focus, #panel:overview .panel-button.screen-recording-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.85); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:active, #panel.unlock-screen .panel-button.screen-sharing-indicator:overview, #panel.unlock-screen .panel-button.screen-sharing-indicator:focus, #panel.unlock-screen .panel-button.screen-sharing-indicator:checked, #panel.login-screen .panel-button.screen-sharing-indicator:active, #panel.login-screen .panel-button.screen-sharing-indicator:overview, #panel.login-screen .panel-button.screen-sharing-indicator:focus, #panel.login-screen .panel-button.screen-sharing-indicator:checked, #panel:overview .panel-button.screen-sharing-indicator:active, #panel:overview .panel-button.screen-sharing-indicator:overview, #panel:overview .panel-button.screen-sharing-indicator:focus, #panel:overview .panel-button.screen-sharing-indicator:checked {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.85); }
+ #panel.unlock-screen .panel-button:hover, #panel.login-screen .panel-button:hover, #panel:overview .panel-button:hover {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.1); }
+ #panel.unlock-screen .panel-button.clock-display:hover, #panel.login-screen .panel-button.clock-display:hover, #panel:overview .panel-button.clock-display:hover {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:hover .clock, #panel.login-screen .panel-button.clock-display:hover .clock, #panel:overview .panel-button.clock-display:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.1); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:hover, #panel.login-screen .panel-button.screen-recording-indicator:hover, #panel:overview .panel-button.screen-recording-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.9); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:hover, #panel.login-screen .panel-button.screen-sharing-indicator:hover, #panel:overview .panel-button.screen-sharing-indicator:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.9); }
+ #panel.unlock-screen .panel-button:active:hover, #panel.unlock-screen .panel-button:overview:hover, #panel.unlock-screen .panel-button:focus:hover, #panel.unlock-screen .panel-button:checked:hover, #panel.login-screen .panel-button:active:hover, #panel.login-screen .panel-button:overview:hover, #panel.login-screen .panel-button:focus:hover, #panel.login-screen .panel-button:checked:hover, #panel:overview .panel-button:active:hover, #panel:overview .panel-button:overview:hover, #panel:overview .panel-button:focus:hover, #panel:overview .panel-button:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
+ #panel.unlock-screen .panel-button.clock-display:active:hover, #panel.unlock-screen .panel-button.clock-display:overview:hover, #panel.unlock-screen .panel-button.clock-display:focus:hover, #panel.unlock-screen .panel-button.clock-display:checked:hover, #panel.login-screen .panel-button.clock-display:active:hover, #panel.login-screen .panel-button.clock-display:overview:hover, #panel.login-screen .panel-button.clock-display:focus:hover, #panel.login-screen .panel-button.clock-display:checked:hover, #panel:overview .panel-button.clock-display:active:hover, #panel:overview .panel-button.clock-display:overview:hover, #panel:overview .panel-button.clock-display:focus:hover, #panel:overview .panel-button.clock-display:checked:hover {
+ box-shadow: none; }
+ #panel.unlock-screen .panel-button.clock-display:active:hover .clock, #panel.unlock-screen .panel-button.clock-display:overview:hover .clock, #panel.unlock-screen .panel-button.clock-display:focus:hover .clock, #panel.unlock-screen .panel-button.clock-display:checked:hover .clock, #panel.login-screen .panel-button.clock-display:active:hover .clock, #panel.login-screen .panel-button.clock-display:overview:hover .clock, #panel.login-screen .panel-button.clock-display:focus:hover .clock, #panel.login-screen .panel-button.clock-display:checked:hover .clock, #panel:overview .panel-button.clock-display:active:hover .clock, #panel:overview .panel-button.clock-display:overview:hover .clock, #panel:overview .panel-button.clock-display:focus:hover .clock, #panel:overview .panel-button.clock-display:checked:hover .clock {
+ box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); }
+ #panel.unlock-screen .panel-button.screen-recording-indicator:active:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:overview:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:focus:hover, #panel.unlock-screen .panel-button.screen-recording-indicator:checked:hover, #panel.login-screen .panel-button.screen-recording-indicator:active:hover, #panel.login-screen .panel-button.screen-recording-indicator:overview:hover, #panel.login-screen .panel-button.screen-recording-indicator:focus:hover, #panel.login-screen .panel-button.screen-recording-indicator:checked:hover, #panel:overview .panel-button.screen-recording-indicator:active:hover, #panel:overview .panel-button.screen-recording-indicator:overview:hover, #panel:overview .panel-button.screen-recording-indicator:focus:hover, #panel:overview .panel-button.screen-recording-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(192, 28, 40, 0.8); }
+ #panel.unlock-screen .panel-button.screen-sharing-indicator:active:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:overview:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:focus:hover, #panel.unlock-screen .panel-button.screen-sharing-indicator:checked:hover, #panel.login-screen .panel-button.screen-sharing-indicator:active:hover, #panel.login-screen .panel-button.screen-sharing-indicator:overview:hover, #panel.login-screen .panel-button.screen-sharing-indicator:focus:hover, #panel.login-screen .panel-button.screen-sharing-indicator:checked:hover, #panel:overview .panel-button.screen-sharing-indicator:active:hover, #panel:overview .panel-button.screen-sharing-indicator:overview:hover, #panel:overview .panel-button.screen-sharing-indicator:focus:hover, #panel:overview .panel-button.screen-sharing-indicator:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(205, 147, 9, 0.8); }
+ #panel .panel-status-indicators-box,
+ #panel .panel-status-menu-box {
+ spacing: 2px; }
+ #panel .power-status.panel-status-indicators-box {
+ spacing: 0; }
+ #panel .screencast-indicator,
+ #panel .remote-access-indicator {
+ color: #cd9309; }
+
+#appMenu {
+ spacing: 6px; }
+ #appMenu .label-shadow {
+ color: transparent; }
+
+#appMenu .panel-status-menu-box {
+ padding: 0 6px;
+ spacing: 6px; }
+
+.clock-display-box {
+ spacing: 2px; }
+ .clock-display-box .clock {
+ padding-left: 12px;
+ padding-right: 12px; }
+
+/* Activities Ripple */
+.ripple-box {
+ background-color: rgba(255, 255, 255, 0.2);
+ box-shadow: 0 0 2px 2px rgba(255, 255, 255, 0.2);
+ width: 52px;
+ height: 52px;
+ border-radius: 0 0 52px 0; }
+ .ripple-box:rtl {
+ border-radius: 0 0 0 52px; }
+
+.quick-settings {
+ padding: 18px;
+ border-radius: 36px; }
+ .quick-settings .icon-button, .quick-settings .button {
+ padding: 10.5px; }
+
+.quick-settings-grid {
+ spacing-rows: 12px;
+ spacing-columns: 12px; }
+
+.quick-toggle {
+ border-radius: 99px;
+ min-width: 12em;
+ max-width: 12em;
+ min-height: 40px;
+ border: none;
+ /* Move padding into the box; this is to allow menu arrows
+ to extend to the border */ }
+ .quick-toggle:checked {
+ transition-duration: 100ms;
+ background-color: #3584e4;
+ color: #fff;
+ box-shadow: none; }
+ .quick-toggle:checked:focus {
+ box-shadow: inset 0 0 0 2px #629fea; }
+ .quick-toggle:checked:hover, .quick-toggle:checked:focus {
+ background-color: #4b92e7;
+ color: white; }
+ .quick-toggle:checked:active {
+ background-color: #1d72d8;
+ color: #ededed; }
+ .quick-toggle:checked:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: rgba(53, 132, 228, 0.5);
+ color: rgba(255, 255, 255, 0.5); }
+ .quick-toggle > StBoxLayout {
+ spacing: 6px; }
+ .quick-toggle.button, .quick-toggle.icon-button {
+ padding: 0; }
+ .quick-toggle > StBoxLayout {
+ padding: 0 12px; }
+ .quick-toggle:ltr > StBoxLayout {
+ padding-left: 15px; }
+ .quick-toggle:rtl > StBoxLayout {
+ padding-right: 15px; }
+ .quick-toggle .quick-toggle-label {
+ font-weight: bold; }
+ .quick-toggle .quick-toggle-icon, .quick-toggle .quick-toggle-arrow {
+ icon-size: 1.09em; }
+
+.quick-menu-toggle:ltr > StBoxLayout {
+ padding-right: 0; }
+
+.quick-menu-toggle:rtl > StBoxLayout {
+ padding-left: 0; }
+
+.quick-menu-toggle .quick-toggle-arrow {
+ background-color: rgba(255, 255, 255, 0.1);
+ padding: 6px 10.5px; }
+ .quick-menu-toggle .quick-toggle-arrow:ltr {
+ border-radius: 0 99px 99px 0; }
+ .quick-menu-toggle .quick-toggle-arrow:rtl {
+ border-radius: 99px 0 0 99px; }
+
+.quick-slider > StBoxLayout {
+ spacing: 6px; }
+
+.quick-slider .slider-bin {
+ min-height: 16px;
+ padding: 6px;
+ border-radius: 99px; }
+ .quick-slider .slider-bin:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a414b;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .quick-slider .slider-bin:focus:hover {
+ background-color: #404852;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .quick-slider .slider-bin:focus:active {
+ background-color: #474f59;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+
+.quick-slider .quick-toggle-icon {
+ icon-size: 1.09em; }
+ .quick-slider .quick-toggle-icon:ltr {
+ margin-left: 6px; }
+ .quick-slider .quick-toggle-icon:rtl {
+ margin-right: 6px; }
+
+.quick-toggle-menu {
+ background-color: #353535;
+ border-radius: 24px;
+ padding: 12px;
+ margin: 12px 18px 0; }
+ .quick-toggle-menu .popup-menu-item > StIcon {
+ -st-icon-style: symbolic; }
+ .quick-toggle-menu .header {
+ spacing-rows: 3px;
+ spacing-columns: 12px;
+ padding-bottom: 12px; }
+ .quick-toggle-menu .header .icon {
+ icon-size: 1.635em;
+ border-radius: 999px;
+ padding: 9px;
+ background-color: #494949; }
+ .quick-toggle-menu .header .icon.active {
+ background-color: #3584e4; }
+
+.quick-settings-system-item > StBoxLayout {
+ spacing: 12px; }
+
+.quick-settings-system-item .power-item {
+ min-height: 0;
+ min-width: 0; }
+ .quick-settings-system-item .power-item:insensitive {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3a3a3a;
+ background-color: transparent; }
+
+.nm-network-item .wireless-secure-icon {
+ icon-size: 0.545em; }
+
+/* OVERVIEW */
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: 12px; }
+
+#overviewGroup {
+ background-color: #232323; }
+
+.overview-controls {
+ padding-bottom: 32px; }
+
+/* Window Picker */
+.window-picker {
+ spacing: 6px; }
+
+.window-caption {
+ color: white;
+ background-color: #303030;
+ border-radius: 99px;
+ padding: 6px 12px; }
+
+.window-close, .screenshot-ui-close-button {
+ background-color: rgba(53, 53, 53, 0.98);
+ color: white;
+ border-radius: 99px;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
+ padding: 3px;
+ height: 30px;
+ width: 30px;
+ transition-duration: 100ms; }
+ .window-close StIcon, .screenshot-ui-close-button StIcon {
+ icon-size: 24px; }
+ .window-close:hover, .screenshot-ui-close-button:hover {
+ background-color: rgba(71, 71, 71, 0.98); }
+ .window-close:active, .screenshot-ui-close-button:active {
+ background-color: rgba(86, 86, 86, 0.98); }
+
+.workspace-background {
+ border-radius: 30px;
+ background-color: rgba(3, 2, 1, 0);
+ box-shadow: 0 4px 16px 4px rgba(0, 0, 0, 0.3); }
+
+
+.search-entry {
+ border-radius: 18px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ padding: 7px 9px;
+ width: 320px;
+ background-color: #3c3c3c;
+ color: rgba(255, 255, 255, 0.7);
+ border: 2px solid #3c3c3c; }
+
+ .search-entry:hover {
+ background-color: #565656;
+ border-color: #565656;
+ color: rgba(255, 255, 255, 0.7); }
+
+ .search-entry:focus {
+ background-color: #3c4045;
+ border-color: #3584e4;
+ color: white; }
+
+ .search-entry:insensitive {
+ background-color: #383838;
+ border-color: #383838;
+ color: #979797; }
+
+ .search-entry .search-entry-icon {
+ color: inherit;
+ icon-size: 1.09em;
+ margin-top: 2px;
+ padding: 0 4px; }
+
+/* Search */
+#searchResults {
+ margin: 0 4px; }
+
+#searchResultsContent {
+ max-width: 1072px; }
+
+.search-section {
+ spacing: 18px; }
+ .search-section .search-section-separator {
+ height: 8px;
+ background-color: transparent; }
+
+.search-section-content {
+ background-color: #303030;
+ border-radius: 24px;
+ border: 1px solid rgba(255, 255, 255, 0.02);
+ color: white;
+ padding: 12px;
+ margin: 0 12px; }
+
+.list-search-result, .search-provider-icon {
+ background-color: transparent;
+ border-radius: 11px; }
+ .list-search-result:hover, .search-provider-icon:hover {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .list-search-result:selected, .search-provider-icon:selected, .list-search-result:focus, .search-provider-icon:focus {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .list-search-result:selected:hover, .search-provider-icon:selected:hover, .list-search-result:focus:hover, .search-provider-icon:focus:hover {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .list-search-result:selected:active, .search-provider-icon:selected:active, .list-search-result:focus:active, .search-provider-icon:focus:active {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .list-search-result:active, .search-provider-icon:active {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .list-search-result:outlined, .search-provider-icon:outlined, .list-search-result:checked, .search-provider-icon:checked {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .list-search-result:outlined:active, .search-provider-icon:outlined:active, .list-search-result:checked:active, .search-provider-icon:checked:active {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .list-search-result:outlined:hover, .search-provider-icon:outlined:hover, .list-search-result:checked:hover, .search-provider-icon:checked:hover {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .list-search-result:drop, .search-provider-icon:drop {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.grid-search-results {
+ spacing: 30px;
+ margin: 0 12px; }
+
+.search-provider-icon:ltr {
+ margin-right: 4px; }
+
+.search-provider-icon:rtl {
+ margin-left: 4px; }
+
+.search-provider-icon .list-search-provider-content {
+ spacing: 12px; }
+ .search-provider-icon .list-search-provider-content .list-search-provider-details {
+ width: 120px;
+ color: white; }
+
+.list-search-results {
+ spacing: 6px; }
+
+.list-search-result .list-search-result-content {
+ spacing: 6px; }
+
+.list-search-result .list-search-result-title {
+ spacing: 12px; }
+
+.list-search-result .list-search-result-description {
+ color: #bdbdbd; }
+
+/* Dash */
+#dash {
+ margin-top: 12px; }
+ #dash .placeholder {
+ background-image: none;
+ background-size: contain;
+ height: 32px; }
+ #dash .empty-dash-drop-target {
+ width: 32px;
+ height: 32px; }
+ #dash .app-well-app-running-dot {
+ margin-bottom: 14px; }
+
+.dash-background {
+ background-color: #303030;
+ border-radius: 28px;
+ padding: 12px;
+ spacing: 6px;
+ margin-bottom: 12px; }
+
+.dash-item-container > * {
+ margin: 0 2px; }
+
+.dash-item-container:ltr:first-child {
+ margin-left: 0; }
+
+.dash-item-container:rtl:first-child {
+ margin-right: 0; }
+
+.dash-item-container .app-well-app .overview-icon, .dash-item-container .grid-search-result .overview-icon {
+ padding: 6px; }
+
+.dash-item-container .show-apps {
+ transition-duration: 400ms; }
+ .dash-item-container .show-apps .overview-icon {
+ background-color: transparent; }
+ .dash-item-container .show-apps:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .dash-item-container .show-apps:selected .overview-icon, .dash-item-container .show-apps:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .dash-item-container .show-apps:selected .overview-icon:hover .overview-icon, .dash-item-container .show-apps:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .dash-item-container .show-apps:selected .overview-icon:active .overview-icon, .dash-item-container .show-apps:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .dash-item-container .show-apps:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .dash-item-container .show-apps:outlined .overview-icon, .dash-item-container .show-apps:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .dash-item-container .show-apps:outlined .overview-icon:active .overview-icon, .dash-item-container .show-apps:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .dash-item-container .show-apps:outlined .overview-icon:hover .overview-icon, .dash-item-container .show-apps:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .dash-item-container .show-apps:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.dash-item-container .show-apps, .dash-item-container .app-well-app, .dash-item-container .grid-search-result {
+ padding-bottom: 12px; }
+
+.dash-separator {
+ width: 1px;
+ margin: 0 4px;
+ background-color: rgba(255, 255, 255, 0.1);
+ margin-bottom: 12px; }
+
+.dash-label {
+ color: white;
+ background-color: #232323;
+ border-radius: 99px;
+ padding: 6px 12px;
+ text-align: center;
+ -y-offset: 8px; }
+
+/* App Grid */
+.icon-grid {
+ row-spacing: 12px;
+ column-spacing: 12px;
+ max-row-spacing: 42px;
+ max-column-spacing: 42px;
+ page-padding-top: 24px;
+ page-padding-bottom: 24px;
+ page-padding-left: 18px;
+ page-padding-right: 18px; }
+
+/* App Icons */
+.app-well-app, .grid-search-result {
+ transition-duration: 400ms; }
+ .app-well-app .overview-icon, .grid-search-result .overview-icon {
+ background-color: transparent; }
+ .app-well-app:hover .overview-icon, .grid-search-result:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .app-well-app:selected .overview-icon, .grid-search-result:selected .overview-icon, .app-well-app:focus .overview-icon, .grid-search-result:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app:selected .overview-icon:hover .overview-icon, .grid-search-result:selected .overview-icon:hover .overview-icon, .app-well-app:focus .overview-icon:hover .overview-icon, .grid-search-result:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app:selected .overview-icon:active .overview-icon, .grid-search-result:selected .overview-icon:active .overview-icon, .app-well-app:focus .overview-icon:active .overview-icon, .grid-search-result:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app:active .overview-icon, .grid-search-result:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app:outlined .overview-icon, .grid-search-result:outlined .overview-icon, .app-well-app:checked .overview-icon, .grid-search-result:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app:outlined .overview-icon:active .overview-icon, .grid-search-result:outlined .overview-icon:active .overview-icon, .app-well-app:checked .overview-icon:active .overview-icon, .grid-search-result:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .app-well-app:outlined .overview-icon:hover .overview-icon, .grid-search-result:outlined .overview-icon:hover .overview-icon, .app-well-app:checked .overview-icon:hover .overview-icon, .grid-search-result:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .app-well-app:drop .overview-icon, .grid-search-result:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+ .app-well-app .overview-icon, .grid-search-result .overview-icon {
+ padding: 12px; }
+ .app-well-app .overview-icon.overview-icon-with-label > StBoxLayout, .grid-search-result .overview-icon.overview-icon-with-label > StBoxLayout {
+ spacing: 6px; }
+
+.app-well-app.app-folder, .app-folder.grid-search-result {
+ transition-duration: 400ms; }
+ .app-well-app.app-folder .overview-icon, .app-folder.grid-search-result .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app.app-folder:hover .overview-icon, .app-folder.grid-search-result:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .app-well-app.app-folder:selected .overview-icon, .app-folder.grid-search-result:selected .overview-icon, .app-well-app.app-folder:focus .overview-icon, .app-folder.grid-search-result:focus .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app.app-folder:selected .overview-icon:hover .overview-icon, .app-folder.grid-search-result:selected .overview-icon:hover .overview-icon, .app-well-app.app-folder:focus .overview-icon:hover .overview-icon, .app-folder.grid-search-result:focus .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app.app-folder:selected .overview-icon:active .overview-icon, .app-folder.grid-search-result:selected .overview-icon:active .overview-icon, .app-well-app.app-folder:focus .overview-icon:active .overview-icon, .app-folder.grid-search-result:focus .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.13); }
+ .app-well-app.app-folder:active .overview-icon, .app-folder.grid-search-result:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.16); }
+ .app-well-app.app-folder:outlined .overview-icon, .app-folder.grid-search-result:outlined .overview-icon, .app-well-app.app-folder:checked .overview-icon, .app-folder.grid-search-result:checked .overview-icon {
+ background-color: rgba(255, 255, 255, 0.19); }
+ .app-well-app.app-folder:outlined .overview-icon:active .overview-icon, .app-folder.grid-search-result:outlined .overview-icon:active .overview-icon, .app-well-app.app-folder:checked .overview-icon:active .overview-icon, .app-folder.grid-search-result:checked .overview-icon:active .overview-icon {
+ background-color: rgba(255, 255, 255, 0.22); }
+ .app-well-app.app-folder:outlined .overview-icon:hover .overview-icon, .app-folder.grid-search-result:outlined .overview-icon:hover .overview-icon, .app-well-app.app-folder:checked .overview-icon:hover .overview-icon, .app-folder.grid-search-result:checked .overview-icon:hover .overview-icon {
+ background-color: rgba(255, 255, 255, 0.25); }
+ .app-well-app.app-folder:drop .overview-icon, .app-folder.grid-search-result:drop .overview-icon {
+ border: 2px solid rgba(53, 132, 228, 0.8);
+ background-color: rgba(53, 132, 228, 0.2); }
+
+.app-folder-dialog {
+ border-radius: 32px;
+ background-color: #303030; }
+ .app-folder-dialog .folder-name-container {
+ padding: 24px 36px 0;
+ spacing: 12px;
+ /* FIXME: this is to keep the label in sync with the entry */ }
+ .app-folder-dialog .folder-name-container .folder-name-entry {
+ width: 300px; }
+ .app-folder-dialog .folder-name-container .folder-name-label {
+ padding: 5px 7px;
+ color: white; }
+ .app-folder-dialog .folder-name-container .edit-folder-button {
+ padding: 0;
+ width: 36px;
+ height: 36px;
+ border-radius: 99px; }
+ .app-folder-dialog .folder-name-container .edit-folder-button > StIcon {
+ icon-size: 1.09em; }
+ .app-folder-dialog .icon-grid {
+ row-spacing: 12px;
+ column-spacing: 30px;
+ page-padding-top: 0;
+ page-padding-bottom: 0;
+ page-padding-left: 0;
+ page-padding-right: 0; }
+ .app-folder-dialog .page-indicators {
+ margin-bottom: 18px; }
+
+.app-folder-dialog-container {
+ padding: 12px;
+ width: 720px;
+ height: 720px; }
+
+.app-well-app-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius: 5px;
+ margin-bottom: 8px;
+ background-color: white; }
+
+.rename-folder-popup .rename-folder-popup-item {
+ spacing: 6px; }
+ .rename-folder-popup .rename-folder-popup-item:ltr, .rename-folder-popup .rename-folder-popup-item:rtl {
+ padding: 0 12px; }
+
+.page-indicator {
+ padding: 6px 12px 0;
+ transition-duration: 400ms; }
+ .page-indicator .page-indicator-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 10px;
+ background-color: white; }
+
+.apps-scroll-view {
+ padding: 0; }
+
+.system-action-icon {
+ background-color: rgba(0, 0, 0, 0.8);
+ color: #fff;
+ border-radius: 99px;
+ icon-size: 48px; }
+
+.page-navigation-hint.dnd {
+ background: rgba(255, 255, 255, 0.1); }
+
+.page-navigation-hint.next:ltr, .page-navigation-hint.previous:rtl {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: horizontal;
+ border-radius: 24px 0px 0px 24px; }
+
+.page-navigation-hint.previous:ltr, .page-navigation-hint.next:rtl {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: horizontal;
+ border-radius: 0px 24px 24px 0px; }
+
+.page-navigation-arrow > StIcon {
+ margin: 6px;
+ padding: 18px;
+ width: 24px;
+ height: 24px;
+ border-radius: 99px; }
+
+.page-navigation-arrow:insensitive > StIcon {
+ transition-duration: 100ms;
+ background-color: transparent;
+ background-color: none;
+ box-shadow: none; }
+ .page-navigation-arrow:insensitive > StIcon:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5); }
+
+.page-navigation-arrow:hover > StIcon {
+ transition-duration: 100ms;
+ color: white;
+ background-color: rgba(73, 73, 73, 0.525); }
+
+.page-navigation-arrow:active > StIcon {
+ transition-duration: 100ms;
+ color: white;
+ background-color: rgba(80, 80, 80, 0.525); }
+
+/* Workspace pager */
+.workspace-thumbnails {
+ visible-width: 32px;
+ spacing: 6px;
+ padding: 6px; }
+ .workspace-thumbnails .workspace-thumbnail {
+ border-radius: 3px; }
+ .workspace-thumbnails .placeholder {
+ background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
+ background-size: contain;
+ width: 18px; }
+
+.workspace-thumbnail-indicator {
+ border: 3px solid #3584e4;
+ border-radius: 3px;
+ padding: 0px; }
+
+.ripple-pointer-location {
+ width: 50px;
+ height: 50px;
+ border-radius: 25px;
+ background-color: rgba(188, 214, 246, 0.3);
+ box-shadow: 0 0 2px 2px #8fbbf0; }
+
+.pie-timer {
+ width: 60px;
+ height: 60px;
+ -pie-border-width: 3px;
+ -pie-border-color: #3584e4;
+ -pie-background-color: rgba(233, 242, 252, 0.3); }
+
+.magnifier-zoom-region {
+ border: 2px solid #3584e4; }
+ .magnifier-zoom-region.full-screen {
+ border-width: 0; }
+
+.select-area-rubberband {
+ background-color: rgba(53, 132, 228, 0.3);
+ border: 1px solid #3584e4; }
+
+.user-icon {
+ background-size: contain;
+ color: white;
+ border-radius: 99px;
+ icon-size: 4.36em; }
+ .user-icon:hover {
+ color: white; }
+ .user-icon StIcon {
+ background-color: rgba(255, 255, 255, 0.05);
+ border-radius: 99px;
+ padding: 12px;
+ width: 2.725em;
+ height: 2.725em; }
+ .user-icon.user-avatar {
+ border: 2px white; }
+
+.user-widget.vertical .user-icon {
+ icon-size: 6.54em; }
+ .user-widget.vertical .user-icon StIcon {
+ padding: 20px;
+ padding-top: 18px;
+ padding-bottom: 22px;
+ width: 5.995em;
+ height: 5.995em; }
+
+.lightbox {
+ background-color: black; }
+
+.flashspot {
+ background-color: white; }
+
+.hidden {
+ color: rgba(0, 0, 0, 0); }
+
+.caps-lock-warning-label {
+ text-align: center;
+ padding-bottom: 8px;
+ color: #cd9309; }
+
+/* Workspace animation */
+.workspace-animation {
+ background-color: #232323; }
+
+/* Tiled window previews */
+.tile-preview {
+ background-color: rgba(53, 132, 228, 0.5);
+ border: 1px solid #3584e4; }
+
+/* On-screen Keyboard */
+#keyboard {
+ background-color: #232323;
+ box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.02); }
+ #keyboard .page-indicator {
+ padding: 6px; }
+ #keyboard .page-indicator .page-indicator-icon {
+ width: 8px;
+ height: 8px; }
+
+.key-container {
+ padding: 4px;
+ spacing: 4px; }
+
+.keyboard-key {
+ font-size: 16pt;
+ font-weight: bold;
+ min-height: 1.2em;
+ min-width: 1.2em;
+ border-width: 1px;
+ border-style: solid;
+ border-radius: 12px;
+ box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2);
+ color: white;
+ background-color: #545454; }
+ .keyboard-key:focus {
+ color: white;
+ background-color: #2c333d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .keyboard-key:focus:hover {
+ background-color: #373f49;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-key:focus:active {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-key:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .keyboard-key:active {
+ color: white;
+ background-color: #666666; }
+ .keyboard-key:checked {
+ color: white;
+ background-color: #737373; }
+ .keyboard-key:grayed {
+ background-color: #282828;
+ color: white;
+ border-color: rgba(0, 0, 0, 0.7); }
+ .keyboard-key.default-key {
+ color: white;
+ background-color: #3b3b3b;
+ border-radius: 12px; }
+ .keyboard-key.default-key:hover {
+ color: white;
+ background-color: #454545; }
+ .keyboard-key.default-key:active {
+ color: white;
+ background-color: #4d4d4d; }
+ .keyboard-key.default-key:checked {
+ color: white;
+ background-color: #595959; }
+ .keyboard-key.default-key:latched {
+ border-color: #4b92e7;
+ background-color: #3584e4; }
+ .keyboard-key.enter-key {
+ color: #fff;
+ background-color: #428ce6;
+ border-radius: 12px;
+ color: white; }
+ .keyboard-key.enter-key:hover {
+ color: #fff;
+ background-color: #5497e8; }
+ .keyboard-key.enter-key:active {
+ color: #fff;
+ background-color: #629fea; }
+ .keyboard-key.enter-key:checked {
+ color: #fff;
+ background-color: #78aded; }
+ .keyboard-key.shift-key-uppercase {
+ background-color: gray;
+ color: #232323; }
+ .keyboard-key.shift-key-uppercase:hover {
+ background-color: #8c8c8c;
+ color: #303030; }
+ .keyboard-key StIcon {
+ icon-size: 24px; }
+
+.keyboard-subkeys {
+ -arrow-border-radius: 16px;
+ -arrow-background-color: #232323;
+ -arrow-border-width: 1px;
+ -arrow-border-color: #3a3a3a;
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: 6px;
+ padding: 6px; }
+ .keyboard-subkeys .keyboard-key {
+ color: white;
+ background-color: #545454;
+ border-radius: 12px; }
+ .keyboard-subkeys .keyboard-key:focus {
+ color: white;
+ background-color: #2c333d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .keyboard-subkeys .keyboard-key:focus:hover {
+ background-color: #373f49;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-subkeys .keyboard-key:focus:active {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .keyboard-subkeys .keyboard-key:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .keyboard-subkeys .keyboard-key:active {
+ color: white;
+ background-color: #666666; }
+ .keyboard-subkeys .keyboard-key:checked {
+ color: white;
+ background-color: #737373; }
+
+.emoji-page .keyboard-key {
+ background-color: transparent;
+ border: none;
+ color: initial; }
+
+.emoji-panel .keyboard-key:latched {
+ border-color: #4b92e7;
+ background-color: #3584e4; }
+
+.word-suggestions {
+ font-size: 12pt;
+ spacing: 12px;
+ min-height: 17pt;
+ padding: 12px;
+ color: white; }
+ .word-suggestions StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: 6px;
+ padding: 0px 18px;
+ background-color: transparent;
+ background-image: none; }
+ .word-suggestions StButton:focus {
+ color: white;
+ background-color: #2c333d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6); }
+ .word-suggestions StButton:focus:hover {
+ background-color: #373f49;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .word-suggestions StButton:focus:active {
+ background-color: #3c444d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7); }
+ .word-suggestions StButton:hover {
+ color: white;
+ background-color: #5e5e5e; }
+ .word-suggestions StButton:active {
+ color: white;
+ background-color: #666666; }
+ .word-suggestions StButton:checked {
+ color: white;
+ background-color: #737373; }
+
+/* Looking Glass */
+#LookingGlassDialog {
+ background-color: #232323;
+ border-radius: 0 0 16px 16px;
+ border-top-width: 0;
+ border: 1px solid rgba(255, 255, 255, 0.02);
+ color: white;
+ padding: 6px;
+ spacing: 6px;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2); }
+ #LookingGlassDialog > #Toolbar {
+ border: none;
+ padding: 6px;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: 6px; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button {
+ padding: 6px 12px; }
+ #LookingGlassDialog > #Toolbar .lg-toolbar-button > StIcon {
+ icon-size: 1.09em; }
+ #LookingGlassDialog .labels {
+ spacing: 6px; }
+ #LookingGlassDialog .notebook-tab {
+ -natural-hpadding: 12px;
+ -minimum-hpadding: 12px;
+ font-weight: bold;
+ padding: 6px 12px;
+ color: #d9d9d9;
+ transition-duration: 100ms;
+ box-shadow: none;
+ border: none;
+ border-radius: 6px;
+ background-color: transparent; }
+ #LookingGlassDialog .notebook-tab:hover {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.05); }
+ #LookingGlassDialog .notebook-tab:selected {
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1); }
+ #LookingGlassDialog StBoxLayout#EvalBox {
+ padding: 4px;
+ spacing: 6px;
+ padding: 6px; }
+ #LookingGlassDialog StBoxLayout#ResultsArea {
+ spacing: 6px;
+ padding: 6px; }
+
+.lg-dialog StEntry {
+ background-color: rgba(48, 48, 48, 0.6);
+ color: white;
+ border-color: rgba(255, 255, 255, 0.2);
+ min-height: 22px;
+ selection-background-color: #3584e4;
+ selected-color: #fff; }
+
+.lg-dialog .shell-link {
+ color: #8fbbf0; }
+ .lg-dialog .shell-link:hover {
+ color: #bcd6f6; }
+ .lg-dialog .shell-link:active {
+ color: #629fea; }
+
+.lg-dialog .actor-link {
+ color: #979797; }
+ .lg-dialog .actor-link:hover {
+ color: #cacaca; }
+ .lg-dialog .actor-link:active {
+ color: #646464; }
+ .lg-dialog .actor-link StIcon {
+ icon-size: 12px; }
+
+.lg-completions-text {
+ font-style: italic; }
+
+.lg-obj-inspector-title {
+ spacing: 6px; }
+
+.lg-obj-inspector-button {
+ border: 1px solid rgba(0, 0, 0, 0.7);
+ padding: 4px;
+ border-radius: 8px; }
+ .lg-obj-inspector-button:hover {
+ border: 1px solid #ffffff; }
+
+#lookingGlassExtensions {
+ padding: 6px; }
+
+.lg-extensions-list {
+ padding: 6px;
+ spacing: 6px; }
+
+.lg-extension {
+ padding: 12px;
+ border-radius: 8px;
+ margin: 4px;
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3f3f3f; }
+ .lg-extension:focus {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #3e4650;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.6) !important; }
+ .lg-extension:focus:hover {
+ background-color: #454d56;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .lg-extension:focus:active {
+ background-color: #4c545d;
+ box-shadow: inset 0 0 0 2px rgba(53, 132, 228, 0.7) !important; }
+ .lg-extension:hover {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #474747; }
+ .lg-extension:active {
+ transition-duration: 100ms;
+ color: white;
+ background-color: #4e4e4e; }
+
+.lg-extension-meta {
+ spacing: 6px; }
+
+#LookingGlassPropertyInspector {
+ background: #232323;
+ border: 1px solid rgba(0, 0, 0, 0.7);
+ border-radius: 8px;
+ padding: 6px; }
+
+.lg-debug-flag-button {
+ color: white; }
+ .lg-debug-flag-button StLabel {
+ padding: 6px, 12px; }
+ .lg-debug-flag-button:hover {
+ color: white; }
+ .lg-debug-flag-button:active {
+ color: #cccccc; }
+
+.lg-debug-flags-header {
+ padding-top: 12px;
+ padding: 6px; }
+
+/* Login Dialog */
+.login-dialog-banner-view {
+ padding-top: 24px;
+ max-width: 23em; }
+
+.login-dialog,
+.unlock-dialog {
+ border: none;
+ background-color: transparent; }
+ .login-dialog .modal-dialog-button-box,
+ .unlock-dialog .modal-dialog-button-box {
+ spacing: 3px; }
+ .login-dialog .modal-dialog-button,
+ .unlock-dialog .modal-dialog-button {
+ padding: 4px 18px;
+ background-color: #1b1b1b;
+ border-color: #1b1b1b;
+ color: white; }
+ .login-dialog .modal-dialog-button:hover, .login-dialog .modal-dialog-button:focus,
+ .unlock-dialog .modal-dialog-button:hover,
+ .unlock-dialog .modal-dialog-button:focus {
+ background-color: #303030;
+ border-color: #303030; }
+ .login-dialog .modal-dialog-button:active,
+ .unlock-dialog .modal-dialog-button:active {
+ background-color: #161616;
+ border-color: #161616; }
+ .login-dialog .modal-dialog-button:insensitive,
+ .unlock-dialog .modal-dialog-button:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ border-color: #161616;
+ background-color: #161616;
+ color: rgba(255, 255, 255, 0.7); }
+ .login-dialog .modal-dialog-button:default,
+ .unlock-dialog .modal-dialog-button:default {
+ transition-duration: 100ms;
+ background-color: #3584e4;
+ color: #fff;
+ box-shadow: none; }
+ .login-dialog .modal-dialog-button:default:focus,
+ .unlock-dialog .modal-dialog-button:default:focus {
+ box-shadow: inset 0 0 0 2px #629fea; }
+ .login-dialog .modal-dialog-button:default:hover, .login-dialog .modal-dialog-button:default:focus,
+ .unlock-dialog .modal-dialog-button:default:hover,
+ .unlock-dialog .modal-dialog-button:default:focus {
+ background-color: #4b92e7;
+ color: white; }
+ .login-dialog .modal-dialog-button:default:active,
+ .unlock-dialog .modal-dialog-button:default:active {
+ background-color: #1d72d8;
+ color: #ededed; }
+ .login-dialog .modal-dialog-button:default:insensitive,
+ .unlock-dialog .modal-dialog-button:default:insensitive {
+ transition-duration: 100ms;
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ background-color: rgba(53, 132, 228, 0.5);
+ color: rgba(255, 255, 255, 0.5); }
+ .login-dialog .cancel-button,
+ .login-dialog .switch-user-button,
+ .login-dialog .login-dialog-session-list-button,
+ .unlock-dialog .cancel-button,
+ .unlock-dialog .switch-user-button,
+ .unlock-dialog .login-dialog-session-list-button {
+ padding: 0;
+ border-radius: 99px;
+ width: 2.18em;
+ height: 2.18em;
+ border-color: #1b1b1b;
+ background-color: #1b1b1b; }
+ .login-dialog .cancel-button StIcon,
+ .login-dialog .switch-user-button StIcon,
+ .login-dialog .login-dialog-session-list-button StIcon,
+ .unlock-dialog .cancel-button StIcon,
+ .unlock-dialog .switch-user-button StIcon,
+ .unlock-dialog .login-dialog-session-list-button StIcon {
+ icon-size: 1.09em; }
+ .login-dialog .caps-lock-warning-label,
+ .login-dialog .login-dialog-message-warning,
+ .unlock-dialog .caps-lock-warning-label,
+ .unlock-dialog .login-dialog-message-warning {
+ color: white; }
+
+.login-dialog-logo-bin {
+ padding: 24px 0px; }
+
+.login-dialog-banner {
+ color: #e6e6e6; }
+
+.login-dialog-button-box {
+ width: 23em;
+ spacing: 5px; }
+
+.login-dialog-message {
+ text-align: center; }
+
+.login-dialog-user-selection-box {
+ padding: 100px 0px; }
+
+.login-dialog-not-listed-label {
+ padding-left: 2px; }
+ .login-dialog-not-listed-button:focus .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
+ color: white; }
+
+.login-dialog-not-listed-label {
+ font-weight: bold;
+ color: #b3b3b3;
+ padding-top: 1em; }
+
+.login-dialog-auth-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em; }
+
+.login-dialog-auth-list-title {
+ margin-left: 2em; }
+
+.login-dialog-auth-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #b3b3b3; }
+ .login-dialog-auth-list-item:focus, .login-dialog-auth-list-item:selected {
+ background-color: #3584e4;
+ color: #fff; }
+
+.login-dialog-auth-list-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .login-dialog-auth-list-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .login-dialog-auth-list-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
+.login-dialog-user-list-view {
+ -st-vfade-offset: 1em; }
+
+.login-dialog-user-list {
+ spacing: 12px;
+ width: 23em; }
+ .login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
+ background-color: #3584e4;
+ color: #fff; }
+ .login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
+ border-right: 2px solid #3584e4; }
+
+.login-dialog-user-list-item {
+ border-radius: 12px;
+ padding: 6px;
+ color: #b3b3b3; }
+ .login-dialog-user-list-item:ltr .user-widget {
+ padding-right: 1em; }
+ .login-dialog-user-list-item:rtl .user-widget {
+ padding-left: 1em; }
+ .login-dialog-user-list-item .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: 6px;
+ background-color: white; }
+ .login-dialog-user-list-item:focus .login-dialog-timed-login-indicator {
+ background-color: #fff; }
+
+.user-widget-label {
+ color: white; }
+
+.user-widget.horizontal .user-widget-label {
+ font-size: 13pt;
+ font-weight: bold;
+ padding-left: 15px; }
+ .user-widget.horizontal .user-widget-label:ltr {
+ padding-left: 14px;
+ text-align: left; }
+ .user-widget.horizontal .user-widget-label:rtl {
+ padding-right: 14px;
+ text-align: right; }
+
+.user-widget.vertical .user-widget-label {
+ font-size: 16pt;
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px; }
+
+.login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: #999999; }
+
+.login-dialog-prompt-layout {
+ padding-top: 24px;
+ padding-bottom: 12px;
+ spacing: 12px;
+ width: 23em; }
+
+.login-dialog-prompt-entry {
+ height: 1.5em; }
+
+.login-dialog-prompt-label {
+ color: #cccccc;
+ font-size: 12pt;
+ padding-top: 1em; }
+
+.login-dialog StEntry {
+ background-color: #1b1b1b;
+ color: white; }
+
+.unlock-dialog StEntry {
+ border: none !important; }
+ .unlock-dialog StEntry:focus {
+ background-color: rgba(255, 255, 255, 0.1); }
+ .unlock-dialog StEntry:insensitive {
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(255, 255, 255, 0.05); }
+
+.unlock-dialog .cancel-button,
+.unlock-dialog .switch-user-button,
+.unlock-dialog .login-dialog-session-list-button {
+ border-color: transparent;
+ background-color: rgba(255, 255, 255, 0.1); }
+
+/* Screen Shield */
+.unlock-dialog-clock {
+ color: white;
+ font-weight: 300;
+ text-align: center;
+ spacing: 24px;
+ padding-bottom: 2.5em; }
+
+.unlock-dialog-clock-time {
+ font-size: 64pt;
+ padding-top: 42px; }
+
+.unlock-dialog-clock-date {
+ font-size: 16pt;
+ font-weight: normal; }
+
+.unlock-dialog-clock-hint {
+ font-weight: normal;
+ padding-top: 48px; }
+
+.unlock-dialog-notifications-container {
+ margin: 12px;
+ spacing: 6px;
+ width: 23em;
+ background-color: transparent; }
+ .unlock-dialog-notifications-container .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0; }
+ .unlock-dialog-notifications-container .notification,
+ .unlock-dialog-notifications-container .unlock-dialog-notification-source {
+ padding: 12px 16px;
+ border: none;
+ background-color: rgba(255, 255, 255, 0.1);
+ color: white;
+ border-radius: 16px; }
+ .unlock-dialog-notifications-container .notification.critical,
+ .unlock-dialog-notifications-container .unlock-dialog-notification-source.critical {
+ background-color: rgba(255, 255, 255, 0.2); }
+
+.unlock-dialog-notification-label {
+ padding-left: 12px;
+ padding-right: 0; }
+ .unlock-dialog-notification-label:rtl {
+ padding-right: 12px;
+ padding-left: 0; }
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 12px;
+ color: white;
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: 99px; }
+
+.screen-shield-background {
+ background: black;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.6); }
+
+#lockDialogGroup {
+ background-color: #232323; }
+
+#unlockDialogNotifications StButton#vhandle, #unlockDialogNotifications StButton#hhandle {
+ background-color: rgba(48, 48, 48, 0.3); }
+ #unlockDialogNotifications StButton#vhandle:hover, #unlockDialogNotifications StButton#vhandle:focus, #unlockDialogNotifications StButton#hhandle:hover, #unlockDialogNotifications StButton#hhandle:focus {
+ background-color: rgba(48, 48, 48, 0.5); }
+ #unlockDialogNotifications StButton#vhandle:active, #unlockDialogNotifications StButton#hhandle:active {
+ background-color: rgba(53, 132, 228, 0.5); }
diff --git a/data/theme/gnome-shell.scss b/data/theme/gnome-shell.scss
new file mode 100644
index 0000000..8ee4999
--- /dev/null
+++ b/data/theme/gnome-shell.scss
@@ -0,0 +1,6 @@
+$variant: 'dark';
+
+@import "gnome-shell-sass/_colors"; //use gtk colors
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
diff --git a/data/theme/meson.build b/data/theme/meson.build
new file mode 100644
index 0000000..e6c1723
--- /dev/null
+++ b/data/theme/meson.build
@@ -0,0 +1,62 @@
+theme_sources = files([
+ 'gnome-shell-high-contrast.scss',
+ 'gnome-shell.scss',
+ 'gnome-shell-sass/_colors.scss',
+ 'gnome-shell-sass/_common.scss',
+ 'gnome-shell-sass/_drawing.scss',
+ 'gnome-shell-sass/_high-contrast-colors.scss',
+ 'gnome-shell-sass/_widgets.scss',
+ 'gnome-shell-sass/widgets/_a11y.scss',
+ 'gnome-shell-sass/widgets/_app-grid.scss',
+ 'gnome-shell-sass/widgets/_base.scss',
+ 'gnome-shell-sass/widgets/_buttons.scss',
+ 'gnome-shell-sass/widgets/_calendar.scss',
+ 'gnome-shell-sass/widgets/_check-box.scss',
+ 'gnome-shell-sass/widgets/_corner-ripple.scss',
+ 'gnome-shell-sass/widgets/_dash.scss',
+ 'gnome-shell-sass/widgets/_dialogs.scss',
+ 'gnome-shell-sass/widgets/_entries.scss',
+ 'gnome-shell-sass/widgets/_hotplug.scss',
+ 'gnome-shell-sass/widgets/_ibus-popup.scss',
+ 'gnome-shell-sass/widgets/_keyboard.scss',
+ 'gnome-shell-sass/widgets/_login-dialog.scss',
+ 'gnome-shell-sass/widgets/_looking-glass.scss',
+ 'gnome-shell-sass/widgets/_message-list.scss',
+ 'gnome-shell-sass/widgets/_misc.scss',
+ 'gnome-shell-sass/widgets/_notifications.scss',
+ 'gnome-shell-sass/widgets/_osd.scss',
+ 'gnome-shell-sass/widgets/_overview.scss',
+ 'gnome-shell-sass/widgets/_panel.scss',
+ 'gnome-shell-sass/widgets/_popovers.scss',
+ 'gnome-shell-sass/widgets/_quick-settings.scss',
+ 'gnome-shell-sass/widgets/_screen-shield.scss',
+ 'gnome-shell-sass/widgets/_screenshot.scss',
+ 'gnome-shell-sass/widgets/_scrollbars.scss',
+ 'gnome-shell-sass/widgets/_search-entry.scss',
+ 'gnome-shell-sass/widgets/_search-results.scss',
+ 'gnome-shell-sass/widgets/_slider.scss',
+ 'gnome-shell-sass/widgets/_switcher-popup.scss',
+ 'gnome-shell-sass/widgets/_switches.scss',
+ 'gnome-shell-sass/widgets/_window-picker.scss',
+ 'gnome-shell-sass/widgets/_workspace-switcher.scss',
+ 'gnome-shell-sass/widgets/_workspace-thumbnails.scss'
+])
+
+stylesheets = [
+ 'gnome-shell-high-contrast.css',
+ 'gnome-shell.css'
+]
+
+foreach stylesheet: stylesheets
+ if not fs.exists(stylesheet)
+ sassc = find_program('sassc')
+ theme_deps += custom_target(stylesheet,
+ input: fs.replace_suffix(stylesheet, '.scss'),
+ output: stylesheet,
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@'
+ ],
+ depend_files: theme_sources)
+ endif
+endforeach
+
diff --git a/data/theme/pad-osd.css b/data/theme/pad-osd.css
new file mode 100644
index 0000000..e0c9048
--- /dev/null
+++ b/data/theme/pad-osd.css
@@ -0,0 +1,29 @@
+.Leader {
+ stroke-width: .5 !important;
+ stroke: #535353;
+ fill: none !important;
+}
+
+.Button {
+ stroke-width: .25;
+ stroke: #ededed;
+ fill: #ededed;
+}
+
+.Ring {
+ stroke-width: .5 !important;
+ stroke: #535353 !important;
+ fill: none !important;
+}
+
+.Label {
+ stroke: none !important;
+ stroke-width: .1 !important;
+ fill: transparent !important;
+}
+
+.TouchStrip, .TouchRing {
+ stroke-width: .1 !important;
+ stroke: #ededed !important;
+ fill: #535353 !important;
+}
diff --git a/data/theme/process-working.svg b/data/theme/process-working.svg
new file mode 100644
index 0000000..920a67d
--- /dev/null
+++ b/data/theme/process-working.svg
@@ -0,0 +1,3084 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg5369"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ width="512"
+ height="32"
+ sodipodi:docname="process-working.svg"
+ style="display:inline">
+ <metadata
+ id="metadata5375">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs5373">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient35326"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient8231-1-4-4-1">
+ <stop
+ id="stop8233-28-5-27-1"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop8235-7-3-94-3" />
+ <stop
+ id="stop8237-7-8-20-2"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop8239-2-9-1-9"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient35230"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient5767-6">
+ <stop
+ id="stop5769-0"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop5771-1" />
+ <stop
+ id="stop5773-7"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop5775-8"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10257">
+ <stop
+ id="stop10259"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10261" />
+ <stop
+ id="stop10263"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10265"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10269">
+ <stop
+ id="stop10271"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10273" />
+ <stop
+ id="stop10275"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10277"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10281">
+ <stop
+ id="stop10283"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10285" />
+ <stop
+ id="stop10287"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10289"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10293">
+ <stop
+ id="stop10295"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10297" />
+ <stop
+ id="stop10299"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10301"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10305">
+ <stop
+ id="stop10307"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10309" />
+ <stop
+ id="stop10311"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10313"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10317">
+ <stop
+ id="stop10319"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10321" />
+ <stop
+ id="stop10323"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10325"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10329">
+ <stop
+ id="stop10331"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10333" />
+ <stop
+ id="stop10335"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10337"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10341">
+ <stop
+ id="stop10343"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10345" />
+ <stop
+ id="stop10347"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10349"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10353">
+ <stop
+ id="stop10355"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10357" />
+ <stop
+ id="stop10359"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10361"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10365">
+ <stop
+ id="stop10367"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10369" />
+ <stop
+ id="stop10371"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10373"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10377">
+ <stop
+ id="stop10379"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10381" />
+ <stop
+ id="stop10383"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10385"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10389">
+ <stop
+ id="stop10391"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10393" />
+ <stop
+ id="stop10395"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10397"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10401">
+ <stop
+ id="stop10403"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10405" />
+ <stop
+ id="stop10407"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10409"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10413">
+ <stop
+ id="stop10415"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10417" />
+ <stop
+ id="stop10419"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10421"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10425">
+ <stop
+ id="stop10427"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.15428571"
+ offset="0.31861392"
+ id="stop10429" />
+ <stop
+ id="stop10431"
+ offset="0.54270232"
+ style="stop-color:#ffffff;stop-opacity:0.33714285" />
+ <stop
+ id="stop10433"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <linearGradient
+ id="linearGradient10437">
+ <stop
+ id="stop10439"
+ offset="0"
+ style="stop-color:#bebebe;stop-opacity:0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="0.31861392"
+ id="stop10441" />
+ <stop
+ id="stop10443"
+ offset="0.75051737"
+ style="stop-color:#ffffff;stop-opacity:0.42857143" />
+ <stop
+ id="stop10445"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient10709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient10711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient11663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient11665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14128"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14140"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14152"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14164"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14176"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14200"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14212"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14224"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14236"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14248"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14272"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14284"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14296"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14308"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14320"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14332"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14344"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14356"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14380"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14392"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14440"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14452"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14464"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14476"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14536"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14560"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14584"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14620"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14644"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14656"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14668"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14692"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14704"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14848"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14860"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14872"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14884"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14896"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14920"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14944"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14956"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient14980"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient14992"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15004"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15016"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15052"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15076"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15088"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15100"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15112"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15124"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15136"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15148"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15172"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15184"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15196"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15208"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15220"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15244"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15256"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15268"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15280"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15292"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15304"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15316"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15328"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15340"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15352"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15364"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15376"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15388"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15400"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15412"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15424"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15436"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15448"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15460"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15484"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15508"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient15520"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient15532"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8231-1-4-4-1"
+ id="radialGradient18026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
+ cx="-0.067823187"
+ cy="188.51917"
+ fx="-0.067823187"
+ fy="188.51917"
+ r="27.330345" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5767-6"
+ id="radialGradient18028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
+ cx="0.053942412"
+ cy="189.15244"
+ fx="0.053942412"
+ fy="189.15244"
+ r="27.330345" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#808080"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1975"
+ inkscape:window-height="1098"
+ id="namedview5371"
+ showgrid="false"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:zoom="1"
+ inkscape:cx="346.23664"
+ inkscape:cy="-6.4057938"
+ inkscape:window-x="139"
+ inkscape:window-y="73"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer2"
+ inkscape:snap-bbox="true"
+ inkscape:snap-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid11933"
+ empspacing="16"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ empcolor="#0000ff"
+ empopacity="0.47843137" />
+ </sodipodi:namedview>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="tiles"
+ style="display:none"
+ transform="translate(0,-16)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="rect12451"
+ width="24"
+ height="24"
+ x="0"
+ y="0" />
+ <rect
+ y="24"
+ x="0"
+ height="24"
+ width="24"
+ id="rect12453"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <rect
+ y="0"
+ x="24"
+ height="24"
+ width="24"
+ id="rect12455"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="rect12457"
+ width="24"
+ height="24"
+ x="24"
+ y="24" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="rect12459"
+ width="24"
+ height="24"
+ x="48"
+ y="0" />
+ <rect
+ y="24"
+ x="48"
+ height="24"
+ width="24"
+ id="rect12461"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <rect
+ y="0"
+ x="72"
+ height="24"
+ width="24"
+ id="rect12463"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="rect12465"
+ width="24"
+ height="24"
+ x="72"
+ y="24" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="spinner"
+ transform="translate(0,-16)">
+ <g
+ style="display:inline"
+ id="g12246"
+ transform="matrix(0.29521872,0,0,0.2952381,149.03971,-388.51498)">
+ <path
+ transform="matrix(-0.16397381,0.61157081,-0.61162275,-0.16377992,-372.32298,1442.5061)"
+ d="m -3.4436513,184.72075 a 22.98097,22.98097 0 0 1 -25.9046347,17.42496 22.98097,22.98097 0 0 1 -19.37345,-24.4816 22.98097,22.98097 0 0 1 22.91234,-21.20622"
+ sodipodi:ry="22.98097"
+ sodipodi:rx="22.98097"
+ sodipodi:cy="179.43886"
+ sodipodi:cx="-25.809397"
+ id="path12248"
+ style="display:inline;fill:none;stroke:url(#radialGradient11663);stroke-width:17.83196449;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc"
+ sodipodi:start="0.23191105"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="0.23191105"
+ sodipodi:type="arc"
+ style="display:inline;fill:none;stroke:url(#radialGradient11665);stroke-width:17.83196449;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path12250"
+ sodipodi:cx="-25.809397"
+ sodipodi:cy="179.43886"
+ sodipodi:rx="22.98097"
+ sodipodi:ry="22.98097"
+ d="m -3.4436513,184.72075 a 22.98097,22.98097 0 0 1 -25.9046347,17.42496 22.98097,22.98097 0 0 1 -19.37345,-24.4816 22.98097,22.98097 0 0 1 22.91234,-21.20622"
+ transform="matrix(-0.63300818,0.01438356,-0.01458424,-0.63300359,-491.4014,1510.996)" />
+ </g>
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,48.943073,-180.55304)"
+ id="use12258"
+ xlink:href="#g10450-5"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.97814761,0.20791169,-0.20791169,0.97814761,70.553652,-185.80321)"
+ id="use12260"
+ xlink:href="#use12000"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.95105653,0.30901699,-0.30901699,0.95105653,146.76602,-177.21804)"
+ id="use12266"
+ xlink:href="#g10450-5"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.91354547,0.40673664,-0.40673664,0.91354547,169.60833,-183.68101)"
+ id="use12270"
+ xlink:href="#use12000"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.86602542,0.5,-0.5,0.86602542,194.48539,-193.2587)"
+ id="use12272"
+ xlink:href="#use12002"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.80901701,0.58778525,-0.58778525,0.80901701,289.93475,-156.19404)"
+ id="use12278"
+ xlink:href="#g10450-5"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.74314484,0.66913061,-0.66913061,0.74314484,315.02774,-163.93338)"
+ id="use12282"
+ xlink:href="#use12000"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.66913062,0.74314483,-0.74314483,0.66913062,343.01848,-174.00634)"
+ id="use12284"
+ xlink:href="#use12002"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.58778527,0.809017,-0.809017,0.58778527,374.34035,-185.86931)"
+ id="use12290"
+ xlink:href="#use12008"
+ y="0"
+ x="0" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12290"
+ id="use12494"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,31.624213,-28.945572)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12494"
+ id="use12498"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,31.778114,-31.872282)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12498"
+ id="use12502"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,31.931711,-34.799662)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12502"
+ id="use12506"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.085178,-37.729332)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12506"
+ id="use12510"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.238466,-40.661342)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12510"
+ id="use12514"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.390823,-43.585942)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12514"
+ id="use12518"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.543439,-46.510902)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12518"
+ id="use12522"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.696338,-49.437422)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12522"
+ id="use12526"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,32.849272,-52.363942)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12526"
+ id="use12530"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.002239,-55.290422)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12530"
+ id="use12534"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.155242,-58.216862)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12534"
+ id="use12538"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.308287,-61.143262)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12538"
+ id="use12542"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.461378,-64.069632)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12542"
+ id="use12546"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.614517,-66.995962)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12546"
+ id="use12550"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.767708,-69.922282)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12550"
+ id="use12554"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,33.920952,-72.848572)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12554"
+ id="use12558"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.074252,-75.774862)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12558"
+ id="use12562"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.228224,-78.701442)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12562"
+ id="use12566"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.384481,-81.628162)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12566"
+ id="use12570"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.543085,-84.555062)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12570"
+ id="use12574"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.694273,-87.482889)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12574"
+ id="use12578"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.845821,-90.410449)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12578"
+ id="use12582"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,34.998931,-93.337739)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12582"
+ id="use12586"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.152046,-96.264989)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12586"
+ id="use12590"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.305116,-99.192209)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12590"
+ id="use12594"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.458143,-102.11938)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12594"
+ id="use12598"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.611131,-105.04652)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12598"
+ id="use12602"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.764086,-107.97361)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12602"
+ id="use12606"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,35.917013,-110.90066)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12606"
+ id="use12610"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.069915,-113.82765)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12610"
+ id="use12614"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.2228,-116.75459)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12614"
+ id="use12618"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.375673,-119.68147)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12618"
+ id="use12622"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.52885,-122.60769)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12622"
+ id="use12626"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.682157,-125.53161)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12626"
+ id="use12630"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.835642,-128.45319)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12630"
+ id="use12634"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,36.990059,-131.38219)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12634"
+ id="use12638"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.144216,-134.31083)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12638"
+ id="use12642"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.298091,-137.2379)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12642"
+ id="use12646"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.45193,-140.16497)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12646"
+ id="use12650"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.605737,-143.09209)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12650"
+ id="use12654"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.759507,-146.01924)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12654"
+ id="use12658"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,37.913236,-148.94644)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12658"
+ id="use12662"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.066918,-151.87367)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12662"
+ id="use12666"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.220552,-154.80093)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12666"
+ id="use12670"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.374134,-157.72821)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12670"
+ id="use12674"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.527663,-160.65551)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12674"
+ id="use12678"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.681136,-163.58282)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12678"
+ id="use12682"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.833937,-166.50983)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12682"
+ id="use12686"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,38.984453,-169.4367)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use12686"
+ id="use12690"
+ transform="matrix(0.9945219,0.10452846,-0.10452846,0.9945219,39.132623,-172.3634)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g12246"
+ id="use17640"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.463174,-0.6860274)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17640"
+ id="use17642"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.545526,-2.3041175)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17642"
+ id="use17644"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.627869,-3.9222415)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17644"
+ id="use17646"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.710256,-5.5403957)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17646"
+ id="use17648"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.792682,-7.1585849)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17648"
+ id="use17650"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.875146,-8.776813)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17650"
+ id="use17652"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,18.957642,-10.395084)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17652"
+ id="use17654"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.040166,-12.0134)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17654"
+ id="use17656"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.122713,-13.631765)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17656"
+ id="use17658"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.205279,-15.250181)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17658"
+ id="use17660"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.287857,-16.868648)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17660"
+ id="use17662"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.370295,-18.487328)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17662"
+ id="use17664"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.452449,-20.10785)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17664"
+ id="use17666"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.534518,-21.730599)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17666"
+ id="use17668"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,19.616047,-23.351029)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g12246"
+ id="use17670"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,288.32996,17.191525)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17640"
+ id="use17672"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,305.13809,1.2121247)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17642"
+ id="use17674"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,321.94624,-14.767309)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17644"
+ id="use17676"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,338.75439,-30.746723)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17646"
+ id="use17678"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,355.56257,-46.726112)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17648"
+ id="use17680"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,372.37079,-62.705487)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17650"
+ id="use17682"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,389.179,-78.684846)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17652"
+ id="use17684"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,405.98726,-94.664188)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17654"
+ id="use17686"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,422.79551,-110.64352)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17656"
+ id="use17688"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,439.60382,-126.62284)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17658"
+ id="use17690"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,456.41215,-142.60217)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17660"
+ id="use17692"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,473.22049,-158.58145)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17662"
+ id="use17694"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,490.02954,-174.56102)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17664"
+ id="use17696"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,506.83972,-190.54059)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17666"
+ id="use17698"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,523.65101,-206.52033)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#use17668"
+ id="use17700"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,540.45771,-222.50042)"
+ width="100%"
+ height="100%" />
+ <g
+ transform="matrix(-0.29521867,7.2137245e-5,-7.2124844e-5,-0.29523807,-132.95323,452.47763)"
+ id="g17702"
+ style="display:inline">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="0.23191105"
+ sodipodi:type="arc"
+ style="display:inline;fill:none;stroke:url(#radialGradient18026);stroke-width:17.83196449;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path17704"
+ sodipodi:cx="-25.809397"
+ sodipodi:cy="179.43886"
+ sodipodi:rx="22.98097"
+ sodipodi:ry="22.98097"
+ d="m -3.4436513,184.72075 a 22.98097,22.98097 0 0 1 -25.9046347,17.42496 22.98097,22.98097 0 0 1 -19.37345,-24.4816 22.98097,22.98097 0 0 1 22.91234,-21.20622"
+ transform="matrix(-0.16397381,0.61157081,-0.61162275,-0.16377992,-372.32298,1442.5061)" />
+ <path
+ transform="matrix(-0.63300818,0.01438356,-0.01458424,-0.63300359,-491.4014,1510.996)"
+ d="m -3.4436513,184.72075 a 22.98097,22.98097 0 0 1 -25.9046347,17.42496 22.98097,22.98097 0 0 1 -19.37345,-24.4816 22.98097,22.98097 0 0 1 22.91234,-21.20622"
+ sodipodi:ry="22.98097"
+ sodipodi:rx="22.98097"
+ sodipodi:cy="179.43886"
+ sodipodi:cx="-25.809397"
+ id="path17706"
+ style="display:inline;fill:none;stroke:url(#radialGradient18028);stroke-width:17.83196449;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc"
+ sodipodi:start="0.23191105"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.081742,-0.6039496)"
+ id="use17708"
+ xlink:href="#g17702"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.164094,-2.2220396)"
+ id="use17710"
+ xlink:href="#use17708"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.246437,-3.8401636)"
+ id="use17712"
+ xlink:href="#use17710"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.328824,-5.4583176)"
+ id="use17714"
+ xlink:href="#use17712"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.41125,-7.0765066)"
+ id="use17716"
+ xlink:href="#use17714"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.493714,-8.6947346)"
+ id="use17718"
+ xlink:href="#use17716"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.57621,-10.313006)"
+ id="use17720"
+ xlink:href="#use17718"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.658734,-11.931322)"
+ id="use17722"
+ xlink:href="#use17720"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.741281,-13.549687)"
+ id="use17724"
+ xlink:href="#use17722"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.823847,-15.168103)"
+ id="use17726"
+ xlink:href="#use17724"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.906425,-16.78657)"
+ id="use17728"
+ xlink:href="#use17726"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,20.988863,-18.40525)"
+ id="use17730"
+ xlink:href="#use17728"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,21.071017,-20.025772)"
+ id="use17732"
+ xlink:href="#use17730"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,21.153086,-21.648521)"
+ id="use17734"
+ xlink:href="#use17732"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.99487012,0.10116048,-0.10116048,0.99487012,21.234615,-23.268951)"
+ id="use17736"
+ xlink:href="#use17734"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,304.30952,33.999897)"
+ id="use17738"
+ xlink:href="#g17702"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,321.11765,18.020497)"
+ id="use17740"
+ xlink:href="#use17708"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,337.9258,2.0410622)"
+ id="use17742"
+ xlink:href="#use17710"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,354.73395,-13.938351)"
+ id="use17744"
+ xlink:href="#use17712"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,371.54213,-29.91774)"
+ id="use17746"
+ xlink:href="#use17714"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,388.35035,-45.897115)"
+ id="use17748"
+ xlink:href="#use17716"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,405.15856,-61.876474)"
+ id="use17750"
+ xlink:href="#use17718"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,421.96682,-77.855816)"
+ id="use17752"
+ xlink:href="#use17720"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,438.77507,-93.835152)"
+ id="use17754"
+ xlink:href="#use17722"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,455.58338,-109.81448)"
+ id="use17756"
+ xlink:href="#use17724"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,472.39171,-125.79381)"
+ id="use17758"
+ xlink:href="#use17726"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,489.20005,-141.77309)"
+ id="use17760"
+ xlink:href="#use17728"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,506.0091,-157.75266)"
+ id="use17762"
+ xlink:href="#use17730"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,522.81928,-173.73223)"
+ id="use17764"
+ xlink:href="#use17732"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,539.63057,-189.71197)"
+ id="use17766"
+ xlink:href="#use17734"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(-0.0505232,0.99872288,-0.99872288,-0.0505232,556.43727,-205.69206)"
+ id="use17768"
+ xlink:href="#use17736"
+ y="0"
+ x="0" />
+ </g>
+</svg>
diff --git a/data/theme/running-indicator.svg b/data/theme/running-indicator.svg
new file mode 100644
index 0000000..ebe7ecf
--- /dev/null
+++ b/data/theme/running-indicator.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="119.97824"
+ height="119.97824"
+ id="svg7355"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="running-indicator.svg">
+ <metadata
+ id="metadata4175">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#2c1cff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1141"
+ id="namedview4173"
+ showgrid="false"
+ inkscape:zoom="8.1348081"
+ inkscape:cx="81.120662"
+ inkscape:cy="58.117986"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g30864" />
+ <defs
+ id="defs7357">
+ <radialGradient
+ xlink:href="#linearGradient36429"
+ id="radialGradient7461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.011539,0,0,0.57582113,-0.39262194,71.83807)"
+ cx="47.428951"
+ cy="167.16817"
+ fx="47.428951"
+ fy="167.16817"
+ r="37" />
+ <linearGradient
+ id="linearGradient36429">
+ <stop
+ id="stop36431"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop36433"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient36471"
+ id="radialGradient7463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
+ cx="49.067139"
+ cy="242.50381"
+ fx="49.067139"
+ fy="242.50381"
+ r="37.00671" />
+ <linearGradient
+ id="linearGradient36471">
+ <stop
+ id="stop36473"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop36475"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ r="37.00671"
+ fy="242.50381"
+ fx="49.067139"
+ cy="242.50381"
+ cx="49.067139"
+ gradientTransform="matrix(1.1891549,0,0,0.15252127,-9.281289,132.52772)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient7488"
+ xlink:href="#linearGradient36471" />
+ </defs>
+ <g
+ id="layer1"
+ transform="matrix(1.6213276,0,0,1.6213276,-431.6347,-272.5745)">
+ <g
+ style="display:inline"
+ id="g30864"
+ transform="translate(255.223,70.118091)">
+ <rect
+ ry="3.4593496"
+ rx="3.4593496"
+ y="99.596962"
+ x="12.596948"
+ height="71.116341"
+ width="71.116341"
+ id="rect14000"
+ style="opacity:0.37187500000000001;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
+ <path
+ id="rect34520"
+ d="m 83.273151,166.72152 c 0,1.96759 -1.584022,3.55163 -3.551629,3.55163 l -63.443032,0 c -1.967608,0 -3.551648,-1.58402 -3.551643,-3.55164 0,-5.85318 0,-5.85318 0,0"
+ style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
+ connector-curvature="0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccscc" />
+ </g>
+ </g>
+</svg>
diff --git a/data/theme/toggle-off-hc.svg b/data/theme/toggle-off-hc.svg
new file mode 100644
index 0000000..036794f
--- /dev/null
+++ b/data/theme/toggle-off-hc.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -291.18)"><rect ry="11" rx="11" y="299.18" x="30" height="10" width="10" style="fill:none;fill-opacity:1;stroke:#f8f7f7;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none" fill="#f8f7f7" stroke-linecap="round" stroke-linejoin="round"/><rect style="fill:#fff;stroke:none;stroke-width:1;marker:none;fill-opacity:.15000001" width="48" height="26" x="-48" y="291.18" ry="13" fill="#3081e3" rx="13" transform="scale(-1 1)"/><rect ry="11" rx="11" y="293.18" x="-24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7" transform="scale(-1 1)"/></g></svg> \ No newline at end of file
diff --git a/data/theme/toggle-off-light.svg b/data/theme/toggle-off-light.svg
new file mode 100644
index 0000000..14cb424
--- /dev/null
+++ b/data/theme/toggle-off-light.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(-1 0 0 1 0 -291.18)"><rect style="fill:#c0bfbc;stroke:none;stroke-width:1;marker:none" width="48" height="26" x="-48" y="291.18" ry="13" fill="#3081e3" rx="13"/><rect ry="11" rx="11" y="294.18" x="-24" height="22" width="22" style="fill:#000;fill-opacity:.2;stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/><rect ry="11" rx="11" y="293.18" x="-24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/></g></svg> \ No newline at end of file
diff --git a/data/theme/toggle-off.svg b/data/theme/toggle-off.svg
new file mode 100644
index 0000000..323f73b
--- /dev/null
+++ b/data/theme/toggle-off.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(-1 0 0 1 0 -291.18)"><rect style="fill:#fff;stroke:none;stroke-width:1;marker:none;fill-opacity:.15000001" width="48" height="26" x="-48" y="291.18" ry="13" fill="#3081e3" rx="13"/><rect ry="11" rx="11" y="294.18" x="-24" height="22" width="22" style="fill:#000;fill-opacity:.2;stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/><rect ry="11" rx="11" y="293.18" x="-24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none;fill:#fff;fill-opacity:1" fill="#f8f7f7"/></g></svg> \ No newline at end of file
diff --git a/data/theme/toggle-on-hc.svg b/data/theme/toggle-on-hc.svg
new file mode 100644
index 0000000..2d553c6
--- /dev/null
+++ b/data/theme/toggle-on-hc.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -291.18)" stroke="none"><rect style="fill:#3584e4;stroke:none;stroke-width:1;marker:none" width="48" height="26" y="291.18" ry="13" fill="#3081e3" rx="13"/><rect ry="11" rx="11" y="293.18" x="24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/></g><path style="fill:#f8f7f7;fill-opacity:1;stroke:none;stroke-width:2;stroke-linejoin:round;stroke-dashoffset:2" d="M14 7v12h-2V7Z"/></svg> \ No newline at end of file
diff --git a/data/theme/toggle-on-light.svg b/data/theme/toggle-on-light.svg
new file mode 100644
index 0000000..f3dbf31
--- /dev/null
+++ b/data/theme/toggle-on-light.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -291.18)"><rect style="fill:#3584e4;stroke:none;stroke-width:1;marker:none" width="48" height="26" y="291.18" ry="13" fill="#3081e3"/><rect ry="11" rx="11" y="294.18" x="24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none;fill:#000;fill-opacity:.2" fill="#f8f7f7"/><rect ry="11" rx="11" y="293.18" x="24" height="22" width="22" style="stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/></g></svg> \ No newline at end of file
diff --git a/data/theme/toggle-on.svg b/data/theme/toggle-on.svg
new file mode 100644
index 0000000..215760f
--- /dev/null
+++ b/data/theme/toggle-on.svg
@@ -0,0 +1 @@
+<svg width="48" height="26" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -291.18)"><rect style="fill:#3584e4;stroke:none;stroke-width:1;marker:none" width="48" height="26" y="291.18" ry="13" fill="#3081e3" rx="13"/><rect ry="11" rx="11" y="294.18" x="24" height="22" width="22" style="fill:#000;fill-opacity:.2;stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/><rect ry="11" rx="11" y="293.18" x="24" height="22" width="22" style="fill:#fff;stroke:none;stroke-width:.999999;marker:none" fill="#f8f7f7"/></g></svg> \ No newline at end of file
diff --git a/data/theme/workspace-placeholder.svg b/data/theme/workspace-placeholder.svg
new file mode 100644
index 0000000..ff5dc92
--- /dev/null
+++ b/data/theme/workspace-placeholder.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="27"
+ height="76"
+ id="svg11252"
+ version="1.1"
+ sodipodi:docname="dash-placeholder-horizontal.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)">
+ <metadata
+ id="metadata19">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview17"
+ showgrid="false"
+ inkscape:pagecheckerboard="true"
+ inkscape:zoom="12.473684"
+ inkscape:cx="38"
+ inkscape:cy="26.327004"
+ inkscape:current-layer="g99967"
+ inkscape:document-rotation="0" />
+ <defs
+ id="defs11254">
+ <radialGradient
+ xlink:href="#linearGradient39563-4-2"
+ id="radialGradient68155-2-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.3486842,24.5,341.84211)"
+ cx="49"
+ cy="488"
+ fx="49"
+ fy="488"
+ r="38" />
+ <linearGradient
+ id="linearGradient39563-4-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop39565-1-4" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop39567-7-9" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient39573-6-1"
+ id="radialGradient68157-0-8"
+ gradientUnits="userSpaceOnUse"
+ cx="50.5"
+ cy="487.5"
+ fx="50.5"
+ fy="487.5"
+ r="10.5"
+ gradientTransform="matrix(1.2857143,0,0,1.2857143,8.571428,-114.78571)" />
+ <linearGradient
+ id="linearGradient39573-6-1">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop39575-5-6" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop39577-1-2" />
+ </linearGradient>
+ </defs>
+ <g
+ id="layer1"
+ transform="rotate(90,465.93109,104.43109)">
+ <g
+ id="g99967"
+ style="display:inline"
+ transform="translate(326,44.862171)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.49375;fill:url(#radialGradient68155-2-3);fill-opacity:1;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ id="rect99969"
+ width="76"
+ height="2"
+ x="35.5"
+ y="511"
+ rx="0"
+ ry="0" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.43125;fill:url(#radialGradient68157-0-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.28571;marker:none;enable-background:accumulate"
+ id="path99971"
+ d="m 87,512.00001 c 0,7.45584 -6.044155,13.5 -13.5,13.5 -7.455844,0 -13.5,-6.04416 -13.5,-13.5 0,-7.45585 6.044156,-13.5 13.5,-13.5 7.455845,0 13.5,6.04415 13.5,13.5 z" />
+ <path
+ d="m 78.076923,512.00001 c 0,2.52776 -2.049159,4.57692 -4.576923,4.57692 -2.527766,0 -4.576923,-2.04916 -4.576923,-4.57692 0,-2.52777 2.049157,-4.57692 4.576923,-4.57692 2.527765,0 4.576923,2.04915 4.576923,4.57692 z"
+ id="path99973"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.435897;marker:none;enable-background:accumulate" />
+ </g>
+ </g>
+</svg>
diff --git a/data/update-osk-layouts.sh b/data/update-osk-layouts.sh
new file mode 100755
index 0000000..8d78c0e
--- /dev/null
+++ b/data/update-osk-layouts.sh
@@ -0,0 +1,47 @@
+#!/bin/env bash
+
+CLDR_LAYOUTS_TARBALL="http://www.unicode.org/Public/cldr/latest/keyboards.zip"
+
+WORKDIR=".osk-layout-workbench"
+CLDR2JSON="cldr2json/cldr2json.py"
+SRCDIR="$WORKDIR/keyboards/android"
+DESTDIR="osk-layouts"
+GRESOURCE_FILE="gnome-shell-osk-layouts.gresource.xml"
+TMP_GRESOURCE_FILE=".$GRESOURCE_FILE.tmp"
+
+cd `dirname $0`
+
+# Ensure work/dest dirs
+rm -rf $WORKDIR
+mkdir -p $WORKDIR
+mkdir -p "osk-layouts"
+
+# Download stuff on the work dir
+pushd $WORKDIR
+gio copy $CLDR_LAYOUTS_TARBALL .
+unzip keyboards.zip
+popd
+
+# Transform to JSON files
+$CLDR2JSON $SRCDIR $DESTDIR
+
+# Generate new gresources xml file
+cat >$TMP_GRESOURCE_FILE <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/shell/osk-layouts">
+EOF
+
+for f in $DESTDIR/*.json
+do
+ echo " <file>$(basename $f)</file>" >>$TMP_GRESOURCE_FILE
+done
+
+cat >>$TMP_GRESOURCE_FILE <<EOF
+ <file>emoji.json</file>
+ </gresource>
+</gresources>
+EOF
+
+# Rewrite old gresources xml
+mv $TMP_GRESOURCE_FILE $GRESOURCE_FILE