bullet_train-fields 1.30.1 → 1.31.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 300757564ae5f5ab1f4d33521caee2586fe5a017f96ecc5f9d40830c70bf328e
4
- data.tar.gz: '09f46f4bb069c4d767f95d63dbd349ab2a318f4207a6037d0483c2623662da69'
3
+ metadata.gz: 10baa4940e255682cde49f971cf31ce5eaa53b05e56ef712ed69d5ca829fef55
4
+ data.tar.gz: 34385f1e90beb26274e9b83e424e3e6d318c6a67a59d641b3ecd871da045c49e
5
5
  SHA512:
6
- metadata.gz: 9de12648bb0313454f0145aef192ead8a0c2ca6d974a6321fb2abccc3077df39bf5726407e017e3cace5f06c00752d87db04f208edcd88e804769f2afed4b441
7
- data.tar.gz: 90dabf8a47c7ca5fa3d3b65fd8a08f06eb76fd5fb97f6a973f5db63d39a8da059420ae015431f8015f791d8ef96fa7e2cd5379e6299389b3317d255eec9bea09
6
+ metadata.gz: 34d98999defc16059e67e17d66ccd0ff5c52a5f1bd4bbfb7c883c52622a31227126df4b8f4a240c0041507ccc7da2d5ba188849bc4c49aba62436d98a1dd74e7
7
+ data.tar.gz: c1e44977dbef4e653249ab9ccae9568222cbd5dc436391292167f6dd289f9b51b19456b628bef8c146bbcfec7bd17e6c00cdcaac9f8a2e657481dd12c05a85d1
@@ -27,12 +27,10 @@ export default class extends Controller {
27
27
 
28
28
  connect() {
29
29
  this.loadEditorFramework()
30
- this.watchColorScheme()
31
30
  }
32
31
 
33
32
  disconnect() {
34
33
  this.teardownCodeEditor()
35
- this.unwatchColorScheme()
36
34
  }
37
35
 
38
36
  initCodeEditor() {
@@ -144,39 +142,17 @@ export default class extends Controller {
144
142
  return window.monacoInstance
145
143
  }
146
144
 
147
- watchColorScheme() {
148
- this.userPrefersDarkSchemeQuery = window.matchMedia(
149
- '(prefers-color-scheme: dark)'
150
- )
151
- this.userPrefersDarkSchemeQuery.addEventListener(
152
- 'change',
153
- this.updateTheme.bind(this)
154
- )
155
- }
156
-
157
- unwatchColorScheme() {
158
- if (this.userPrefersDarkSchemeQuery === undefined) return
159
- this.userPrefersDarkSchemeQuery.removeEventListener(
160
- 'change',
161
- this.updateTheme.bind(this)
162
- )
163
- this.userPrefersDarkSchemeQuery = undefined
145
+ updateComponentTheme() {
146
+ this.codeEditor?.updateOptions({ theme: this.theme })
164
147
  }
165
148
 
166
- updateTheme() {
167
- this.codeEditor?.updateOptions({ theme: this.theme })
149
+ get colorSchemeIsDark() {
150
+ return window?.colorScheme?.current === 'dark'
168
151
  }
169
152
 
170
153
  get theme() {
171
- return this.userPrefersDarkScheme
154
+ return this.colorSchemeIsDark
172
155
  ? this.themeDarkValue
173
156
  : this.themeLightValue
174
157
  }
175
-
176
- get userPrefersDarkScheme() {
177
- if (this.userPrefersDarkSchemeQuery === undefined) {
178
- return false
179
- }
180
- return this.userPrefersDarkSchemeQuery.matches
181
- }
182
158
  }
@@ -0,0 +1,39 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+
3
+ export default class extends Controller {
4
+
5
+ connect() {
6
+ this.updateRadioButtons()
7
+ if (window.colorScheme === undefined) {
8
+ this.hideOptions()
9
+ console.warn(`window.colorScheme is not defined in the head. Update your local theme's light/layouts/_head.html.erb file.`)
10
+ }
11
+ }
12
+
13
+ // this saves us from manually adding field target to options in the partial
14
+ get radioButtons() {
15
+ return Array.from(this.element.querySelectorAll('input[type="radio"]'))
16
+ }
17
+
18
+ updateRadioButtons() {
19
+ if (!window?.colorScheme) { return }
20
+ const preference = window?.colorScheme?.preference
21
+ const button = this.radioButtonWithValue(preference)
22
+ if (button) {
23
+ button.checked = true
24
+ }
25
+ }
26
+
27
+ updateColorSchemePreference() {
28
+ if (!window?.colorScheme) { return }
29
+ window.colorScheme.preference = this.radioButtons.find(button => button.checked)?.value
30
+ }
31
+
32
+ hideOptions() {
33
+ this.element.hidden = true
34
+ }
35
+
36
+ radioButtonWithValue(value) {
37
+ return this.radioButtons.find(button => button.value === value)
38
+ }
39
+ }
@@ -14,6 +14,7 @@ import SuperSelectController from './fields/super_select_controller'
14
14
  import DependableController from './dependable_controller'
15
15
  import DependentFieldsFrameController from './dependent_fields_frame_controller'
16
16
  import CodeEditorController from './fields/code_editor_controller'
17
+ import ColorSchemePreferenceController from './fields/color_scheme_preference_controller'
17
18
 
18
19
  export const controllerDefinitions = [
19
20
  [FieldController, 'fields/field_controller.js'],
@@ -30,6 +31,7 @@ export const controllerDefinitions = [
30
31
  [DependableController, 'dependable_controller.js'],
31
32
  [DependentFieldsFrameController, 'dependent_fields_frame_controller.js'],
32
33
  [CodeEditorController, 'fields/code_editor_controller.js'],
34
+ [ColorSchemePreferenceController, 'fields/color_scheme_preference_controller.js'],
33
35
  ].map(function(d) {
34
36
  const key = d[1]
35
37
  const controller = d[0]
@@ -54,4 +56,5 @@ export {
54
56
  DependableController,
55
57
  DependentFieldsFrameController,
56
58
  CodeEditorController,
59
+ ColorSchemePreferenceController
57
60
  }
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Fields
3
- VERSION = "1.30.1"
3
+ VERSION = "1.31.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.30.1
4
+ version: 1.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
@@ -127,6 +127,7 @@ files:
127
127
  - app/javascript/controllers/fields/cloudinary_image_controller.js
128
128
  - app/javascript/controllers/fields/code_editor_controller.js
129
129
  - app/javascript/controllers/fields/color_picker_controller.js
130
+ - app/javascript/controllers/fields/color_scheme_preference_controller.js
130
131
  - app/javascript/controllers/fields/date_controller.js
131
132
  - app/javascript/controllers/fields/emoji_picker_controller.js
132
133
  - app/javascript/controllers/fields/field_controller.js