panda-core 0.12.5 → 1.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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +53 -0
  4. data/app/assets/builds/panda_core_admin.css +2 -0
  5. data/app/assets/tailwind/application.css +236 -36
  6. data/app/builders/panda/core/form_builder.rb +120 -18
  7. data/app/components/panda/core/UI/badge.html.erb +10 -0
  8. data/app/components/panda/core/UI/badge.rb +14 -30
  9. data/app/components/panda/core/UI/button.html.erb +5 -0
  10. data/app/components/panda/core/UI/button.rb +11 -15
  11. data/app/components/panda/core/UI/card.html.erb +3 -0
  12. data/app/components/panda/core/UI/card.rb +7 -6
  13. data/app/components/panda/core/admin/attribute_diff_component.html.erb +21 -0
  14. data/app/components/panda/core/admin/attribute_diff_component.rb +29 -0
  15. data/app/components/panda/core/admin/breadcrumb_component.html.erb +36 -0
  16. data/app/components/panda/core/admin/breadcrumb_component.rb +12 -64
  17. data/app/components/panda/core/admin/breadcrumbs_component.html.erb +16 -0
  18. data/app/components/panda/core/admin/breadcrumbs_component.rb +26 -0
  19. data/app/components/panda/core/admin/button_component.html.erb +9 -0
  20. data/app/components/panda/core/admin/button_component.rb +36 -31
  21. data/app/components/panda/core/admin/callout_component.html.erb +17 -0
  22. data/app/components/panda/core/admin/callout_component.rb +57 -0
  23. data/app/components/panda/core/admin/code_block_component.html.erb +9 -0
  24. data/app/components/panda/core/admin/code_block_component.rb +23 -0
  25. data/app/components/panda/core/admin/container_component.html.erb +27 -0
  26. data/app/components/panda/core/admin/container_component.rb +11 -77
  27. data/app/components/panda/core/admin/contributors_summary_component.html.erb +15 -0
  28. data/app/components/panda/core/admin/contributors_summary_component.rb +23 -0
  29. data/app/components/panda/core/admin/dashboard_default_content_component.html.erb +70 -0
  30. data/app/components/panda/core/admin/dashboard_default_content_component.rb +32 -0
  31. data/app/components/panda/core/admin/delete_button_component.html.erb +4 -0
  32. data/app/components/panda/core/admin/delete_button_component.rb +41 -0
  33. data/app/components/panda/core/admin/dropdown_button_component.html.erb +28 -0
  34. data/app/components/panda/core/admin/dropdown_button_component.rb +100 -0
  35. data/app/components/panda/core/admin/dropdown_component.html.erb +32 -0
  36. data/app/components/panda/core/admin/dropdown_component.rb +65 -0
  37. data/app/components/panda/core/admin/empty_state_component.html.erb +16 -0
  38. data/app/components/panda/core/admin/empty_state_component.rb +25 -0
  39. data/app/components/panda/core/admin/file_gallery_component.html.erb +58 -0
  40. data/app/components/panda/core/admin/file_gallery_component.rb +26 -98
  41. data/app/components/panda/core/admin/filter_pills_component.html.erb +6 -0
  42. data/app/components/panda/core/admin/filter_pills_component.rb +29 -0
  43. data/app/components/panda/core/admin/flash_message_component.html.erb +11 -0
  44. data/app/components/panda/core/admin/flash_message_component.rb +33 -60
  45. data/app/components/panda/core/admin/form_error_component.html.erb +7 -0
  46. data/app/components/panda/core/admin/form_error_component.rb +8 -16
  47. data/app/components/panda/core/admin/form_footer_component.html.erb +16 -0
  48. data/app/components/panda/core/admin/form_footer_component.rb +65 -0
  49. data/app/components/panda/core/admin/form_input_component.html.erb +1 -0
  50. data/app/components/panda/core/admin/form_input_component.rb +21 -13
  51. data/app/components/panda/core/admin/form_section_component.html.erb +16 -0
  52. data/app/components/panda/core/admin/form_section_component.rb +64 -0
  53. data/app/components/panda/core/admin/form_select_component.html.erb +5 -0
  54. data/app/components/panda/core/admin/form_select_component.rb +25 -26
  55. data/app/components/panda/core/admin/heading_component.html.erb +26 -0
  56. data/app/components/panda/core/admin/heading_component.rb +23 -60
  57. data/app/components/panda/core/admin/login_form_component.html.erb +38 -0
  58. data/app/components/panda/core/admin/login_form_component.rb +28 -0
  59. data/app/components/panda/core/admin/main_layout_component.html.erb +88 -0
  60. data/app/components/panda/core/admin/main_layout_component.rb +19 -0
  61. data/app/components/panda/core/admin/my_profile/connected_account_component.html.erb +41 -0
  62. data/app/components/panda/core/admin/my_profile/connected_account_component.rb +27 -0
  63. data/app/components/panda/core/admin/navigation/item_component.html.erb +34 -0
  64. data/app/components/panda/core/admin/navigation/item_component.rb +69 -0
  65. data/app/components/panda/core/admin/navigation/sub_item_component.html.erb +9 -0
  66. data/app/components/panda/core/admin/navigation/sub_item_component.rb +44 -0
  67. data/app/components/panda/core/admin/navigation/user_menu_component.html.erb +30 -0
  68. data/app/components/panda/core/admin/navigation/user_menu_component.rb +36 -0
  69. data/app/components/panda/core/admin/page_header_component.html.erb +28 -0
  70. data/app/components/panda/core/admin/page_header_component.rb +19 -35
  71. data/app/components/panda/core/admin/pagination_component.html.erb +33 -0
  72. data/app/components/panda/core/admin/pagination_component.rb +56 -0
  73. data/app/components/panda/core/admin/panel_component.html.erb +19 -0
  74. data/app/components/panda/core/admin/panel_component.rb +4 -29
  75. data/app/components/panda/core/admin/prose_panel_component.html.erb +6 -0
  76. data/app/components/panda/core/admin/prose_panel_component.rb +43 -0
  77. data/app/components/panda/core/admin/search_bar_component.html.erb +19 -0
  78. data/app/components/panda/core/admin/search_bar_component.rb +31 -0
  79. data/app/components/panda/core/admin/search_filter_bar_component.html.erb +22 -0
  80. data/app/components/panda/core/admin/search_filter_bar_component.rb +27 -0
  81. data/app/components/panda/core/admin/secret_field_component.html.erb +24 -0
  82. data/app/components/panda/core/admin/secret_field_component.rb +31 -0
  83. data/app/components/panda/core/admin/sidebar_component.html.erb +160 -0
  84. data/app/components/panda/core/admin/sidebar_component.rb +55 -0
  85. data/app/components/panda/core/admin/slideover_component.html.erb +67 -0
  86. data/app/components/panda/core/admin/slideover_component.rb +31 -70
  87. data/app/components/panda/core/admin/statistics_component.html.erb +4 -0
  88. data/app/components/panda/core/admin/statistics_component.rb +6 -8
  89. data/app/components/panda/core/admin/tab_bar_component.html.erb +48 -0
  90. data/app/components/panda/core/admin/tab_bar_component.rb +32 -67
  91. data/app/components/panda/core/admin/table_component.html.erb +82 -0
  92. data/app/components/panda/core/admin/table_component.rb +54 -87
  93. data/app/components/panda/core/admin/tag_badge_component.html.erb +7 -0
  94. data/app/components/panda/core/admin/tag_badge_component.rb +21 -0
  95. data/app/components/panda/core/admin/tag_component.html.erb +1 -0
  96. data/app/components/panda/core/admin/tag_component.rb +51 -20
  97. data/app/components/panda/core/admin/tag_input_component.html.erb +37 -0
  98. data/app/components/panda/core/admin/tag_input_component.rb +22 -0
  99. data/app/components/panda/core/admin/tags_panel_component.html.erb +8 -0
  100. data/app/components/panda/core/admin/tags_panel_component.rb +33 -0
  101. data/app/components/panda/core/admin/user_activity_component.html.erb +15 -0
  102. data/app/components/panda/core/admin/user_activity_component.rb +9 -22
  103. data/app/components/panda/core/admin/user_display_component.html.erb +8 -0
  104. data/app/components/panda/core/admin/user_display_component.rb +19 -22
  105. data/app/components/panda/core/base.rb +35 -42
  106. data/app/components/panda/core/shared/footer_component.html.erb +2 -0
  107. data/app/components/panda/core/shared/footer_component.rb +11 -0
  108. data/app/components/panda/core/shared/header_component.html.erb +32 -0
  109. data/app/components/panda/core/shared/header_component.rb +19 -0
  110. data/app/constraints/panda/core/admin_constraint.rb +2 -2
  111. data/app/controllers/concerns/panda/core/admin_authorization.rb +58 -0
  112. data/app/controllers/concerns/panda/core/authorizable.rb +107 -0
  113. data/app/controllers/panda/core/admin/base_controller.rb +62 -3
  114. data/app/controllers/panda/core/admin/editor/search_controller.rb +17 -0
  115. data/app/controllers/panda/core/admin/feature_flags_controller.rb +35 -0
  116. data/app/controllers/panda/core/admin/file_categories_controller.rb +84 -0
  117. data/app/controllers/panda/core/admin/files_controller.rb +230 -0
  118. data/app/controllers/panda/core/admin/import_sessions_controller.rb +120 -0
  119. data/app/controllers/panda/core/admin/my_profile/logins_controller.rb +24 -0
  120. data/app/controllers/panda/core/admin/my_profile_controller.rb +31 -0
  121. data/app/controllers/panda/core/admin/search_controller.rb +15 -0
  122. data/app/controllers/panda/core/admin/sessions_controller.rb +84 -10
  123. data/app/controllers/panda/core/admin/tags_controller.rb +77 -0
  124. data/app/controllers/panda/core/admin/test_sessions_controller.rb +5 -6
  125. data/app/controllers/panda/core/admin/users_controller.rb +184 -0
  126. data/app/controllers/panda/core/application_controller.rb +13 -1
  127. data/app/helpers/panda/core/active_storage_helper.rb +24 -0
  128. data/app/helpers/panda/core/feature_flag_helper.rb +11 -0
  129. data/app/helpers/panda/core/form_helper.rb +15 -0
  130. data/app/javascript/panda/core/controllers/avatar_upload_controller.js +73 -0
  131. data/app/javascript/panda/core/controllers/clipboard_controller.js +119 -0
  132. data/app/javascript/panda/core/controllers/collapsible_item_controller.js +45 -0
  133. data/app/javascript/panda/core/controllers/custom_select_controller.js +256 -0
  134. data/app/javascript/panda/core/controllers/datepicker_controller.js +121 -0
  135. data/app/javascript/panda/core/controllers/daterange_controller.js +193 -0
  136. data/app/javascript/panda/core/controllers/file_gallery_controller.js +134 -0
  137. data/app/javascript/panda/core/controllers/file_upload_controller.js +165 -0
  138. data/app/javascript/panda/core/controllers/global_search_controller.js +184 -0
  139. data/app/javascript/panda/core/controllers/index.js +36 -0
  140. data/app/javascript/panda/core/controllers/mobile_sidebar_controller.js +58 -0
  141. data/app/javascript/panda/core/controllers/navigation_toggle_controller.js +49 -24
  142. data/app/javascript/panda/core/controllers/row_link_controller.js +27 -0
  143. data/app/javascript/panda/core/controllers/tag_input_controller.js +183 -0
  144. data/app/javascript/panda/core/tailwindcss-stimulus-components.js +2 -3
  145. data/app/javascript/panda/core/vendor/@fortawesome--fontawesome-free@7.2.0.js +8129 -0
  146. data/app/javascript/panda/core/vendor/@hotwired--turbo.js +7197 -100
  147. data/app/javascript/panda/core/vendor/@rails--actioncable--src.js +511 -2
  148. data/app/javascript/panda/core/vendor/@tailwindplus--elements@1.0.22.js +65 -0
  149. data/app/javascript/panda/core/vendor/cropperjs@2.1.0.js +3 -0
  150. data/app/javascript/panda/core/vendor/vanilla-calendar-pro.js +2 -0
  151. data/app/models/concerns/panda/core/has_metadata.rb +164 -0
  152. data/app/models/concerns/panda/core/importable.rb +79 -0
  153. data/app/models/concerns/panda/core/searchable.rb +66 -0
  154. data/app/models/concerns/panda/core/taggable.rb +37 -0
  155. data/app/models/panda/core/feature_flag.rb +56 -0
  156. data/app/models/panda/core/file_categorization.rb +14 -0
  157. data/app/models/panda/core/file_category.rb +45 -0
  158. data/app/models/panda/core/import_session.rb +79 -0
  159. data/app/models/panda/core/presence.rb +24 -0
  160. data/app/models/panda/core/tag.rb +33 -0
  161. data/app/models/panda/core/tagging.rb +14 -0
  162. data/app/models/panda/core/user.rb +94 -16
  163. data/app/models/panda/core/user_activity.rb +42 -0
  164. data/app/models/panda/core/user_session.rb +35 -0
  165. data/app/services/panda/core/attach_avatar_service.rb +15 -3
  166. data/app/services/panda/core/csv_import_service.rb +65 -0
  167. data/app/services/panda/core/file_categorizer.rb +52 -0
  168. data/app/services/panda/core/file_parser.rb +76 -0
  169. data/app/services/panda/core/invite_user_service.rb +44 -0
  170. data/app/services/panda/core/presence_service.rb +49 -0
  171. data/app/views/layouts/panda/core/admin.html.erb +6 -76
  172. data/app/views/layouts/panda/core/admin_simple.html.erb +2 -2
  173. data/app/views/panda/core/admin/dashboard/_default_content.html.erb +1 -73
  174. data/app/views/panda/core/admin/dashboard/show.html.erb +12 -15
  175. data/app/views/panda/core/admin/feature_flags/index.html.erb +56 -0
  176. data/app/views/panda/core/admin/file_categories/_form.html.erb +20 -0
  177. data/app/views/panda/core/admin/file_categories/edit.html.erb +5 -0
  178. data/app/views/panda/core/admin/file_categories/index.html.erb +55 -0
  179. data/app/views/panda/core/admin/file_categories/new.html.erb +5 -0
  180. data/app/views/panda/core/admin/files/_file_details.html.erb +156 -0
  181. data/app/views/panda/core/admin/files/index.html.erb +61 -0
  182. data/app/views/panda/core/admin/import_sessions/column_map.html.erb +43 -0
  183. data/app/views/panda/core/admin/import_sessions/index.html.erb +48 -0
  184. data/app/views/panda/core/admin/import_sessions/new.html.erb +37 -0
  185. data/app/views/panda/core/admin/import_sessions/preview.html.erb +51 -0
  186. data/app/views/panda/core/admin/import_sessions/show.html.erb +87 -0
  187. data/app/views/panda/core/admin/my_profile/edit.html.erb +51 -39
  188. data/app/views/panda/core/admin/my_profile/logins/show.html.erb +72 -0
  189. data/app/views/panda/core/admin/sessions/new.html.erb +1 -37
  190. data/app/views/panda/core/admin/shared/_breadcrumbs.html.erb +1 -18
  191. data/app/views/panda/core/admin/shared/_sidebar.html.erb +1 -99
  192. data/app/views/panda/core/admin/shared/_slideover.html.erb +3 -3
  193. data/app/views/panda/core/admin/tags/_form.html.erb +21 -0
  194. data/app/views/panda/core/admin/tags/edit.html.erb +4 -0
  195. data/app/views/panda/core/admin/tags/index.html.erb +41 -0
  196. data/app/views/panda/core/admin/tags/new.html.erb +4 -0
  197. data/app/views/panda/core/admin/users/activity.html.erb +90 -0
  198. data/app/views/panda/core/admin/users/edit.html.erb +48 -0
  199. data/app/views/panda/core/admin/users/index.html.erb +161 -0
  200. data/app/views/panda/core/admin/users/sessions.html.erb +103 -0
  201. data/app/views/panda/core/admin/users/show.html.erb +224 -0
  202. data/app/views/panda/core/shared/_footer.html.erb +1 -2
  203. data/app/views/panda/core/shared/_header.html.erb +4 -22
  204. data/config/brakeman.ignore +68 -31
  205. data/config/importmap.rb +13 -11
  206. data/config/routes.rb +49 -2
  207. data/db/migrate/20260202171614_create_panda_core_file_categories.rb +30 -0
  208. data/db/migrate/20260203000001_add_user_management_fields_to_panda_core_users.rb +21 -0
  209. data/db/migrate/20260203000002_create_panda_core_user_activities.rb +24 -0
  210. data/db/migrate/20260203000003_create_panda_core_user_sessions.rb +25 -0
  211. data/db/migrate/20260207100000_create_panda_core_presences.rb +21 -0
  212. data/db/migrate/20260213000001_fix_active_storage_attachments_record_id_type.rb +44 -0
  213. data/db/migrate/20260217000001_create_panda_core_feature_flags.rb +14 -0
  214. data/db/migrate/20260303000001_add_metadata_to_panda_core_users.rb +11 -0
  215. data/db/migrate/20260310000001_create_panda_core_tags.rb +27 -0
  216. data/db/migrate/20260310000002_create_panda_core_import_sessions.rb +29 -0
  217. data/lib/generators/panda/core/install_generator.rb +32 -0
  218. data/lib/generators/panda/core/templates/panda.rb +63 -0
  219. data/lib/panda/core/asset_loader.rb +5 -2
  220. data/lib/panda/core/authentication.rb +3 -3
  221. data/lib/panda/core/configuration.rb +195 -1
  222. data/lib/panda/core/engine/admin_controller_config.rb +3 -6
  223. data/lib/panda/core/engine/autoload_config.rb +21 -9
  224. data/lib/panda/core/engine/omniauth_config.rb +108 -38
  225. data/lib/panda/core/engine/pending_migrations_check.rb +46 -0
  226. data/lib/panda/core/engine/sqlite_schema_compatibility.rb +36 -0
  227. data/lib/panda/core/engine/{phlex_config.rb → view_component_config.rb} +5 -7
  228. data/lib/panda/core/engine.rb +90 -25
  229. data/lib/panda/core/middleware.rb +35 -0
  230. data/lib/panda/core/navigation_registry.rb +455 -0
  231. data/lib/panda/core/oauth_providers.rb +27 -0
  232. data/lib/panda/core/permission_registry.rb +89 -0
  233. data/lib/panda/core/search_registry.rb +69 -0
  234. data/lib/panda/core/seeds/file_categories.rb +30 -0
  235. data/lib/panda/core/shared/inflections_config.rb +1 -5
  236. data/lib/panda/core/testing/rails_helper.rb +87 -0
  237. data/lib/panda/core/testing/support/authentication_test_helpers.rb +22 -18
  238. data/lib/panda/core/testing/support/system/cuprite_helpers.rb +4 -4
  239. data/lib/panda/core/testing/view_component_test_controller.rb +19 -0
  240. data/lib/panda/core/version.rb +1 -1
  241. data/lib/panda/core/widget_registry.rb +50 -0
  242. data/lib/panda/core.rb +17 -8
  243. data/lib/tasks/panda/core/file_categories.rake +41 -0
  244. data/public/panda-core-assets/panda-core-0.12.5.css +2 -0
  245. data/public/panda-core-assets/panda-core-0.13.0.css +2 -0
  246. data/public/panda-core-assets/panda-core-0.14.0.css +2 -0
  247. data/public/panda-core-assets/panda-core-0.14.4.css +2 -0
  248. data/public/panda-core-assets/panda-core.css +2 -2
  249. data/public/panda-core-assets/vanilla-calendar.css +47 -0
  250. metadata +203 -26
  251. data/lib/panda/core/engine/inflections_config.rb +0 -23
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Otaina Limited
8
7
  - James Inman
