@jsenv/plugin-toolbar 0.0.1 → 0.1.0

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 (165) hide show
  1. package/dist/css/{toolbar_main.css → toolbar.css} +285 -319
  2. package/dist/html/toolbar.html +91 -80
  3. package/dist/js/toolbar_core.js +1792 -0
  4. package/dist/js/toolbar_injector.js +60 -121
  5. package/dist/jsenv_plugin_toolbar.js +18 -12
  6. package/package.json +10 -3
  7. package/src/client/core/animation_actions.js +8 -0
  8. package/src/client/core/animation_effects.js +12 -0
  9. package/src/client/core/animation_signals.js +12 -0
  10. package/src/client/core/changes_actions.js +9 -0
  11. package/src/client/core/changes_signals.js +3 -0
  12. package/src/client/core/execution_actions.js +50 -0
  13. package/src/client/core/execution_effects.js +22 -0
  14. package/src/client/core/execution_signals.js +19 -0
  15. package/src/client/core/notification_actions.js +71 -0
  16. package/src/client/core/notification_context.js +1 -0
  17. package/src/client/core/notification_effects.js +11 -0
  18. package/src/client/core/notification_signals.js +13 -0
  19. package/src/client/{communication/parent_window_communication.js → core/parent_window_actions.js} +10 -0
  20. package/src/client/core/parent_window_context.js +7 -0
  21. package/src/client/core/parent_window_effects.js +20 -0
  22. package/src/client/core/parent_window_signals.js +34 -0
  23. package/src/client/core/server_actions.js +9 -0
  24. package/src/client/core/server_effects.js +11 -0
  25. package/src/client/core/server_signals.js +12 -0
  26. package/src/client/core/settings_actions.js +9 -0
  27. package/src/client/core/settings_signals.js +3 -0
  28. package/src/client/core/theme_actions.js +9 -0
  29. package/src/client/core/theme_effects.js +8 -0
  30. package/src/client/core/theme_signals.js +12 -0
  31. package/src/client/core/toolbar_logger.js +29 -0
  32. package/src/client/core/toolbar_open_actions.js +9 -0
  33. package/src/client/core/toolbar_open_effects.js +5 -0
  34. package/src/client/core/toolbar_open_signals.js +12 -0
  35. package/src/client/core/toolbar_state_context.js +5 -0
  36. package/src/client/core/toolbar_state_effects.js +10 -0
  37. package/src/client/core/toolbar_state_signals.js +20 -0
  38. package/src/client/core/tooltip_actions.js +7 -0
  39. package/src/client/toolbar.html +116 -89
  40. package/src/client/toolbar_core.js +8 -0
  41. package/src/client/toolbar_injector.js +64 -39
  42. package/src/client/ui/changes_indicator/changes_indicator.js +66 -0
  43. package/src/client/{execution/execution.css → ui/document_execution_indicator/document_execution_indicator.css} +10 -14
  44. package/src/client/ui/document_execution_indicator/document_execution_indicator.js +66 -0
  45. package/src/client/ui/document_index_link/document_index_link.js +8 -0
  46. package/src/client/ui/globals.css +103 -0
  47. package/src/client/{jsenv_logo.svg → ui/jsenv_logo.svg} +0 -0
  48. package/src/client/{eventsource/eventsource.css → ui/server_indicator/server_indicator.css} +14 -24
  49. package/src/client/ui/server_indicator/server_indicator.js +62 -0
  50. package/src/client/ui/toolbar.css +76 -0
  51. package/src/client/ui/toolbar_close_button/toolbar_close_button.js +15 -0
  52. package/src/client/{responsive/overflow_menu.css → ui/toolbar_menu_overflow/toolbar_menu_overflow.css} +10 -11
  53. package/src/client/{responsive/toolbar_responsive.js → ui/toolbar_menu_overflow/toolbar_menu_overflow.js} +25 -31
  54. package/src/client/ui/toolbar_opening/toolbar_opening.js +73 -0
  55. package/src/client/ui/toolbar_overlay/toolbar_overlay.js +76 -0
  56. package/src/client/{theme → ui/toolbar_settings}/jsenv_theme.css +6 -6
  57. package/src/client/{theme/light_theme.css → ui/toolbar_settings/theme_light.css} +9 -10
  58. package/src/client/ui/toolbar_settings/toolbar_animation_setting.js +27 -0
  59. package/src/client/ui/toolbar_settings/toolbar_autoreload_setting.js +79 -0
  60. package/src/client/ui/toolbar_settings/toolbar_notification_setting.js +88 -0
  61. package/src/client/{settings/settings.css → ui/toolbar_settings/toolbar_settings.css} +24 -23
  62. package/src/client/ui/toolbar_settings/toolbar_settings.js +54 -0
  63. package/src/client/ui/toolbar_settings/toolbar_theme_setting.js +17 -0
  64. package/src/client/ui/toolbar_ui.js +21 -0
  65. package/src/client/{tooltip/tooltip.css → ui/tooltips/tooltips.css} +13 -7
  66. package/src/client/{util → ui/util}/animation.js +0 -0
  67. package/src/client/ui/util/dom.js +57 -0
  68. package/src/client/{util → ui/util}/fetch_using_xhr.js +0 -0
  69. package/src/client/{util → ui/util}/fetching.js +0 -0
  70. package/src/client/{util → ui/util}/iframe_to_parent_href.js +0 -0
  71. package/src/client/{util → ui/util}/responsive.js +0 -0
  72. package/src/client/{util → ui/util}/util.js +0 -0
  73. package/src/client/{variant → ui}/variant.js +0 -0
  74. package/src/jsenv_plugin_toolbar.js +19 -7
  75. package/dist/js/toolbar_main.js +0 -900
  76. package/scripts/build.mjs +0 -20
  77. package/src/client/animation/toolbar_animation_core.js +0 -30
  78. package/src/client/animation/toolbar_animation_ui.js +0 -21
  79. package/src/client/eventsource/toolbar_eventsource.js +0 -57
  80. package/src/client/execution/toolbar_execution.js +0 -88
  81. package/src/client/focus/focus.css +0 -61
  82. package/src/client/focus/toolbar_focus.js +0 -19
  83. package/src/client/notification/toolbar_notification.js +0 -181
  84. package/src/client/settings/toolbar_settings.js +0 -47
  85. package/src/client/theme/toolbar_theme.js +0 -34
  86. package/src/client/toolbar_main.css +0 -173
  87. package/src/client/toolbar_main.js +0 -174
  88. package/src/client/toolbar_state.js +0 -16
  89. package/src/client/tooltip/tooltip.js +0 -39
  90. package/src/client/util/dom.js +0 -108
  91. package/src/client/util/jsenv_logger.js +0 -28
  92. package/src/client/util/preferences.js +0 -10
  93. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/ast/src/html/html_src_set.js +0 -18
  94. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation.js +0 -45
  95. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation.js.map +0 -12
  96. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_core.js +0 -32
  97. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_core.js.map +0 -12
  98. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_ui.js +0 -23
  99. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/animation/toolbar_animation_ui.js.map +0 -12
  100. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/communication/parent_window_communication.js +0 -33
  101. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/eventsource.css +0 -87
  102. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/toolbar_eventsource.js +0 -59
  103. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/eventsource/toolbar_eventsource.js.map +0 -12
  104. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/execution.css +0 -88
  105. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/toolbar_execution.js +0 -90
  106. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/execution/toolbar_execution.js.map +0 -12
  107. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/focus/focus.css +0 -28
  108. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/focus/toolbar_focus.js +0 -19
  109. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/jsenv_logo.svg +0 -140
  110. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/notification/toolbar_notification.js +0 -183
  111. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/notification/toolbar_notification.js.map +0 -12
  112. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/overflow_menu.css +0 -60
  113. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/toolbar_responsive.js +0 -105
  114. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/responsive/toolbar_responsive.js.map +0 -12
  115. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/settings.css +0 -200
  116. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/toolbar_settings.js +0 -49
  117. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/settings/toolbar_settings.js.map +0 -12
  118. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/light_theme.css +0 -110
  119. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/toolbar_theme.js +0 -36
  120. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/theme/toolbar_theme.js.map +0 -12
  121. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar.html +0 -319
  122. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_injector.js +0 -232
  123. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_injector.js.map +0 -12
  124. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.css +0 -161
  125. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.css.map +0 -12
  126. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.js +0 -176
  127. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_main.js.map +0 -12
  128. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_state.js +0 -18
  129. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/toolbar_state.js.map +0 -12
  130. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.css +0 -60
  131. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.js +0 -41
  132. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/tooltip/tooltip.js.map +0 -12
  133. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/animation.js +0 -307
  134. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/animation.js.map +0 -12
  135. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/dom.js +0 -108
  136. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/iframe_to_parent_href.js +0 -10
  137. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/preferences.js +0 -10
  138. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/util/responsive.js +0 -112
  139. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-toolbar/src/client/variant/variant.js +0 -74
  140. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload.js +0 -201
  141. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload.js.map +0 -12
  142. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/autoreload_preference.js +0 -11
  143. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/reload.js +0 -138
  144. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/reload.js.map +0 -12
  145. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/client/url_helpers.js +0 -20
  146. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html +0 -590
  147. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L15C5-L20C12.js +0 -7
  148. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L15C5-L20C12.js.map +0 -12
  149. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L368C5-L481C14.js +0 -114
  150. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L482C5-L605C14.js +0 -124
  151. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L69C5-L299C13.css +0 -227
  152. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/explorer/client/explorer.html@L8C5-L68C13.css +0 -28
  153. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js +0 -82
  154. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/ribbon/client/ribbon.js +0 -51
  155. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/connection_manager.js +0 -165
  156. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/events_manager.js +0 -75
  157. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/server_events_client.js +0 -20
  158. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/server_events_client.js.map +0 -12
  159. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/web_socket_connection.js +0 -83
  160. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/server_events/client/web_socket_connection.js.map +0 -12
  161. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/supervisor/client/script_type_module_supervisor.js +0 -98
  162. package/tests/toolbar_basic/.jsenv/chrome@107.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/supervisor/client/supervisor.js +0 -966
  163. package/tests/toolbar_basic/main.html +0 -18
  164. package/tests/toolbar_basic/start_dev_server.mjs +0 -7
  165. package/todo.txt +0 -0
