ultimate_turbo_modal 2.0.4 → 2.1.1

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 (164) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/TM_COMMANDS_GUIDE.md +0 -0
  3. data/.claude/commands/tm/add-dependency/add-dependency.md +0 -0
  4. data/.claude/commands/tm/add-subtask/add-subtask.md +0 -0
  5. data/.claude/commands/tm/add-subtask/convert-task-to-subtask.md +0 -0
  6. data/.claude/commands/tm/add-task/add-task.md +0 -0
  7. data/.claude/commands/tm/analyze-complexity/analyze-complexity.md +0 -0
  8. data/.claude/commands/tm/clear-subtasks/clear-all-subtasks.md +0 -0
  9. data/.claude/commands/tm/clear-subtasks/clear-subtasks.md +0 -0
  10. data/.claude/commands/tm/complexity-report/complexity-report.md +0 -0
  11. data/.claude/commands/tm/expand/expand-all-tasks.md +0 -0
  12. data/.claude/commands/tm/expand/expand-task.md +0 -0
  13. data/.claude/commands/tm/fix-dependencies/fix-dependencies.md +0 -0
  14. data/.claude/commands/tm/generate/generate-tasks.md +0 -0
  15. data/.claude/commands/tm/help.md +0 -0
  16. data/.claude/commands/tm/init/init-project-quick.md +0 -0
  17. data/.claude/commands/tm/init/init-project.md +0 -0
  18. data/.claude/commands/tm/learn.md +0 -0
  19. data/.claude/commands/tm/list/list-tasks-by-status.md +0 -0
  20. data/.claude/commands/tm/list/list-tasks-with-subtasks.md +0 -0
  21. data/.claude/commands/tm/list/list-tasks.md +0 -0
  22. data/.claude/commands/tm/models/setup-models.md +0 -0
  23. data/.claude/commands/tm/models/view-models.md +0 -0
  24. data/.claude/commands/tm/next/next-task.md +0 -0
  25. data/.claude/commands/tm/parse-prd/parse-prd-with-research.md +0 -0
  26. data/.claude/commands/tm/parse-prd/parse-prd.md +0 -0
  27. data/.claude/commands/tm/remove-dependency/remove-dependency.md +0 -0
  28. data/.claude/commands/tm/remove-subtask/remove-subtask.md +0 -0
  29. data/.claude/commands/tm/remove-task/remove-task.md +0 -0
  30. data/.claude/commands/tm/set-status/to-cancelled.md +0 -0
  31. data/.claude/commands/tm/set-status/to-deferred.md +0 -0
  32. data/.claude/commands/tm/set-status/to-done.md +0 -0
  33. data/.claude/commands/tm/set-status/to-in-progress.md +0 -0
  34. data/.claude/commands/tm/set-status/to-pending.md +0 -0
  35. data/.claude/commands/tm/set-status/to-review.md +0 -0
  36. data/.claude/commands/tm/setup/install-taskmaster.md +0 -0
  37. data/.claude/commands/tm/setup/quick-install-taskmaster.md +0 -0
  38. data/.claude/commands/tm/show/show-task.md +0 -0
  39. data/.claude/commands/tm/status/project-status.md +0 -0
  40. data/.claude/commands/tm/sync-readme/sync-readme.md +0 -0
  41. data/.claude/commands/tm/tm-main.md +0 -0
  42. data/.claude/commands/tm/update/update-single-task.md +0 -0
  43. data/.claude/commands/tm/update/update-task.md +0 -0
  44. data/.claude/commands/tm/update/update-tasks-from-id.md +0 -0
  45. data/.claude/commands/tm/utils/analyze-project.md +0 -0
  46. data/.claude/commands/tm/validate-dependencies/validate-dependencies.md +0 -0
  47. data/.claude/commands/tm/workflows/auto-implement-tasks.md +0 -0
  48. data/.claude/commands/tm/workflows/command-pipeline.md +0 -0
  49. data/.claude/commands/tm/workflows/smart-workflow.md +0 -0
  50. data/.cursor/rules/taskmaster/dev_workflow.mdc +424 -0
  51. data/.cursor/rules/taskmaster/taskmaster.mdc +558 -0
  52. data/.env.example +0 -0
  53. data/.taskmaster/CLAUDE.md +0 -0
  54. data/.taskmaster/config.json +37 -0
  55. data/.taskmaster/templates/example_prd.txt +0 -0
  56. data/.tool-versions +1 -1
  57. data/CHANGELOG.md +8 -0
  58. data/CLAUDE.md +82 -0
  59. data/Gemfile +1 -1
  60. data/Gemfile.lock +51 -125
  61. data/README.md +62 -98
  62. data/UPGRADING.md +55 -0
  63. data/VERSION +1 -1
  64. data/demo-app/.gitattributes +7 -0
  65. data/demo-app/.gitignore +34 -0
  66. data/demo-app/.ruby-version +1 -0
  67. data/demo-app/.tool-versions +2 -0
  68. data/demo-app/Gemfile +41 -0
  69. data/demo-app/Gemfile.lock +248 -0
  70. data/demo-app/Procfile.dev +3 -0
  71. data/demo-app/README.md +15 -0
  72. data/demo-app/Rakefile +6 -0
  73. data/demo-app/app/assets/builds/.keep +0 -0
  74. data/demo-app/app/assets/images/.keep +0 -0
  75. data/demo-app/app/assets/stylesheets/application.css +42 -0
  76. data/demo-app/app/controllers/application_controller.rb +10 -0
  77. data/demo-app/app/controllers/concerns/.keep +0 -0
  78. data/demo-app/app/controllers/concerns/set_flavor.rb +10 -0
  79. data/demo-app/app/controllers/hide_from_backends_controller.rb +34 -0
  80. data/demo-app/app/controllers/modal_controller.rb +11 -0
  81. data/demo-app/app/controllers/posts_controller.rb +69 -0
  82. data/demo-app/app/controllers/welcome_controller.rb +2 -0
  83. data/demo-app/app/helpers/application_helper.rb +9 -0
  84. data/demo-app/app/javascript/application.js +4 -0
  85. data/demo-app/app/javascript/controllers/application.js +13 -0
  86. data/demo-app/app/javascript/controllers/dark_mode_controller.js +28 -0
  87. data/demo-app/app/javascript/controllers/flash_controller.js +9 -0
  88. data/demo-app/app/javascript/controllers/hello_controller.js +7 -0
  89. data/demo-app/app/javascript/controllers/index.js +15 -0
  90. data/demo-app/app/models/application_record.rb +3 -0
  91. data/demo-app/app/models/concerns/.keep +0 -0
  92. data/demo-app/app/models/post.rb +4 -0
  93. data/demo-app/app/views/hide_from_backends/_notice.html.erb +10 -0
  94. data/demo-app/app/views/hide_from_backends/create.turbo_stream.erb +2 -0
  95. data/demo-app/app/views/hide_from_backends/new.html.erb +30 -0
  96. data/demo-app/app/views/layouts/application.html.erb +40 -0
  97. data/demo-app/app/views/modal/index.html.erb +45 -0
  98. data/demo-app/app/views/modal/show.html.erb +39 -0
  99. data/demo-app/app/views/posts/_form.html.erb +36 -0
  100. data/demo-app/app/views/posts/_post.html.erb +9 -0
  101. data/demo-app/app/views/posts/edit.html.erb +9 -0
  102. data/demo-app/app/views/posts/index.html.erb +14 -0
  103. data/demo-app/app/views/posts/new.html.erb +3 -0
  104. data/demo-app/app/views/posts/show.html.erb +21 -0
  105. data/demo-app/app/views/shared/_flash.html.erb +13 -0
  106. data/demo-app/app/views/welcome/index.html.erb +19 -0
  107. data/demo-app/bin/bundle +109 -0
  108. data/demo-app/bin/dev +7 -0
  109. data/demo-app/bin/rails +4 -0
  110. data/demo-app/bin/rake +4 -0
  111. data/demo-app/bin/setup +34 -0
  112. data/demo-app/config/application.rb +43 -0
  113. data/demo-app/config/boot.rb +3 -0
  114. data/demo-app/config/credentials.yml.enc +1 -0
  115. data/demo-app/config/database.yml +25 -0
  116. data/demo-app/config/environment.rb +14 -0
  117. data/demo-app/config/environments/development.rb +51 -0
  118. data/demo-app/config/environments/production.rb +67 -0
  119. data/demo-app/config/environments/test.rb +42 -0
  120. data/demo-app/config/initializers/assets.rb +7 -0
  121. data/demo-app/config/initializers/content_security_policy.rb +25 -0
  122. data/demo-app/config/initializers/filter_parameter_logging.rb +8 -0
  123. data/demo-app/config/initializers/inflections.rb +14 -0
  124. data/demo-app/config/initializers/new_framework_defaults_8_0.rb +30 -0
  125. data/demo-app/config/initializers/permissions_policy.rb +11 -0
  126. data/demo-app/config/initializers/ultimate_turbo_modal.rb +12 -0
  127. data/demo-app/config/initializers/ultimate_turbo_modal_tailwind.rb +21 -0
  128. data/demo-app/config/initializers/ultimate_turbo_modal_vanilla.rb +21 -0
  129. data/demo-app/config/locales/en.yml +33 -0
  130. data/demo-app/config/puma.rb +41 -0
  131. data/demo-app/config/routes.rb +9 -0
  132. data/demo-app/config.ru +6 -0
  133. data/demo-app/db/migrate/20230331002502_create_posts.rb +10 -0
  134. data/demo-app/db/migrate/20231031012703_add_post.rb +9 -0
  135. data/demo-app/db/migrate/20231128141054_add_publish_on_to_posts.rb +5 -0
  136. data/demo-app/db/schema.rb +22 -0
  137. data/demo-app/lib/assets/.keep +0 -0
  138. data/demo-app/lib/tasks/.keep +0 -0
  139. data/demo-app/log/.keep +0 -0
  140. data/demo-app/package.json +28 -0
  141. data/demo-app/postcss.config.js +7 -0
  142. data/demo-app/public/400.html +114 -0
  143. data/demo-app/public/404.html +114 -0
  144. data/demo-app/public/406-unsupported-browser.html +114 -0
  145. data/demo-app/public/422.html +114 -0
  146. data/demo-app/public/500.html +114 -0
  147. data/demo-app/public/apple-touch-icon-precomposed.png +0 -0
  148. data/demo-app/public/apple-touch-icon.png +0 -0
  149. data/demo-app/public/favicon.ico +0 -0
  150. data/demo-app/public/icon.png +0 -0
  151. data/demo-app/public/icon.svg +3 -0
  152. data/demo-app/public/img/bootstrap-logo-shadow.png +0 -0
  153. data/demo-app/public/img/unicat.jpg +0 -0
  154. data/demo-app/public/img/vanilla.png +0 -0
  155. data/demo-app/public/robots.txt +1 -0
  156. data/demo-app/tmp/.keep +0 -0
  157. data/demo-app/tmp/pids/.keep +0 -0
  158. data/demo-app/vendor/.keep +0 -0
  159. data/demo-app/yarn.lock +1022 -0
  160. data/javascript/modal_controller.js +63 -2
  161. data/javascript/package.json +4 -2
  162. data/javascript/yarn.lock +12 -0
  163. data/lib/ultimate_turbo_modal/configuration.rb +1 -0
  164. metadata +184 -4