8
+ - Otaina Limited
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2026-01-02 00:00:00.000000000 Z
12
+ date: 2026-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: image_processing
@@ -124,61 +124,61 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
- name: phlex
127
+ name: view_component
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '2.3'
132
+ version: '4.0'
133
133
  type: :runtime
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '2.3'
139
+ version: '4.0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: phlex-rails
141
+ name: tailwind_merge
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: '2.3'
146
+ version: '1.3'
147
147
  type: :runtime
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: '2.3'
153
+ version: '1.3'
154
154
  - !ruby/object:Gem::Dependency
155
- name: literal
155
+ name: csv
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - "~>"
158
+ - - ">="
159
159
  - !ruby/object:Gem::Version
160
- version: '1.8'
160
+ version: '0'
161
161
  type: :runtime
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - "~>"
165
+ - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: '1.8'
167
+ version: '0'
168
168
  - !ruby/object:Gem::Dependency
169
- name: tailwind_merge
169
+ name: xsv
170
170
  requirement: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - "~>"
173
173
  - !ruby/object:Gem::Version
174
- version: '1.3'
174
+ version: '1.0'
175
175
  type: :runtime
176
176
  prerelease: false
177
177
  version_requirements: !ruby/object:Gem::Requirement
178
178
  requirements:
179
179
  - - "~>"