@@ -0,0 +1,88 @@
1
+ import { effect } from "@preact/signals"
2
+
3
+ import {
4
+ notificationsEnabledSignal,
5
+ notificationPermissionSignal,
6
+ } from "../../core/notification_signals.js"
7
+ import { notificationAPIDetected } from "../../core/notification_context.js"
8
+ import {
9
+ enableNotifications,
10
+ disableNotifications,
11
+ requestPermission,
12
+ } from "../../core/notification_actions.js"
13
+ import { enableVariant } from "../variant.js"
14
+
15
+ const notifCheckbox = document.querySelector("#toggle_notifs")
16
+
17
+ export const renderToolbarNotificationSetting = () => {
18
+ effect(() => {
19
+ const notificationsEnabled = notificationsEnabledSignal.value
20
+ notifCheckbox.checked = notificationsEnabled
21
+ })
22
+
23
+ effect(() => {
24
+ const notificationPermission = notificationPermissionSignal.value
25
+ if (!notificationAPIDetected) {
26
+ applyNotificationNotAvailableEffects()
27
+ return
28
+ }
29
+ if (notificationPermission === "default") {
30
+ applyNotificationDefaultEffects()
31
+ return
32
+ }
33
+ if (notificationPermission === "denied") {
34
+ applyNotificationDeniedEffects()
35
+ return
36
+ }
37
+ if (notificationPermission === "granted") {
38
+ applyNotificationGrantedEffects()
39
+ return
40
+ }
41
+ })
42
+ }
43
+
44
+ const applyNotificationNotAvailableEffects = () => {
45
+ const notifSetting = document.querySelector(".settings_notification")
46
+ notifSetting.setAttribute("data-disabled", "true")
47
+ notifSetting.setAttribute(
48
+ "title",
49
+ `Notification not available in the browser`,
50
+ )
51
+ notifCheckbox.disabled = true
52
+ }
53
+ const applyNotificationDefaultEffects = () => {
54
+ applyNotificationNOTGrantedEffects()
55
+ const notifSetting = document.querySelector(".settings_notification")
56
+ notifSetting.removeAttribute("data-disabled")
57
+ notifSetting.removeAttribute("title")
58
+ }
59
+ const applyNotificationDeniedEffects = () => {
60
+ applyNotificationNOTGrantedEffects()
61
+ const notifSetting = document.querySelector(".settings_notification")
62
+ notifSetting.setAttribute("data-disabled", "true")
63
+ notifSetting.setAttribute("title", `Notification denied`)
64
+ }
65
+ const applyNotificationGrantedEffects = () => {
66
+ enableVariant(document.querySelector(".notification_text"), {
67
+ notif_granted: "yes",
68
+ })
69
+ notifCheckbox.disabled = false
70
+ notifCheckbox.onchange = () => {
71
+ if (notifCheckbox.checked) {
72
+ enableNotifications()
73
+ } else {
74
+ disableNotifications()
75
+ }
76
+ }
77
+ }
78
+
79
+ const applyNotificationNOTGrantedEffects = () => {
80
+ enableVariant(document.querySelector(".notification_text"), {
81
+ notif_granted: "no",
82
+ })
83
+ notifCheckbox.disabled = true
84
+ notifCheckbox.checked = false
85
+ document.querySelector("a.request_notification_permission").onclick = () => {
86
+ requestPermission()
87
+ }
88
+ }
@@ -1,16 +1,18 @@
1
- #settings-button {
1
+ @import "./theme_light.css";
2
+
3
+ #settings_button {
2
4
  position: relative;