@@ -1,5 +1,6 @@
1
1
  import { Controller } from '@hotwired/stimulus';
2
2
  import { enter, leave } from 'el-transition';
3
+ import { createFocusTrap } from 'focus-trap';
3
4
 
4
5
  // This placeholder will be replaced by rollup
5
6
  const PACKAGE_VERSION = '__PACKAGE_VERSION__';
@@ -16,6 +17,9 @@ export default class extends Controller {
16
17
 
17
18
  this.#checkVersions();
18
19
 
20
+ // Initialize focus trap instance variable
21
+ this.focusTrapInstance = null;
22
+
19
23
  this.showModal();
20
24
 
21
25
  this.turboFrame = this.element.closest('turbo-frame');
@@ -29,11 +33,18 @@ export default class extends Controller {
29
33
  }
30
34
 
31
35
  disconnect() {
36
+ // Clean up focus trap if it exists
37
+ if (this.focusTrapInstance) {
38
+ this.#deactivateFocusTrap();
39
+ }
32
40
  window.modal = undefined;
33
41
  }
34
42
 
35
43
  showModal() {
36
- enter(this.containerTarget);
44
+ enter(this.containerTarget).then(() => {
45
+ // Activate focus trap after the modal transition is complete
46
+ this.#activateFocusTrap();
47
+ });
37
48
 
38
49
  if (this.advanceUrlValue && !this.#hasHistoryAdvanced()) {
39
50
  this.#setHistoryAdvanced();
@@ -51,7 +62,15 @@ export default class extends Controller {
51
62
 
52
63
  let event = new Event('modal:closing', { cancelable: true });
53
64
  this.turboFrame.dispatchEvent(event);
54
- if (event.defaultPrevented) return
65
+ if (event.defaultPrevented) {
66
+ this.hidingModal = false;
67
+ return
68
+ }
69
+
70
+ // Deactivate focus trap only after confirming modal will close
71
+ if (this.focusTrapInstance) {
72
+ this.#deactivateFocusTrap();
73
+ }
55
74
 
56
75
  this.#resetModalElement();
57
76
 
@@ -126,4 +145,46 @@ export default class extends Controller {
126
145
  );
127
146
  }
128
147
  }
148
+
149
+ #activateFocusTrap() {
150
+ try {
151
+ // Create focus trap if it doesn't exist
152
+ if (!this.focusTrapInstance) {
153
+ this.focusTrapInstance = createFocusTrap(this.contentTarget, {
154
+ allowOutsideClick: true,
155
+ escapeDeactivates: false, // Let our ESC handler manage this
156
+ fallbackFocus: this.contentTarget,
157
+ returnFocusOnDeactivate: true,
158
+ clickOutsideDeactivates: false, // Let our click outside handler manage this
159
+ preventScroll: false,
160
+ initialFocus: () => {
161
+ // Try to focus the first focusable element, or the modal itself
162
+ const firstFocusable = this.contentTarget.querySelector(
163
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
164
+ );
165
+ return firstFocusable || this.contentTarget;
166
+ }
167
+ });
168
+ }
169
+
170
+ // Activate the trap
171
+ this.focusTrapInstance.activate();
172
+ } catch (error) {
173
+ console.error('[UltimateTurboModal] Failed to activate focus trap:', error);
174
+ // Don't break the modal if focus trap fails
175
+ this.focusTrapInstance = null;
176
+ }
177
+ }
178
+
179
+ #deactivateFocusTrap() {
180
+ try {
181
+ if (this.focusTrapInstance && this.focusTrapInstance.active) {
182
+ this.focusTrapInstance.deactivate();
183
+ }
184
+ } catch (error) {
185
+ console.error('[UltimateTurboModal] Failed to deactivate focus trap:', error);
186
+ } finally {
187
+ this.focusTrapInstance = null;
188
+ }
189
+ }
129
190
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate_turbo_modal",
3
- "version": "2.0.4",
3
+ "version": "2.1.0",
4
4
  "description": "The ultimate Turbo / Stimulus / Hotwire modal window for Rails",