180
180
  - !ruby/object:Gem::Version
181
- version: '1.3'
181
+ version: '1.0'
182
182
  - !ruby/object:Gem::Dependency
183
183
  name: pg
184
184
  requirement: !ruby/object:Gem::Requirement
@@ -337,16 +337,16 @@ dependencies:
337
337
  name: standard
338
338
  requirement: !ruby/object:Gem::Requirement
339
339
  requirements:
340
- - - ">="
340
+ - - "~>"
341
341
  - !ruby/object:Gem::Version
342
- version: '0'
342
+ version: '1.43'
343
343
  type: :development
344
344
  prerelease: false
345
345
  version_requirements: !ruby/object:Gem::Requirement
346
346
  requirements:
347
- - - ">="
347
+ - - "~>"
348
348
  - !ruby/object:Gem::Version
349
- version: '0'
349
+ version: '1.43'
350
350
  - !ruby/object:Gem::Dependency
351
351
  name: brakeman
352
352
  requirement: !ruby/object:Gem::Requirement
@@ -403,8 +403,8 @@ dependencies:
403
403
  - - ">="
404
404
  - !ruby/object:Gem::Version
405
405
  version: '0'
406
- description: Shared development tools, configurations, and utilities for Panda CMS
407
- and its related projects
406
+ description: Authentication, admin UI components, navigation, tags, imports, and extension
407
+ hooks for Rails apps built on the Panda ecosystem
408
408
  email:
