ttkbootstrap 2.2.1__tar.gz → 2.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/LICENSE +21 -21
  2. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/MANIFEST.in +7 -7
  3. {ttkbootstrap-2.2.1/src/ttkbootstrap.egg-info → ttkbootstrap-2.2.3}/PKG-INFO +192 -192
  4. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/README.md +165 -165
  5. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/pyproject.toml +92 -85
  6. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/setup.cfg +4 -4
  7. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/__init__.py +429 -429
  8. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/__init__.pyi +2021 -2021
  9. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/__main__.py +167 -167
  10. ttkbootstrap-2.2.3/src/ttkbootstrap/_pyinstaller/__init__.py +8 -0
  11. ttkbootstrap-2.2.3/src/ttkbootstrap/_pyinstaller/hook-ttkbootstrap.py +3 -0
  12. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/__init__.py +1 -1
  13. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/README.md +14 -14
  14. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/__init__.py +1 -1
  15. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/manifest.json +16 -16
  16. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/icons/LICENSE +22 -22
  17. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/icons/README.md +40 -40
  18. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/cli.py +124 -124
  19. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/colorutils.py +31 -31
  20. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/constants.py +614 -614
  21. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/convert_theme.py +323 -323
  22. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/__init__.py +29 -29
  23. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/base.py +230 -230
  24. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/colorchooser.py +629 -629
  25. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/colordropper.py +188 -188
  26. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/datepicker.py +579 -579
  27. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/filedialog.py +691 -691
  28. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/fontdialog.py +316 -316
  29. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/message.py +525 -506
  30. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/dialogs/query.py +512 -512
  31. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/__init__.py +6 -6
  32. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/busy.py +126 -126
  33. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/configure_delegation.py +205 -205
  34. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/positioning.py +312 -312
  35. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/publisher.py +133 -133
  36. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/utility.py +52 -52
  37. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/internal/wheel.py +153 -153
  38. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/localization/README.md +111 -111
  39. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/localization/__init__.py +12 -12
  40. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/localization/api.py +126 -126
  41. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/localization/msgcat.py +215 -215
  42. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/localization/msgs.py +1507 -1507
  43. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/menu.py +86 -86
  44. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/publisher.py +15 -15
  45. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/py.typed +1 -1
  46. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/__init__.py +72 -72
  47. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/_compat.py +279 -279
  48. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/assets.py +160 -160
  49. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/bootstyle.py +1347 -1347
  50. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/__init__.py +45 -45
  51. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/button.py +359 -359
  52. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/calendar.py +83 -83
  53. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/checkbutton.py +77 -77
  54. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/combobox.py +140 -140
  55. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/entry.py +66 -66
  56. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/floodgauge.py +93 -93
  57. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/frame.py +117 -117
  58. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/label.py +151 -151
  59. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/labelframe.py +52 -52
  60. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/menubutton.py +318 -318
  61. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/notebook.py +77 -77
  62. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/panedwindow.py +41 -41
  63. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/progressbar.py +225 -225
  64. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/radiobutton.py +75 -75
  65. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/registry.py +116 -116
  66. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/scale.py +108 -108
  67. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/scrollbar.py +234 -234
  68. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/separator.py +57 -57
  69. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/sizegrip.py +45 -45
  70. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/spinbox.py +102 -102
  71. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/toggle.py +200 -200
  72. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/toolbutton.py +307 -307
  73. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/treeview.py +228 -228
  74. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders/utils.py +73 -73
  75. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders_tk.py +461 -461
  76. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/builders_ttk.py +378 -378
  77. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/elements.py +189 -189
  78. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/engine.py +978 -978
  79. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/icons.py +606 -606
  80. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/layout.py +237 -237
  81. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/scaling.py +120 -120
  82. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/style/theme.py +966 -966
  83. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/themes/__init__.py +11 -11
  84. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/themes/builtin.py +147 -147
  85. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/themes/legacy.py +120 -120
  86. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/themes/standard.py +396 -396
  87. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utility.py +34 -34
  88. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/__init__.py +92 -92
  89. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/color.py +224 -224
  90. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/config.py +128 -128
  91. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/fonts.py +185 -185
  92. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/platform.py +21 -21
  93. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/utils/scaling.py +92 -92
  94. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/validation.py +306 -306
  95. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/__init__.py +82 -82
  96. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/dateentry.py +579 -579
  97. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/floodgauge.py +769 -769
  98. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/labeledscale.py +226 -226
  99. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/meter.py +870 -870
  100. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/scrolled.py +669 -669
  101. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/tableview.py +2917 -2917
  102. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/toast.py +415 -415
  103. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/widgets/tooltip.py +372 -372
  104. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/window.py +936 -936
  105. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3/src/ttkbootstrap.egg-info}/PKG-INFO +192 -192
  106. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap.egg-info/SOURCES.txt +3 -0
  107. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap.egg-info/entry_points.txt +3 -0
  108. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkcreator/__main__.py +572 -572
  109. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_bootstyle_grammar.py +374 -374
  110. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_bootstyle_value_tokens.py +301 -301
  111. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_busy_api.py +143 -143
  112. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_cli_api.py +182 -182
  113. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_config_api.py +93 -93
  114. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_configure_delegation.py +143 -143
  115. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_convert_theme.py +317 -317
  116. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_dateentry_api.py +412 -412
  117. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_dialogs_api.py +545 -443
  118. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_durable_style_options.py +464 -464
  119. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_filedialog_api.py +533 -533
  120. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_floodgauge_api.py +195 -195
  121. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_fonts_api.py +235 -235
  122. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_icon_drop.py +91 -91
  123. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_icon_theme.py +227 -227
  124. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_labeledscale_tooltip_api.py +263 -263
  125. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_menu_api.py +112 -112
  126. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_menu_border.py +177 -177
  127. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_meter_api.py +171 -171
  128. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_mixin_api.py +238 -238
  129. ttkbootstrap-2.2.3/tests/test_pyinstaller_hook.py +51 -0
  130. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_scaling.py +625 -625
  131. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_scroll_events.py +157 -157
  132. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_scrolled_api.py +291 -291
  133. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_style_package.py +103 -103
  134. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_style_reference.py +114 -114
  135. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_surface_color.py +105 -105
  136. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_surface_families.py +187 -187
  137. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_surface_grammar.py +233 -233
  138. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_tableview_api.py +284 -284
  139. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_toast_api.py +226 -226
  140. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_toolkit.py +205 -205
  141. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_treeview_rowheight.py +120 -120
  142. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_utility_api.py +120 -120
  143. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_widget_catalog_coverage.py +81 -81
  144. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_widget_reexports.py +36 -36
  145. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_widget_stubs.py +299 -299
  146. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/tests/test_window_api.py +781 -781
  147. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/app_icons/ttkbootstrap.ico +0 -0
  148. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/app_icons/ttkbootstrap.png +0 -0
  149. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/checkbox-checked.png +0 -0
  150. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/checkbox-indeterminate.png +0 -0
  151. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/checkbox-unchecked.png +0 -0
  152. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/progressbar-default.png +0 -0
  153. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/progressbar-thin.png +0 -0
  154. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/radio.png +0 -0
  155. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/sizegrip.png +0 -0
  156. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/slider-handle.png +0 -0
  157. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/slider-track.png +0 -0
  158. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/switch-round.png +0 -0
  159. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/elements/switch-square.png +0 -0
  160. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/icons/bootstrap.ttf +0 -0
  161. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/icons/glyphmap.json +0 -0
  162. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap/assets/icons/icon_metrics.json +0 -0
  163. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap.egg-info/dependency_links.txt +0 -0
  164. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap.egg-info/requires.txt +0 -0
  165. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkbootstrap.egg-info/top_level.txt +0 -0
  166. {ttkbootstrap-2.2.1 → ttkbootstrap-2.2.3}/src/ttkcreator/__init__.py +0 -0
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 - 2026 Israel Dryer
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 - 2026 Israel Dryer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,7 +1,7 @@
1
- include LICENSE
2
- include README.md
3
-
4
- graft src/ttkbootstrap
5
- graft src/ttkcreator
6
-
7
- global-exclude *.py[cod] __pycache__/* .DS_Store
1
+ include LICENSE
2
+ include README.md
3
+
4
+ graft src/ttkbootstrap
5
+ graft src/ttkcreator
6
+
7
+ global-exclude *.py[cod] __pycache__/* .DS_Store
@@ -1,192 +1,192 @@
1
- Metadata-Version: 2.4
2
- Name: ttkbootstrap
3
- Version: 2.2.1
4
- Summary: Modern themes for Tkinter. Sleek, responsive styles inspired by Bootstrap. Includes ready-to-use widgets, 30+ themes, and tools for building beautiful, cross-platform desktop apps with ease.
5
- Author-email: Israel Dryer <israel.dryer@gmail.com>
6
- License-Expression: MIT AND (Apache-2.0 OR BSD-2-Clause)
7
- Project-URL: Homepage, https://github.com/israel-dryer/ttkbootstrap
8
- Project-URL: Documentation, https://ttkbootstrap.readthedocs.io/en/latest/
9
- Keywords: tkinter,theme,ttk,bootstrap,gui,desktop,python3,ui,widgets,theming,cross-platform,modern,responsive,python-gui
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: Environment :: Win32 (MS Windows)
12
- Classifier: Environment :: X11 Applications :: GTK
13
- Classifier: Intended Audience :: Developers
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
19
- Classifier: Programming Language :: Python :: 3.14
20
- Classifier: Topic :: Software Development :: User Interfaces
21
- Classifier: Operating System :: OS Independent
22
- Requires-Python: >=3.10
23
- Description-Content-Type: text/markdown
24
- License-File: LICENSE
25
- Requires-Dist: pillow<13,>=10
26
- Dynamic: license-file
27
-
28
- [![CI](https://github.com/israel-dryer/ttkbootstrap/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/israel-dryer/ttkbootstrap/actions/workflows/ci.yml)
29
- ![](https://img.shields.io/github/release/israel-dryer/ttkbootstrap.svg)
30
- [![Downloads](https://pepy.tech/badge/ttkbootstrap)](https://pepy.tech/project/ttkbootstrap)
31
- [![Downloads](https://pepy.tech/badge/ttkbootstrap/month)](https://pepy.tech/project/ttkbootstrap)
32
- ![](https://img.shields.io/github/issues/israel-dryer/ttkbootstrap.svg)
33
- ![](https://img.shields.io/github/license/israel-dryer/ttkbootstrap.svg)
34
- ![](https://img.shields.io/github/stars/israel-dryer/ttkbootstrap.svg)
35
- ![](https://img.shields.io/pypi/pyversions/ttkbootstrap.svg)
36
-
37
- # ttkbootstrap
38
-
39
- **Modern, themed tkinter — style any ttk widget with one keyword.**
40
-
41
- ttkbootstrap is a theming extension for tkinter. It generates flat,
42
- Bootstrap-inspired light and dark themes on demand and adds a single ``bootstyle``
43
- keyword to every ttk widget, so you describe *intent* — ``"primary"``,
44
- ``"success"``, ``"outline"`` — instead of hand-tuning colors or long ttk style
45
- names.
46
-
47
- <picture>
48
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/home-hero-dark.png">
49
- <img alt="A ttkbootstrap window: color swatches above themed buttons, inputs, a meter, a table, and a notebook" src="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/home-hero-light.png">
50
- </picture>
51
-
52
- ## Why ttkbootstrap
53
-
54
- - 🎨 **30 curated themes** — fifteen families, each in a coordinated light and dark variant, that switch at runtime.
55
- - ⌨️ **One-keyword styling** — `bootstyle="success"`, `bootstyle="info outline"`, `bootstyle="round toggle"`. The same keyword means the same thing on every widget.
56
- - 🧩 **Batteries-included** — styled ttk widgets plus a few extras (`Meter`, `DateEntry`, `Floodgauge`, `Tableview`) and fully themed dialogs.
57
- - 🛠️ **Your own themes & styles** — a declarative `Theme(...)` API and a public toolkit for building custom widget styles.
58
- - 🪶 **Pure Python** — one dependency (Pillow), Python 3.10+, no native extensions.
59
-
60
- It's a **styling layer for vanilla tkinter**, not a new framework: the widgets stay
61
- tkinter's, and everything you already know about tkinter still applies.
62
-
63
- ## Install
64
-
65
- ```bash
66
- python -m pip install ttkbootstrap
67
- ```
68
-
69
- Then see it running — this opens a window with every widget and a theme picker:
70
-
71
- ```bash
72
- ttkb demo
73
- ```
74
-
75
- ## Quickstart
76
-
77
- ```python
78
- import ttkbootstrap as ttk
79
-
80
- app = ttk.App(title="Hello")
81
-
82
- ttk.Label(app, text="Hello from ttkbootstrap!").pack(padx=16, pady=(16, 8))
83
- ttk.Button(app, text="Primary", bootstyle="primary").pack(padx=16, pady=4)
84
- ttk.Button(app, text="Success", bootstyle="success").pack(padx=16, pady=4)
85
- ttk.Button(app, text="Danger Outline", bootstyle="danger outline").pack(padx=16, pady=(4, 16))
86
-
87
- app.mainloop()
88
- ```
89
-
90
- <picture>
91
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/quickstart-hello-dark.png">
92
- <img alt="The Hello window: a greeting label above primary, success, and danger-outline buttons" src="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/quickstart-hello-light.png">
93
- </picture>
94
-
95
- ## The bootstyle keyword
96
-
97
- A `bootstyle` value is a small grammar — a **color**, plus an optional **modifier**
98
- and **widget type** — and the same keyword carries the same meaning across widgets:
99
-
100
- ```python
101
- ttk.Button(app, bootstyle="success")
102
- ttk.Progressbar(app, bootstyle="success")
103
- ttk.Entry(app, bootstyle="success")
104
- ```
105
-
106
- Add a modifier or a type for variants: `"info outline"`, `"success round toggle"`,
107
- `"warning striped"`. The vocabulary is closed, so a typo fails loudly instead of
108
- silently doing nothing. See the
109
- [bootstyle grammar](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/foundations/bootstyle-grammar.html)
110
- for the full reference.
111
-
112
- ## Themes
113
-
114
- Thirty curated light and dark themes, switchable at runtime:
115
-
116
- ```python
117
- app.theme_use("bootstrap-dark") # any theme by name
118
- app.toggle_theme() # flip light <-> dark
119
- ```
120
-
121
- Browse them in the
122
- [themes gallery](https://ttkbootstrap.readthedocs.io/en/latest/themes.html).
123
-
124
- Design your own with the bundled editor — pick colors, preview them on live
125
- widgets, and export a `Theme(...)` snippet for your app:
126
-
127
- ```bash
128
- ttkb creator
129
- ```
130
-
131
- ## Command line
132
-
133
- Installing ttkbootstrap installs `ttkb`:
134
-
135
- | Command | What it does |
136
- | --- | --- |
137
- | `ttkb version` | Print the installed version |
138
- | `ttkb demo` | Open the widget demo |
139
- | `ttkb convert-theme <file>` | Convert a 1.x theme file to the 2.x `Theme(...)` form |
140
- | `ttkb creator` | Open ttkcreator, the theme designer |
141
-
142
- See the [command-line reference](https://ttkbootstrap.readthedocs.io/en/latest/reference/cli.html).
143
-
144
- ## Documentation
145
-
146
- - **[Documentation](https://ttkbootstrap.readthedocs.io/en/latest/)** — guides, the widget catalog, and the API reference.
147
- - **[Build your first app](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/getting-started/build-your-first-app.html)** — a step-by-step walkthrough.
148
- - **[Migrating to 2.0](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/getting-started/migrating.html)** — upgrading from 1.x.
149
- - **[Release notes](https://github.com/israel-dryer/ttkbootstrap/releases)** — what changed in each version.
150
-
151
- ## Upgrading from 1.x
152
-
153
- 2.0 is a cleanup-and-consolidation release with some breaking changes — a canonical
154
- `bootstyle` grammar, a new theme catalog, and `App` alongside `Window`. Most code
155
- keeps working: legacy theme names and older spellings are accepted with a
156
- deprecation warning. The
157
- [Migrating to 2.0](https://ttkbootstrap.readthedocs.io/en/latest/user-guide/getting-started/migrating.html)
158
- guide sorts every change into breaking / deprecated / notable / new.
159
-
160
- Custom themes moved out of the package and into your own code. To bring one
161
- forward, convert the file 1.x saved:
162
-
163
- ```bash
164
- ttkb convert-theme user.py -o brand.py
165
- ```
166
-
167
- ## Icons
168
-
169
- ttkbootstrap ships with the full [Bootstrap Icons](https://icons.getbootstrap.com/)
170
- set (2,000+ glyphs), rendered from a bundled font — theme-following, crisp at any
171
- size, and no extra dependency. Add one with the `icon=` keyword:
172
-
173
- ```python
174
- ttk.Button(app, text="Settings", icon="gear-fill", bootstyle="primary")
175
- ```
176
-
177
- Need other icon families — Font Awesome, Material, Lucide, and more? The
178
- [tkinter-icons](https://github.com/israel-dryer/tkinter-icons) extension adds
179
- sixteen icon sets (61,000+ icons) alongside the built-in set.
180
-
181
- ## Contributing
182
-
183
- Contributions are welcome — please check out our contributing guidelines.
184
-
185
- ## Support
186
-
187
- This project is proudly developed with the support of the
188
- <a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener">PyCharm IDE</a>, generously provided by JetBrains.
189
-
190
- <a href="https://www.jetbrains.com/" target="_blank" rel="noopener"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/f6d4e79d-97f4-4368-a944-affd423aa922"> <img width="250" alt="JetBrains logo" src="https://github.com/user-attachments/assets/1e42e5db-ffb5-4c8d-b238-3f5633fb7e6d"> </picture> </a>
191
-
192
- <sub> © 2025 JetBrains s.r.o. JetBrains and the JetBrains logo are registered trademarks of JetBrains s.r.o. </sub>
1
+ Metadata-Version: 2.4
2
+ Name: ttkbootstrap
3
+ Version: 2.2.3
4
+ Summary: Modern themes for Tkinter. Sleek, responsive styles inspired by Bootstrap. Includes ready-to-use widgets, 30+ themes, and tools for building beautiful, cross-platform desktop apps with ease.
5
+ Author-email: Israel Dryer <israel.dryer@gmail.com>
6
+ License-Expression: MIT AND (Apache-2.0 OR BSD-2-Clause)
7
+ Project-URL: Homepage, https://github.com/israel-dryer/ttkbootstrap
8
+ Project-URL: Documentation, https://www.ttkbootstrap.org/en/latest/
9
+ Keywords: tkinter,theme,ttk,bootstrap,gui,desktop,python3,ui,widgets,theming,cross-platform,modern,responsive,python-gui
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Environment :: Win32 (MS Windows)
12
+ Classifier: Environment :: X11 Applications :: GTK
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Software Development :: User Interfaces
21
+ Classifier: Operating System :: OS Independent
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: pillow<13,>=10
26
+ Dynamic: license-file
27
+
28
+ [![CI](https://github.com/israel-dryer/ttkbootstrap/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/israel-dryer/ttkbootstrap/actions/workflows/ci.yml)
29
+ ![](https://img.shields.io/github/release/israel-dryer/ttkbootstrap.svg)
30
+ [![Downloads](https://pepy.tech/badge/ttkbootstrap)](https://pepy.tech/project/ttkbootstrap)
31
+ [![Downloads](https://pepy.tech/badge/ttkbootstrap/month)](https://pepy.tech/project/ttkbootstrap)
32
+ ![](https://img.shields.io/github/issues/israel-dryer/ttkbootstrap.svg)
33
+ ![](https://img.shields.io/github/license/israel-dryer/ttkbootstrap.svg)
34
+ ![](https://img.shields.io/github/stars/israel-dryer/ttkbootstrap.svg)
35
+ ![](https://img.shields.io/pypi/pyversions/ttkbootstrap.svg)
36
+
37
+ # ttkbootstrap
38
+
39
+ **Modern, themed tkinter — style any ttk widget with one keyword.**
40
+
41
+ ttkbootstrap is a theming extension for tkinter. It generates flat,
42
+ Bootstrap-inspired light and dark themes on demand and adds a single ``bootstyle``
43
+ keyword to every ttk widget, so you describe *intent* — ``"primary"``,
44
+ ``"success"``, ``"outline"`` — instead of hand-tuning colors or long ttk style
45
+ names.
46
+
47
+ <picture>
48
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/home-hero-dark.png">
49
+ <img alt="A ttkbootstrap window: color swatches above themed buttons, inputs, a meter, a table, and a notebook" src="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/home-hero-light.png">
50
+ </picture>
51
+
52
+ ## Why ttkbootstrap
53
+
54
+ - 🎨 **30 curated themes** — fifteen families, each in a coordinated light and dark variant, that switch at runtime.
55
+ - ⌨️ **One-keyword styling** — `bootstyle="success"`, `bootstyle="info outline"`, `bootstyle="round toggle"`. The same keyword means the same thing on every widget.
56
+ - 🧩 **Batteries-included** — styled ttk widgets plus a few extras (`Meter`, `DateEntry`, `Floodgauge`, `Tableview`) and fully themed dialogs.
57
+ - 🛠️ **Your own themes & styles** — a declarative `Theme(...)` API and a public toolkit for building custom widget styles.
58
+ - 🪶 **Pure Python** — one dependency (Pillow), Python 3.10+, no native extensions.
59
+
60
+ It's a **styling layer for vanilla tkinter**, not a new framework: the widgets stay
61
+ tkinter's, and everything you already know about tkinter still applies.
62
+
63
+ ## Install
64
+
65
+ ```bash
66
+ python -m pip install ttkbootstrap
67
+ ```
68
+
69
+ Then see it running — this opens a window with every widget and a theme picker:
70
+
71
+ ```bash
72
+ ttkb demo
73
+ ```
74
+
75
+ ## Quickstart
76
+
77
+ ```python
78
+ import ttkbootstrap as ttk
79
+
80
+ app = ttk.App(title="Hello")
81
+
82
+ ttk.Label(app, text="Hello from ttkbootstrap!").pack(padx=16, pady=(16, 8))
83
+ ttk.Button(app, text="Primary", bootstyle="primary").pack(padx=16, pady=4)
84
+ ttk.Button(app, text="Success", bootstyle="success").pack(padx=16, pady=4)
85
+ ttk.Button(app, text="Danger Outline", bootstyle="danger outline").pack(padx=16, pady=(4, 16))
86
+
87
+ app.mainloop()
88
+ ```
89
+
90
+ <picture>
91
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/quickstart-hello-dark.png">
92
+ <img alt="The Hello window: a greeting label above primary, success, and danger-outline buttons" src="https://raw.githubusercontent.com/israel-dryer/ttkbootstrap/master/docs/_static/examples/quickstart-hello-light.png">
93
+ </picture>
94
+
95
+ ## The bootstyle keyword
96
+
97
+ A `bootstyle` value is a small grammar — a **color**, plus an optional **modifier**
98
+ and **widget type** — and the same keyword carries the same meaning across widgets:
99
+
100
+ ```python
101
+ ttk.Button(app, bootstyle="success")
102
+ ttk.Progressbar(app, bootstyle="success")
103
+ ttk.Entry(app, bootstyle="success")
104
+ ```
105
+
106
+ Add a modifier or a type for variants: `"info outline"`, `"success round toggle"`,
107
+ `"warning striped"`. The vocabulary is closed, so a typo fails loudly instead of
108
+ silently doing nothing. See the
109
+ [bootstyle grammar](https://www.ttkbootstrap.org/en/latest/user-guide/foundations/bootstyle-grammar.html)
110
+ for the full reference.
111
+
112
+ ## Themes
113
+
114
+ Thirty curated light and dark themes, switchable at runtime:
115
+
116
+ ```python
117
+ app.theme_use("bootstrap-dark") # any theme by name
118
+ app.toggle_theme() # flip light <-> dark
119
+ ```
120
+
121
+ Browse them in the
122
+ [themes gallery](https://www.ttkbootstrap.org/en/latest/themes.html).
123
+
124
+ Design your own with the bundled editor — pick colors, preview them on live
125
+ widgets, and export a `Theme(...)` snippet for your app:
126
+
127
+ ```bash
128
+ ttkb creator
129
+ ```
130
+
131
+ ## Command line
132
+
133
+ Installing ttkbootstrap installs `ttkb`:
134
+
135
+ | Command | What it does |
136
+ | --- | --- |
137
+ | `ttkb version` | Print the installed version |
138
+ | `ttkb demo` | Open the widget demo |
139
+ | `ttkb convert-theme <file>` | Convert a 1.x theme file to the 2.x `Theme(...)` form |
140
+ | `ttkb creator` | Open ttkcreator, the theme designer |
141
+
142
+ See the [command-line reference](https://www.ttkbootstrap.org/en/latest/reference/cli.html).
143
+
144
+ ## Documentation
145
+
146
+ - **[Documentation](https://www.ttkbootstrap.org/en/latest/)** — guides, the widget catalog, and the API reference.
147
+ - **[Build your first app](https://www.ttkbootstrap.org/en/latest/user-guide/getting-started/build-your-first-app.html)** — a step-by-step walkthrough.
148
+ - **[Migrating to 2.0](https://www.ttkbootstrap.org/en/latest/user-guide/getting-started/migrating.html)** — upgrading from 1.x.
149
+ - **[Release notes](https://github.com/israel-dryer/ttkbootstrap/releases)** — what changed in each version.
150
+
151
+ ## Upgrading from 1.x
152
+
153
+ 2.0 is a cleanup-and-consolidation release with some breaking changes — a canonical
154
+ `bootstyle` grammar, a new theme catalog, and `App` alongside `Window`. Most code
155
+ keeps working: legacy theme names and older spellings are accepted with a
156
+ deprecation warning. The
157
+ [Migrating to 2.0](https://www.ttkbootstrap.org/en/latest/user-guide/getting-started/migrating.html)
158
+ guide sorts every change into breaking / deprecated / notable / new.
159
+
160
+ Custom themes moved out of the package and into your own code. To bring one
161
+ forward, convert the file 1.x saved:
162
+
163
+ ```bash
164
+ ttkb convert-theme user.py -o brand.py
165
+ ```
166
+
167
+ ## Icons
168
+
169
+ ttkbootstrap ships with the full [Bootstrap Icons](https://icons.getbootstrap.com/)
170
+ set (2,000+ glyphs), rendered from a bundled font — theme-following, crisp at any
171
+ size, and no extra dependency. Add one with the `icon=` keyword:
172
+
173
+ ```python
174
+ ttk.Button(app, text="Settings", icon="gear-fill", bootstyle="primary")
175
+ ```
176
+
177
+ Need other icon families — Font Awesome, Material, Lucide, and more? The
178
+ [tkinter-icons](https://github.com/israel-dryer/tkinter-icons) extension adds
179
+ sixteen icon sets (61,000+ icons) alongside the built-in set.
180
+
181
+ ## Contributing
182
+
183
+ Contributions are welcome — please check out our contributing guidelines.
184
+
185
+ ## Support
186
+
187
+ This project is proudly developed with the support of the
188
+ <a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener">PyCharm IDE</a>, generously provided by JetBrains.
189
+
190
+ <a href="https://www.jetbrains.com/" target="_blank" rel="noopener"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/f6d4e79d-97f4-4368-a944-affd423aa922"> <img width="250" alt="JetBrains logo" src="https://github.com/user-attachments/assets/1e42e5db-ffb5-4c8d-b238-3f5633fb7e6d"> </picture> </a>
191
+
192
+ <sub> © 2025 JetBrains s.r.o. JetBrains and the JetBrains logo are registered trademarks of JetBrains s.r.o. </sub>