5
5
  "main": "dist/ultimate_turbo_modal.min.js",
6
6
  "module": "dist/ultimate_turbo_modal.min.js",
@@ -35,6 +35,7 @@
35
35
  "@hotwired/stimulus": "^3.2.2",
36
36
  "@hotwired/turbo-rails": "^8.0.0",
37
37
  "el-transition": "^0.0.7",
38
+ "focus-trap": "^7.6.5",
38
39
  "idiomorph": "^0.7.3"
39
40
  },
40
41
  "devDependencies": {
@@ -44,5 +45,6 @@
44
45
  "rollup-plugin-copy": "^3.5.0",
45
46
  "rollup-plugin-css-only": "^4.3.0",
46
47
  "rollup-plugin-terser": "^7.0.2"
47
- }
48
+ },
49
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
48
50
  }
data/javascript/yarn.lock CHANGED
@@ -262,6 +262,13 @@ fill-range@^7.1.1:
262
262
  dependencies:
263
263
  to-regex-range "^5.0.1"
264
264
 
265
+ focus-trap@^7.6.5:
266
+ version "7.6.5"
267
+ resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.6.5.tgz#56f0814286d43c1a2688e9bc4f31f17ae047fb76"
268
+ integrity sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==
269
+ dependencies:
270
+ tabbable "^6.2.0"
271
+
265
272
  fs-extra@^8.1.0:
266
273
  version "8.1.0"
267
274
  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"
@@ -593,6 +600,11 @@ supports-preserve-symlinks-flag@^1.0.0:
593
600
  resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
594
601
  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
595
602
 
603
+ tabbable@^6.2.0:
604
+ version "6.2.0"
605
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
606
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
607
+
596
608
  terser@^5.0.0:
597
609
  version "5.39.0"
598
610
  resolved "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz"
@@ -66,6 +66,7 @@ module UltimateTurboModal
66
66
  raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(footer_divider)
67
67
  @footer_divider = footer_divider
68
68
  end
69
+
69
70
  end
70
71
  end
71
72
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultimate_turbo_modal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Mercier
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: phlex-rails
@@ -24,7 +24,35 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
26
  - !ruby/object:Gem::Dependency
27
- name: rails
27
+ name: actionpack
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: activesupport
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: railties
28
56
  requirement: !ruby/object:Gem::Requirement
29
57
  requirements:
30
58
  - - ">="
@@ -73,17 +101,169 @@ executables: []
73
101
  extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
104
+ - ".claude/TM_COMMANDS_GUIDE.md"
105
+ - ".claude/commands/tm/add-dependency/add-dependency.md"
106
+ - ".claude/commands/tm/add-subtask/add-subtask.md"
107
+ - ".claude/commands/tm/add-subtask/convert-task-to-subtask.md"
108
+ - ".claude/commands/tm/add-task/add-task.md"
109
+ - ".claude/commands/tm/analyze-complexity/analyze-complexity.md"
110
+ - ".claude/commands/tm/clear-subtasks/clear-all-subtasks.md"
111
+ - ".claude/commands/tm/clear-subtasks/clear-subtasks.md"
112
+ - ".claude/commands/tm/complexity-report/complexity-report.md"
113
+ - ".claude/commands/tm/expand/expand-all-tasks.md"
114
+ - ".claude/commands/tm/expand/expand-task.md"
115
+ - ".claude/commands/tm/fix-dependencies/fix-dependencies.md"
116
+ - ".claude/commands/tm/generate/generate-tasks.md"
117
+ - ".claude/commands/tm/help.md"
118
+ - ".claude/commands/tm/init/init-project-quick.md"
119
+ - ".claude/commands/tm/init/init-project.md"
120
+ - ".claude/commands/tm/learn.md"
121
+ - ".claude/commands/tm/list/list-tasks-by-status.md"
122
+ - ".claude/commands/tm/list/list-tasks-with-subtasks.md"
123
+ - ".claude/commands/tm/list/list-tasks.md"
124
+ - ".claude/commands/tm/models/setup-models.md"
125
+ - ".claude/commands/tm/models/view-models.md"
126
+ - ".claude/commands/tm/next/next-task.md"
127
+ - ".claude/commands/tm/parse-prd/parse-prd-with-research.md"
128
+ - ".claude/commands/tm/parse-prd/parse-prd.md"
129
+ - ".claude/commands/tm/remove-dependency/remove-dependency.md"
130
+ - ".claude/commands/tm/remove-subtask/remove-subtask.md"
131
+ - ".claude/commands/tm/remove-task/remove-task.md"
132
+ - ".claude/commands/tm/set-status/to-cancelled.md"
133
+ - ".claude/commands/tm/set-status/to-deferred.md"
134
+ - ".claude/commands/tm/set-status/to-done.md"
135
+ - ".claude/commands/tm/set-status/to-in-progress.md"
136
+ - ".claude/commands/tm/set-status/to-pending.md"
137
+ - ".claude/commands/tm/set-status/to-review.md"
138
+ - ".claude/commands/tm/setup/install-taskmaster.md"
139
+ - ".claude/commands/tm/setup/quick-install-taskmaster.md"
140
+ - ".claude/commands/tm/show/show-task.md"
141
+ - ".claude/commands/tm/status/project-status.md"
142
+ - ".claude/commands/tm/sync-readme/sync-readme.md"
143
+ - ".claude/commands/tm/tm-main.md"
144
+ - ".claude/commands/tm/update/update-single-task.md"
145
+ - ".claude/commands/tm/update/update-task.md"
146
+ - ".claude/commands/tm/update/update-tasks-from-id.md"
147
+ - ".claude/commands/tm/utils/analyze-project.md"
148
+ - ".claude/commands/tm/validate-dependencies/validate-dependencies.md"
149
+ - ".claude/commands/tm/workflows/auto-implement-tasks.md"
150
+ - ".claude/commands/tm/workflows/command-pipeline.md"
151
+ - ".claude/commands/tm/workflows/smart-workflow.md"
152
+ - ".cursor/rules/taskmaster/dev_workflow.mdc"
153
+ - ".cursor/rules/taskmaster/taskmaster.mdc"
154
+ - ".env.example"
76
155
  - ".rubocop.yml"