409
409
  - james@otaina.co.uk
410
410
  executables: []
@@ -414,69 +414,221 @@ files:
414
414
  - LICENSE
415
415
  - README.md
416
416
  - Rakefile
417
+ - app/assets/builds/panda_core_admin.css
417
418
  - app/assets/tailwind/application.css
418
419
  - app/builders/panda/core/form_builder.rb
420
+ - app/components/panda/core/UI/badge.html.erb
419
421
  - app/components/panda/core/UI/badge.rb
422
+ - app/components/panda/core/UI/button.html.erb
420
423
  - app/components/panda/core/UI/button.rb
424
+ - app/components/panda/core/UI/card.html.erb
421
425
  - app/components/panda/core/UI/card.rb
426
+ - app/components/panda/core/admin/attribute_diff_component.html.erb
427
+ - app/components/panda/core/admin/attribute_diff_component.rb
428
+ - app/components/panda/core/admin/breadcrumb_component.html.erb
422
429
  - app/components/panda/core/admin/breadcrumb_component.rb
430
+ - app/components/panda/core/admin/breadcrumbs_component.html.erb
431
+ - app/components/panda/core/admin/breadcrumbs_component.rb
432
+ - app/components/panda/core/admin/button_component.html.erb
423
433
  - app/components/panda/core/admin/button_component.rb