3
5
  }
4
6
 
5
- #settings-button[data-warning] svg {
7
+ #settings_button[data-warning] svg {
6
8
  fill: #cb5909;
7
9
  }
8
10
 
9
- #settings-button[data-warning] svg:hover {
11
+ #settings_button[data-warning] svg:hover {
10
12
  fill: darkorange !important;
11
13
  }
12
14
 
13
- #settings-box {
15
+ #settings_box {
14
16
  display: none;
15
17
  position: absolute;
16
18
  bottom: 40px;
@@ -26,7 +28,7 @@
26
28
  z-index: -1;
27
29
  }
28
30
 
29
- [data-active] #settings-box {
31
+ [data-active] #settings_box {
30
32
  display: block;
31
33
  animation: comeUp ease 0.3s;
32
34
  }
@@ -42,7 +44,7 @@
42
44
  }
43
45
  }
44
46
 
45
- #settings-box-body {
47
+ #settings_box_body {
46
48
  text-align: left;
47
49
  padding: 18px 0;
48
50
  max-height: 80vh;
@@ -52,21 +54,21 @@
52
54
  justify-content: center;
53
55
  }
54
56
 
55
- .settings-box-items-wrapper {
57
+ .settings_box_items_wrapper {
56
58
  max-width: 700px;
57
59
  display: flex;
58
60
  flex-wrap: wrap;
59
61
  justify-content: center;
60
62
  }
61
63
 
62
- .settings-box-item {
64
+ .settings_box_item {
63
65
  padding: 15px;
64
66
  background: #0c111b;
65
67
  width: 250px;
66
68
  margin: 9px 18px;
67
69
  }
68
70
 
69
- #settings-box-header .settings-icon {
71
+ #settings_box_header .settings_icon {
70
72
  fill: none;
71
73
  stroke: #24b1b0;
72
74
  stroke-width: 2;
@@ -77,19 +79,18 @@
77
79
  top: 4px;
78
80
  }
79
81
 
80
- #settings-box h3 {
82
+ #settings_box h3 {
81
83
  display: inline-block;
82
84
  font-size: 20px;
83
85
  margin: 10px 0;
84
86
  color: #24b1b0;
85
87
  }