77
156
  - ".ruby-version"
78
157
  - ".standard.yml"
158
+ - ".taskmaster/CLAUDE.md"
159
+ - ".taskmaster/config.json"
160
+ - ".taskmaster/templates/example_prd.txt"
79
161
  - ".tool-versions"
80
162
  - CHANGELOG.md
163
+ - CLAUDE.md
81
164
  - Gemfile
82
165
  - Gemfile.lock
83
166
  - LICENSE.txt
84
167
  - README.md
85
168
  - Rakefile
169
+ - UPGRADING.md
86
170
  - VERSION
171
+ - demo-app/.gitattributes
172
+ - demo-app/.gitignore
173
+ - demo-app/.ruby-version
174
+ - demo-app/.tool-versions
175
+ - demo-app/Gemfile
176
+ - demo-app/Gemfile.lock
177
+ - demo-app/Procfile.dev
178
+ - demo-app/README.md
179
+ - demo-app/Rakefile
180
+ - demo-app/app/assets/builds/.keep
181
+ - demo-app/app/assets/images/.keep
182
+ - demo-app/app/assets/stylesheets/application.css
183
+ - demo-app/app/controllers/application_controller.rb
184
+ - demo-app/app/controllers/concerns/.keep
185
+ - demo-app/app/controllers/concerns/set_flavor.rb
186
+ - demo-app/app/controllers/hide_from_backends_controller.rb
187
+ - demo-app/app/controllers/modal_controller.rb
188
+ - demo-app/app/controllers/posts_controller.rb
189
+ - demo-app/app/controllers/welcome_controller.rb
190
+ - demo-app/app/helpers/application_helper.rb
191
+ - demo-app/app/javascript/application.js
192
+ - demo-app/app/javascript/controllers/application.js
193
+ - demo-app/app/javascript/controllers/dark_mode_controller.js
194
+ - demo-app/app/javascript/controllers/flash_controller.js
195
+ - demo-app/app/javascript/controllers/hello_controller.js
196
+ - demo-app/app/javascript/controllers/index.js
197
+ - demo-app/app/models/application_record.rb
198
+ - demo-app/app/models/concerns/.keep
199
+ - demo-app/app/models/post.rb
200
+ - demo-app/app/views/hide_from_backends/_notice.html.erb
201
+ - demo-app/app/views/hide_from_backends/create.turbo_stream.erb
202
+ - demo-app/app/views/hide_from_backends/new.html.erb
203
+ - demo-app/app/views/layouts/application.html.erb
204
+ - demo-app/app/views/modal/index.html.erb
205
+ - demo-app/app/views/modal/show.html.erb
206
+ - demo-app/app/views/posts/_form.html.erb
207
+ - demo-app/app/views/posts/_post.html.erb
208
+ - demo-app/app/views/posts/edit.html.erb
209
+ - demo-app/app/views/posts/index.html.erb
210
+ - demo-app/app/views/posts/new.html.erb
211
+ - demo-app/app/views/posts/show.html.erb
212
+ - demo-app/app/views/shared/_flash.html.erb
213
+ - demo-app/app/views/welcome/index.html.erb
214
+ - demo-app/bin/bundle
215
+ - demo-app/bin/dev
216
+ - demo-app/bin/rails
217
+ - demo-app/bin/rake
218
+ - demo-app/bin/setup
219
+ - demo-app/config.ru
220
+ - demo-app/config/application.rb
221
+ - demo-app/config/boot.rb
222
+ - demo-app/config/credentials.yml.enc
223
+ - demo-app/config/database.yml
224
+ - demo-app/config/environment.rb
225
+ - demo-app/config/environments/development.rb
226
+ - demo-app/config/environments/production.rb
227
+ - demo-app/config/environments/test.rb
228
+ - demo-app/config/initializers/assets.rb
229
+ - demo-app/config/initializers/content_security_policy.rb
230
+ - demo-app/config/initializers/filter_parameter_logging.rb
231
+ - demo-app/config/initializers/inflections.rb
232
+ - demo-app/config/initializers/new_framework_defaults_8_0.rb
233
+ - demo-app/config/initializers/permissions_policy.rb
234
+ - demo-app/config/initializers/ultimate_turbo_modal.rb
235
+ - demo-app/config/initializers/ultimate_turbo_modal_tailwind.rb
236
+ - demo-app/config/initializers/ultimate_turbo_modal_vanilla.rb
237
+ - demo-app/config/locales/en.yml
238
+ - demo-app/config/puma.rb
239
+ - demo-app/config/routes.rb
240
+ - demo-app/db/migrate/20230331002502_create_posts.rb
241
+ - demo-app/db/migrate/20231031012703_add_post.rb
242
+ - demo-app/db/migrate/20231128141054_add_publish_on_to_posts.rb
243
+ - demo-app/db/schema.rb
244
+ - demo-app/lib/assets/.keep
245
+ - demo-app/lib/tasks/.keep
246
+ - demo-app/log/.keep
247
+ - demo-app/package.json
248
+ - demo-app/postcss.config.js
249
+ - demo-app/public/400.html
250
+ - demo-app/public/404.html
251
+ - demo-app/public/406-unsupported-browser.html
252
+ - demo-app/public/422.html
253
+ - demo-app/public/500.html
254
+ - demo-app/public/apple-touch-icon-precomposed.png
255
+ - demo-app/public/apple-touch-icon.png
256
+ - demo-app/public/favicon.ico
257
+ - demo-app/public/icon.png
258
+ - demo-app/public/icon.svg
259
+ - demo-app/public/img/bootstrap-logo-shadow.png
260
+ - demo-app/public/img/unicat.jpg
261
+ - demo-app/public/img/vanilla.png
262
+ - demo-app/public/robots.txt
263
+ - demo-app/tmp/.keep
264
+ - demo-app/tmp/pids/.keep
265
+ - demo-app/vendor/.keep
266
+ - demo-app/yarn.lock
87
267
  - javascript/index.js
88
268
  - javascript/modal_controller.js
89
269
  - javascript/package.json
@@ -131,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
311
  - !ruby/object:Gem::Version
132
312
  version: '0'
133
313
  requirements: []
134
- rubygems_version: 3.6.2
314
+ rubygems_version: 3.6.7
135
315
  specification_version: 4
136
316
  summary: UTMR aims to be the be-all and end-all of Turbo Modals.
137
317
  test_files: []