434
+ - app/components/panda/core/admin/callout_component.html.erb
435
+ - app/components/panda/core/admin/callout_component.rb
436
+ - app/components/panda/core/admin/code_block_component.html.erb
437
+ - app/components/panda/core/admin/code_block_component.rb
438
+ - app/components/panda/core/admin/container_component.html.erb
424
439
  - app/components/panda/core/admin/container_component.rb
440
+ - app/components/panda/core/admin/contributors_summary_component.html.erb
441
+ - app/components/panda/core/admin/contributors_summary_component.rb
442
+ - app/components/panda/core/admin/dashboard_default_content_component.html.erb
443
+ - app/components/panda/core/admin/dashboard_default_content_component.rb
444
+ - app/components/panda/core/admin/delete_button_component.html.erb
445
+ - app/components/panda/core/admin/delete_button_component.rb
446
+ - app/components/panda/core/admin/dropdown_button_component.html.erb
447
+ - app/components/panda/core/admin/dropdown_button_component.rb
448
+ - app/components/panda/core/admin/dropdown_component.html.erb
449
+ - app/components/panda/core/admin/dropdown_component.rb
450
+ - app/components/panda/core/admin/empty_state_component.html.erb
451
+ - app/components/panda/core/admin/empty_state_component.rb
452
+ - app/components/panda/core/admin/file_gallery_component.html.erb
425
453
  - app/components/panda/core/admin/file_gallery_component.rb
454
+ - app/components/panda/core/admin/filter_pills_component.html.erb
455
+ - app/components/panda/core/admin/filter_pills_component.rb
456
+ - app/components/panda/core/admin/flash_message_component.html.erb
426
457
  - app/components/panda/core/admin/flash_message_component.rb
458
+ - app/components/panda/core/admin/form_error_component.html.erb
427
459
  - app/components/panda/core/admin/form_error_component.rb
460
+ - app/components/panda/core/admin/form_footer_component.html.erb
461
+ - app/components/panda/core/admin/form_footer_component.rb
462
+ - app/components/panda/core/admin/form_input_component.html.erb
428
463
  - app/components/panda/core/admin/form_input_component.rb
464
+ - app/components/panda/core/admin/form_section_component.html.erb
465
+ - app/components/panda/core/admin/form_section_component.rb
466
+ - app/components/panda/core/admin/form_select_component.html.erb
429
467
  - app/components/panda/core/admin/form_select_component.rb
468
+ - app/components/panda/core/admin/heading_component.html.erb
430
469
  - app/components/panda/core/admin/heading_component.rb
470
+ - app/components/panda/core/admin/login_form_component.html.erb
471
+ - app/components/panda/core/admin/login_form_component.rb
472
+ - app/components/panda/core/admin/main_layout_component.html.erb
473
+ - app/components/panda/core/admin/main_layout_component.rb
474
+ - app/components/panda/core/admin/my_profile/connected_account_component.html.erb
475
+ - app/components/panda/core/admin/my_profile/connected_account_component.rb
476
+ - app/components/panda/core/admin/navigation/item_component.html.erb
477
+ - app/components/panda/core/admin/navigation/item_component.rb
478
+ - app/components/panda/core/admin/navigation/sub_item_component.html.erb
479
+ - app/components/panda/core/admin/navigation/sub_item_component.rb
480
+ - app/components/panda/core/admin/navigation/user_menu_component.html.erb
481
+ - app/components/panda/core/admin/navigation/user_menu_component.rb
482
+ - app/components/panda/core/admin/page_header_component.html.erb
431
483
  - app/components/panda/core/admin/page_header_component.rb