86
88
 
87
- #button-close-settings {
89
+ #settings_close_button {
88
90
  float: right;
89
91
  fill: #24b1b0;
90
92
  }
91
-
92
- #button-close-settings:hover {
93
+ #settings_close_button:hover {
93
94
  opacity: 0.6;
94
95
  }
95
96
 
@@ -100,7 +101,7 @@ label {
100
101
  display: block;
101
102
  }
102
103
 
103
- #settings-box .category-title {
104
+ #settings_box .category_title {
104
105
  color: #24b1b0;
105
106
  font-size: 16px;
106
107
  display: inline-block;
@@ -108,7 +109,7 @@ label {
108
109
  margin-top: 4px;
109
110
  }
110
111
 
111
- #settings-box .category-title svg {
112
+ #settings_box .category_title svg {
112
113
  fill: currentColor;
113
114
  vertical-align: top;
114
115
  margin-right: 5px;
@@ -116,7 +117,7 @@ label {
116
117
  height: 18px;
117
118
  }
118
119
 
119
- #settings-box .category-subtitle {
120
+ #settings_box .category_subtitle {
120
121
  color: #a9a8a8;
121
122
  font-size: 14px;
122
123
  max-width: 220px;
@@ -181,21 +182,21 @@ To be able to apply an outline to this element later*/
181
182
  background-color: #24b1b0;