484
+ - app/components/panda/core/admin/pagination_component.html.erb
485
+ - app/components/panda/core/admin/pagination_component.rb
486
+ - app/components/panda/core/admin/panel_component.html.erb
432
487
  - app/components/panda/core/admin/panel_component.rb
488
+ - app/components/panda/core/admin/prose_panel_component.html.erb
489
+ - app/components/panda/core/admin/prose_panel_component.rb
490
+ - app/components/panda/core/admin/search_bar_component.html.erb
491
+ - app/components/panda/core/admin/search_bar_component.rb
492
+ - app/components/panda/core/admin/search_filter_bar_component.html.erb
493
+ - app/components/panda/core/admin/search_filter_bar_component.rb
494
+ - app/components/panda/core/admin/secret_field_component.html.erb
495
+ - app/components/panda/core/admin/secret_field_component.rb
496
+ - app/components/panda/core/admin/sidebar_component.html.erb
497
+ - app/components/panda/core/admin/sidebar_component.rb
498
+ - app/components/panda/core/admin/slideover_component.html.erb
433
499
  - app/components/panda/core/admin/slideover_component.rb
500
+ - app/components/panda/core/admin/statistics_component.html.erb
434
501
  - app/components/panda/core/admin/statistics_component.rb
502
+ - app/components/panda/core/admin/tab_bar_component.html.erb
435
503
  - app/components/panda/core/admin/tab_bar_component.rb
504
+ - app/components/panda/core/admin/table_component.html.erb
436
505
  - app/components/panda/core/admin/table_component.rb
506
+ - app/components/panda/core/admin/tag_badge_component.html.erb
507
+ - app/components/panda/core/admin/tag_badge_component.rb
508
+ - app/components/panda/core/admin/tag_component.html.erb
437
509
  - app/components/panda/core/admin/tag_component.rb
510
+ - app/components/panda/core/admin/tag_input_component.html.erb
511
+ - app/components/panda/core/admin/tag_input_component.rb
512
+ - app/components/panda/core/admin/tags_panel_component.html.erb
513
+ - app/components/panda/core/admin/tags_panel_component.rb
514
+ - app/components/panda/core/admin/user_activity_component.html.erb
438
515
  - app/components/panda/core/admin/user_activity_component.rb
516
+ - app/components/panda/core/admin/user_display_component.html.erb
439
517
  - app/components/panda/core/admin/user_display_component.rb
440
518
  - app/components/panda/core/base.rb
519
+ - app/components/panda/core/shared/footer_component.html.erb
520
+ - app/components/panda/core/shared/footer_component.rb
521
+ - app/components/panda/core/shared/header_component.html.erb
522
+ - app/components/panda/core/shared/header_component.rb
441
523
  - app/constraints/panda/core/admin_constraint.rb
524
+ - app/controllers/concerns/panda/core/admin_authorization.rb
525
+ - app/controllers/concerns/panda/core/authorizable.rb
442
526
  - app/controllers/panda/core/admin/base_controller.rb
443
527
  - app/controllers/panda/core/admin/dashboard_controller.rb
528
+ - app/controllers/panda/core/admin/editor/search_controller.rb
529
+ - app/controllers/panda/core/admin/feature_flags_controller.rb
530
+ - app/controllers/panda/core/admin/file_categories_controller.rb
531
+ - app/controllers/panda/core/admin/files_controller.rb
532
+ - app/controllers/panda/core/admin/import_sessions_controller.rb
533
+ - app/controllers/panda/core/admin/my_profile/logins_controller.rb
444
534
  - app/controllers/panda/core/admin/my_profile_controller.rb
535
+ - app/controllers/panda/core/admin/search_controller.rb
445
536
  - app/controllers/panda/core/admin/sessions_controller.rb
446
537
  - app/controllers/panda/core/admin/settings_controller.rb
538
+ - app/controllers/panda/core/admin/tags_controller.rb
447
539
  - app/controllers/panda/core/admin/test_sessions_controller.rb
540
+ - app/controllers/panda/core/admin/users_controller.rb
448
541
  - app/controllers/panda/core/application_controller.rb
542
+ - app/helpers/panda/core/active_storage_helper.rb
449
543
  - app/helpers/panda/core/asset_helper.rb
544
+ - app/helpers/panda/core/feature_flag_helper.rb
545
+ - app/helpers/panda/core/form_helper.rb
450
546
  - app/helpers/panda/core/sessions_helper.rb
451
547
  - app/javascript/panda/core/application.js
452
548
  - app/javascript/panda/core/controllers/alert_controller.js
549
+ - app/javascript/panda/core/controllers/avatar_upload_controller.js
550
+ - app/javascript/panda/core/controllers/clipboard_controller.js
551
+ - app/javascript/panda/core/controllers/collapsible_item_controller.js
552
+ - app/javascript/panda/core/controllers/custom_select_controller.js
553
+ - app/javascript/panda/core/controllers/datepicker_controller.js
554
+ - app/javascript/panda/core/controllers/daterange_controller.js
555
+ - app/javascript/panda/core/controllers/file_gallery_controller.js
556
+ - app/javascript/panda/core/controllers/file_upload_controller.js
557
+ - app/javascript/panda/core/controllers/global_search_controller.js
453
558
  - app/javascript/panda/core/controllers/image_cropper_controller.js
454
559
  - app/javascript/panda/core/controllers/index.js
560
+ - app/javascript/panda/core/controllers/mobile_sidebar_controller.js
455
561
  - app/javascript/panda/core/controllers/navigation_toggle_controller.js
562
+ - app/javascript/panda/core/controllers/row_link_controller.js
563
+ - app/javascript/panda/core/controllers/tag_input_controller.js
456
564
  - app/javascript/panda/core/controllers/theme_form_controller.js
457
565
  - app/javascript/panda/core/controllers/toggle_controller.js
458
566
  - app/javascript/panda/core/tailwindcss-stimulus-components.js
459
567
  - app/javascript/panda/core/tailwindplus-elements.js
568
+ - app/javascript/panda/core/vendor/@fortawesome--fontawesome-free@7.2.0.js
460
569
  - app/javascript/panda/core/vendor/@hotwired--stimulus.js
461
570
  - app/javascript/panda/core/vendor/@hotwired--turbo.js
462
571
  - app/javascript/panda/core/vendor/@rails--actioncable--src.js
572
+ - app/javascript/panda/core/vendor/@tailwindplus--elements@1.0.22.js
573
+ - app/javascript/panda/core/vendor/cropperjs@2.1.0.js
574
+ - app/javascript/panda/core/vendor/vanilla-calendar-pro.js
575
+ - app/models/concerns/panda/core/has_metadata.rb
463
576
  - app/models/concerns/panda/core/has_uuid.rb
577
+ - app/models/concerns/panda/core/importable.rb
578
+ - app/models/concerns/panda/core/searchable.rb
579
+ - app/models/concerns/panda/core/taggable.rb
464
580
  - app/models/panda/core/application_record.rb
465
581
  - app/models/panda/core/breadcrumb.rb
466
582
  - app/models/panda/core/current.rb
583
+ - app/models/panda/core/feature_flag.rb
584
+ - app/models/panda/core/file_categorization.rb
585
+ - app/models/panda/core/file_category.rb
586
+ - app/models/panda/core/import_session.rb
587
+ - app/models/panda/core/presence.rb
588
+ - app/models/panda/core/tag.rb
589
+ - app/models/panda/core/tagging.rb
467
590
  - app/models/panda/core/user.rb
591
+ - app/models/panda/core/user_activity.rb
592
+ - app/models/panda/core/user_session.rb
468
593
  - app/services/panda/core/attach_avatar_service.rb
594
+ - app/services/panda/core/csv_import_service.rb
595
+ - app/services/panda/core/file_categorizer.rb
596
+ - app/services/panda/core/file_parser.rb
597
+ - app/services/panda/core/invite_user_service.rb
598
+ - app/services/panda/core/presence_service.rb
469
599
  - app/views/layouts/panda/core/admin.html.erb
470
600
  - app/views/layouts/panda/core/admin_simple.html.erb
471
601
  - app/views/panda/core/admin/dashboard/_default_content.html.erb
472
602
  - app/views/panda/core/admin/dashboard/show.html.erb
603
+ - app/views/panda/core/admin/feature_flags/index.html.erb
604
+ - app/views/panda/core/admin/file_categories/_form.html.erb
605
+ - app/views/panda/core/admin/file_categories/edit.html.erb
606
+ - app/views/panda/core/admin/file_categories/index.html.erb
607
+ - app/views/panda/core/admin/file_categories/new.html.erb
608
+ - app/views/panda/core/admin/files/_file_details.html.erb
609
+ - app/views/panda/core/admin/files/index.html.erb
610
+ - app/views/panda/core/admin/import_sessions/column_map.html.erb
611
+ - app/views/panda/core/admin/import_sessions/index.html.erb
612
+ - app/views/panda/core/admin/import_sessions/new.html.erb
613
+ - app/views/panda/core/admin/import_sessions/preview.html.erb
614
+ - app/views/panda/core/admin/import_sessions/show.html.erb
473
615
  - app/views/panda/core/admin/my_profile/edit.html.erb
616
+ - app/views/panda/core/admin/my_profile/logins/show.html.erb
474
617
  - app/views/panda/core/admin/sessions/new.html.erb
475
618
  - app/views/panda/core/admin/settings/show.html.erb
476
619
  - app/views/panda/core/admin/shared/_breadcrumbs.html.erb
477
620
  - app/views/panda/core/admin/shared/_flash.html.erb
478
621
  - app/views/panda/core/admin/shared/_sidebar.html.erb
479
622
  - app/views/panda/core/admin/shared/_slideover.html.erb
623
+ - app/views/panda/core/admin/tags/_form.html.erb
624
+ - app/views/panda/core/admin/tags/edit.html.erb
625
+ - app/views/panda/core/admin/tags/index.html.erb
626
+ - app/views/panda/core/admin/tags/new.html.erb
627
+ - app/views/panda/core/admin/users/activity.html.erb
628
+ - app/views/panda/core/admin/users/edit.html.erb
629
+ - app/views/panda/core/admin/users/index.html.erb
630
+ - app/views/panda/core/admin/users/sessions.html.erb
631
+ - app/views/panda/core/admin/users/show.html.erb
480
632
  - app/views/panda/core/shared/_footer.html.erb
481
633
  - app/views/panda/core/shared/_header.html.erb