182
183
  }
183
184
 
184
- .settings-box-item[data-disabled] {
185
+ .settings_box_item[data-disabled] {
185
186
  background-color: rgba(12, 17, 27, 0.4);
186
187
  cursor: default;
187
188
  }
188
- .settings-box-item[data-disabled] .category-title,
189
- .settings-box-item[data-disabled] .switch,
190
- .settings-box-item[data-disabled] .category-subtitle {
189
+ .settings_box_item[data-disabled] .category_title,
190
+ .settings_box_item[data-disabled] .switch,
191
+ .settings_box_item[data-disabled] .category_subtitle {
191
192
  opacity: 0.4;
192
193
  }
193
- .settings-box-item[data-disabled] .category-title span {
194
+ .settings_box_item[data-disabled] .category_title span {
194
195
  text-decoration: line-through;
195
196
  }
196
- .settings-box-item[data-disabled] .category-subtitle {
197
+ .settings_box_item[data-disabled] .category_subtitle {
197
198
  text-decoration: line-through;
198
199
  }
199
- .settings-box-item[data-disabled] .switch {
200
+ .settings_box_item[data-disabled] .switch {
200
201
  cursor: default;
201
202
  }
@@ -0,0 +1,54 @@
1
+ import { effect } from "@preact/signals"
2
+
3
+ import { settingsOpenedSignal } from "../../core/settings_signals.js"
4
+ import { openSettings, closeSettings } from "../../core/settings_actions.js"
5
+ import { enableVariant } from "../variant.js"
6
+ import {
7
+ activateToolbarSection,
8
+ deactivateToolbarSection,
9
+ } from "../util/dom.js"
10
+ import { renderToolbarAutoreloadSetting } from "./toolbar_autoreload_setting.js"
11
+ import { renderToolbarAnimationSetting } from "./toolbar_animation_setting.js"
12
+ import { renderToolbarNotificationSetting } from "./toolbar_notification_setting.js"
13
+ import { renderToolbarThemeSetting } from "./toolbar_theme_setting.js"
14
+
15
+ export const renderToolbarSettings = () => {
16
+ document.querySelector("#settings_open_button").onclick = toggleSettings
17
+ document.querySelector("#settings_close_button").onclick = toggleSettings
18
+ disableWarningStyle()
19
+
20
+ renderToolbarAutoreloadSetting()
21
+ renderToolbarAnimationSetting()
22
+ renderToolbarNotificationSetting()
23
+ renderToolbarThemeSetting()
24
+
25
+ effect(() => {
26
+ const settingsOpened = settingsOpenedSignal.value
27
+ if (settingsOpened) {
28
+ activateToolbarSection(document.querySelector("#settings"))
29
+ } else {
30
+ deactivateToolbarSection(document.querySelector("#settings"))
31
+ }
32
+ })
33
+ }
34
+
35
+ const toggleSettings = () => {
36
+ const settingsOpened = settingsOpenedSignal.value
37
+ if (settingsOpened) {
38
+ closeSettings()
39
+ } else {
40
+ openSettings()
41
+ }
42
+ }
43
+
44
+ export const enableWarningStyle = () => {
45
+ enableVariant(document.querySelector("#settings_open_button"), {
46
+ has_warning: "yes",
47
+ })
48
+ }
49
+
50
+ export const disableWarningStyle = () => {
51
+ enableVariant(document.querySelector("#settings_open_button"), {
52
+ has_warning: "no",
53
+ })
54
+ }
@@ -0,0 +1,17 @@
1
+ import { themeSignal } from "../../core/theme_signals.js"
2
+ import {
3
+ switchToDefaultTheme,
4
+ switchToLightTheme,
5
+ } from "../../core/theme_actions.js"
6
+
7
+ export const renderToolbarThemeSetting = () => {
8
+ const checkbox = document.querySelector("#checkbox_dark_theme")
9
+ checkbox.checked = themeSignal.value === "dark"
10
+ checkbox.onchange = () => {
11
+ if (checkbox.checked) {
12
+ switchToDefaultTheme()
13
+ } else {
14
+ switchToLightTheme()
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,21 @@
1
+ import { initToolbarOpening } from "./toolbar_opening/toolbar_opening.js"
2
+ import { initToolbarMenuOverflow } from "./toolbar_menu_overflow/toolbar_menu_overflow.js"
3
+ import { renderToolbarOverlay } from "./toolbar_overlay/toolbar_overlay.js"
4
+ import { renderDocumentIndexLink } from "./document_index_link/document_index_link.js"
5
+ import { renderDocumentExecutionIndicator } from "./document_execution_indicator/document_execution_indicator.js"
6
+ import { renderChangesIndicator } from "./changes_indicator/changes_indicator.js"
7
+ import { renderServerIndicator } from "./server_indicator/server_indicator.js"
8
+ import { renderToolbarSettings } from "./toolbar_settings/toolbar_settings.js"
9
+ import { renderToolbarCloseButton } from "./toolbar_close_button/toolbar_close_button.js"
10
+
11
+ export const initToolbarUI = () => {
12
+ initToolbarOpening()
13
+ initToolbarMenuOverflow()
14
+ renderToolbarOverlay()
15
+ renderDocumentIndexLink()
16
+ renderDocumentExecutionIndicator()
17
+ renderChangesIndicator()
18
+ renderServerIndicator()
19
+ renderToolbarSettings()
20
+ renderToolbarCloseButton()
21
+ }
@@ -5,10 +5,10 @@
5
5
  text-align: center;
6
6
  border-radius: 6px;
7
7
  position: absolute;
8
- bottom: 120%;
8
+ bottom: 100%;
9
+ margin-bottom: 6px;
9
10
  padding: 10px;
10
11
  font-size: 14px;
11
- margin-left: -40px;
12
12
  max-width: 260px;
13
13
  cursor: default;
14
14
  }
@@ -17,13 +17,19 @@
17
17
  content: "";
18
18
  position: absolute;
19
19
  top: 100%;
20
- left: 60px;
21
- margin-left: -5px;
20
+ left: 14px;
22
21
  border-width: 5px;
23
22
  border-style: solid;
24
23
  border-color: rgb(94, 94, 94) transparent transparent transparent;
25
24
  }
26
25
 
26
+ .tooltip[data-toolip-left] {
27
+ margin-right: 5px;
28
+ }
29
+ .tooltip[data-toolip-left]::after {
30
+ left: 15px;
31
+ }
32
+
27
33
  [data-tooltip-visible] .tooltip,
28
34
  [data-tooltip-auto-visible] .tooltip {
29
35
  display: block;
@@ -39,7 +45,7 @@
39
45
  }
40
46
  }
41
47
 
42
- .tooltipAction {
48
+ .tooltip_action {
43
49
  display: inline-block;
44
50
  border: 1px solid #a0a0a0;
45
51
  border-radius: 3px;
@@ -47,13 +53,13 @@
47
53
  margin-top: 6px;
48
54
  }
49
55
 
50
- .tooltipAction a {
56
+ .tooltip_action a {
51
57
  vertical-align: middle;
52
58
  color: white;
53
59
  text-decoration: none;
54
60
  }
55
61
 
56
- .tooltipIcon {
62
+ .tooltip_icon {
57
63
  fill: white;
58
64
  width: 20px;
59
65
  height: 20px;
File without changes
@@ -0,0 +1,57 @@
1
+ export const getToolbarIframe = () => {
2
+ const iframes = Array.from(window.parent.document.querySelectorAll("iframe"))
3
+ return iframes.find((iframe) => iframe.contentWindow === window)
4
+ }
5
+
6
+ export const forceHideElement = (element) => {
7
+ element.setAttribute("data-force-hide", "")
8
+ }
9
+
10
+ export const removeForceHideElement = (element) => {
11
+ element.removeAttribute("data-force-hide")
12
+ }
13
+
14
+ export const setStyles = (element, styles) => {
15
+ const elementStyle = element.style
16
+ const restoreStyles = Object.keys(styles).map((styleName) => {
17
+ let restore
18
+ if (styleName in elementStyle) {
19
+ const currentStyle = elementStyle[styleName]
20
+ restore = () => {
21
+ elementStyle[styleName] = currentStyle
22
+ }
23
+ } else {
24
+ restore = () => {
25
+ delete elementStyle[styleName]
26
+ }
27
+ }
28
+
29
+ elementStyle[styleName] = styles[styleName]
30
+
31
+ return restore
32
+ })
33
+ return () => {
34
+ restoreStyles.forEach((restore) => restore())
35
+ }
36
+ }
37
+
38
+ export const setAttributes = (element, attributes) => {
39
+ Object.keys(attributes).forEach((name) => {
40
+ element.setAttribute(name, attributes[name])
41
+ })
42
+ }
43
+
44
+ export const getDocumentScroll = () => {
45
+ return {
46
+ x: document.documentElement.scrollLeft,
47
+ y: document.documentElement.scrollTop,
48
+ }
49
+ }
50
+
51
+ export const activateToolbarSection = (element) => {
52
+ element.setAttribute("data-active", "")
53
+ }
54
+
55
+ export const deactivateToolbarSection = (element) => {
56
+ element.removeAttribute("data-active")
57
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -5,7 +5,14 @@ import {
5
5
  createHtmlNode,
6
6
  } from "@jsenv/ast"
7
7
 
8
- export const jsenvPluginToolbar = ({ logs = false } = {}) => {
8
+ export const jsenvPluginToolbar = ({
9
+ logLevel = "warn",
10
+ theme = "dark",
11
+ opened = false,
12
+ autoreload = true,
13
+ animationsEnabled = true,
14
+ notificationsEnabled = true,
15
+ } = {}) => {
9
16
  const toolbarInjectorClientFileUrl = new URL(
10
17
  "./client/toolbar_injector.js",
11
18
  import.meta.url,
@@ -19,18 +26,18 @@ export const jsenvPluginToolbar = ({ logs = false } = {}) => {
19
26
  name: "jsenv:toolbar",
20
27
  appliesDuring: "dev",
21
28
  transformUrlContent: {
22
- html: (urlInfo, { referenceUtils }) => {
23
- urlInfo.data.noribbon = true
24
- if (urlInfo.url === toolbarHtmlClientFileUrl) {
29
+ html: (urlInfo, context) => {
30
+ if (urlInfo.url.startsWith(toolbarHtmlClientFileUrl)) {
31
+ urlInfo.data.isJsenvToolbar = true
25
32
  return null
26
33
  }
27
34
  const htmlAst = parseHtmlString(urlInfo.content)
28
- const [toolbarInjectorReference] = referenceUtils.inject({
35
+ const [toolbarInjectorReference] = context.referenceUtils.inject({
29
36
  type: "js_import",
30
37
  expectedType: "js_module",
31
38
  specifier: toolbarInjectorClientFileUrl,
32
39
  })
33
- const [toolbarClientFileReference] = referenceUtils.inject({
40
+ const [toolbarClientFileReference] = context.referenceUtils.inject({
34
41
  type: "iframe_src",
35
42
  expectedType: "html",
36
43
  specifier: toolbarHtmlClientFileUrl,
@@ -45,7 +52,12 @@ import { injectToolbar } from ${toolbarInjectorReference.generatedSpecifier}
45
52
  injectToolbar(${JSON.stringify(
46
53
  {
47
54
  toolbarUrl: toolbarClientFileReference.generatedSpecifier,
48
- logs,
55
+ logLevel,
56
+ theme,
57
+ opened,
58
+ autoreload,
59
+ animationsEnabled,
60
+ notificationsEnabled,
49
61
  },
50
62
  null,
51
63
  " ",