482
634
  - config/brakeman.ignore
@@ -485,6 +637,18 @@ files:
485
637
  - config/routes.rb
486
638
  - db/migrate/20250809000001_create_panda_core_users.rb
487
639
  - db/migrate/20251203100000_rename_is_admin_to_admin_in_panda_core_users.rb
640
+ - db/migrate/20260202171614_create_panda_core_file_categories.rb
641
+ - db/migrate/20260203000001_add_user_management_fields_to_panda_core_users.rb
642
+ - db/migrate/20260203000002_create_panda_core_user_activities.rb
643
+ - db/migrate/20260203000003_create_panda_core_user_sessions.rb
644
+ - db/migrate/20260207100000_create_panda_core_presences.rb
645
+ - db/migrate/20260213000001_fix_active_storage_attachments_record_id_type.rb
646
+ - db/migrate/20260217000001_create_panda_core_feature_flags.rb
647
+ - db/migrate/20260303000001_add_metadata_to_panda_core_users.rb
648
+ - db/migrate/20260310000001_create_panda_core_tags.rb
649
+ - db/migrate/20260310000002_create_panda_core_import_sessions.rb
650
+ - lib/generators/panda/core/install_generator.rb
651
+ - lib/generators/panda/core/templates/panda.rb
488
652
  - lib/panda/core.rb
489
653
  - lib/panda/core/asset_loader.rb
490
654
  - lib/panda/core/authentication.rb
@@ -496,17 +660,22 @@ files:
496
660
  - lib/panda/core/engine/autoload_config.rb
497
661
  - lib/panda/core/engine/generator_config.rb
498
662
  - lib/panda/core/engine/importmap_config.rb
499
- - lib/panda/core/engine/inflections_config.rb
500
663
  - lib/panda/core/engine/omniauth_config.rb
501
- - lib/panda/core/engine/phlex_config.rb
664
+ - lib/panda/core/engine/pending_migrations_check.rb
502
665
  - lib/panda/core/engine/route_config.rb
666
+ - lib/panda/core/engine/sqlite_schema_compatibility.rb
667
+ - lib/panda/core/engine/view_component_config.rb
503
668
  - lib/panda/core/media.rb
504
669
  - lib/panda/core/middleware.rb
505
670
  - lib/panda/core/module_registry.rb
671
+ - lib/panda/core/navigation_registry.rb
506
672
  - lib/panda/core/notifications.rb
507
673
  - lib/panda/core/oauth_providers.rb
674
+ - lib/panda/core/permission_registry.rb
508
675
  - lib/panda/core/railtie.rb
509
676
  - lib/panda/core/rake_tasks.rb
677
+ - lib/panda/core/search_registry.rb
678
+ - lib/panda/core/seeds/file_categories.rb
510
679
  - lib/panda/core/seo.rb
511
680
  - lib/panda/core/services/base_service.rb
512
681
  - lib/panda/core/shared/generator_config.rb
@@ -527,8 +696,11 @@ files:
527
696
  - lib/panda/core/testing/support/system/database_connection_helpers.rb
528
697
  - lib/panda/core/testing/support/system/ferrum_console_logger.rb
529
698
  - lib/panda/core/testing/support/system/system_test_helpers.rb
699
+ - lib/panda/core/testing/view_component_test_controller.rb
530
700
  - lib/panda/core/version.rb
701
+ - lib/panda/core/widget_registry.rb
531
702
  - lib/tasks/panda/core/ci_tasks.rake
703
+ - lib/tasks/panda/core/file_categories.rake
532
704
  - lib/tasks/panda/core/migrations.rake
533
705
  - lib/tasks/panda/core/users.rake
534
706
  - lib/tasks/panda/shared.rake
@@ -545,9 +717,14 @@ files:
545
717
  - public/panda-core-assets/panda-core-0.11.0.css
546
718
  - public/panda-core-assets/panda-core-0.12.2.css
547
719
  - public/panda-core-assets/panda-core-0.12.3.css
720
+ - public/panda-core-assets/panda-core-0.12.5.css
721
+ - public/panda-core-assets/panda-core-0.13.0.css
722
+ - public/panda-core-assets/panda-core-0.14.0.css
723
+ - public/panda-core-assets/panda-core-0.14.4.css
548
724
  - public/panda-core-assets/panda-core.css
549
725
  - public/panda-core-assets/panda-logo-screenprint.png
550
726
  - public/panda-core-assets/panda-nav.png
727
+ - public/panda-core-assets/vanilla-calendar.css
551
728
  homepage: https://github.com/tastybamboo/panda-core
552
729
  licenses:
553
730
  - BSD-3-Clause
@@ -573,5 +750,5 @@ requirements: []
573
750
  rubygems_version: 3.5.22
574
751
  signing_key:
575
752
  specification_version: 4
576
- summary: Core libraries and development tools for Tasty Bamboo projects
753
+ summary: Core framework for Panda-powered Rails applications
577
754
  test_files: []
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Panda
4
- module Core
5
- class Engine < ::Rails::Engine
6
- # Inflections configuration
7
- module InflectionsConfig
8
- extend ActiveSupport::Concern
9
-
10
- included do
11
- # Load inflections early to ensure proper constant resolution
12
- initializer "panda_core.inflections", before: :load_config_initializers do
13
- ActiveSupport::Inflector.inflections(:en) do |inflect|
14
- inflect.acronym "CMS"
15
- inflect.acronym "SEO"
16
- inflect.acronym "AI"
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end