Packages

phoenix_kit

1.7.95
1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

221 Versions

Jump to

Compare versions

5 files changed
+666 additions
-535 deletions
  @@ -1,3 +1,9 @@
1 + ## 1.7.95 - 2026-04-11
2 +
3 + ### Added
4 + - V95 migration: media folders and folder links tables
5 + - V96 migration: catalogue_uuid FK on catalogue items for direct catalogue membership
6 +
1 7 ## 1.7.94 - 2026-04-10
2 8
3 9 ### Added
  @@ -1,6 +1,6 @@
1 1 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/BeamLabEU/phoenix_kit">>}]}.
2 2 {<<"name">>,<<"phoenix_kit">>}.
3 - {<<"version">>,<<"1.7.94">>}.
3 + {<<"version">>,<<"1.7.95">>}.
4 4 {<<"description">>,
5 5 <<65,32,102,111,117,110,100,97,116,105,111,110,32,102,111,114,32,98,117,105,
6 6 108,100,105,110,103,32,69,108,105,120,105,114,32,80,104,111,101,110,105,
  @@ -12,532 +12,528 @@
12 12 {<<"app">>,<<"phoenix_kit">>}.
13 13 {<<"licenses">>,[<<"MIT">>]}.
14 14 {<<"files">>,
15 - [<<"lib">>,<<"lib/phoenix_kit_web">>,<<"lib/phoenix_kit_web/components">>,
16 - <<"lib/phoenix_kit_web/components/invitation_banner.ex">>,
17 - <<"lib/phoenix_kit_web/components/layout_wrapper.ex">>,
18 - <<"lib/phoenix_kit_web/components/layouts">>,
19 - <<"lib/phoenix_kit_web/components/layouts/dashboard.html.heex">>,
20 - <<"lib/phoenix_kit_web/components/layouts/admin.html.heex">>,
21 - <<"lib/phoenix_kit_web/components/layouts/root.html.heex">>,
22 - <<"lib/phoenix_kit_web/components/layouts/app.html.heex">>,
23 - <<"lib/phoenix_kit_web/components/admin_nav.ex">>,
24 - <<"lib/phoenix_kit_web/components/oauth_buttons.ex">>,
25 - <<"lib/phoenix_kit_web/components/core">>,
26 - <<"lib/phoenix_kit_web/components/core/integration_picker.ex">>,
27 - <<"lib/phoenix_kit_web/components/core/icons.ex">>,
28 - <<"lib/phoenix_kit_web/components/core/stat_card.ex">>,
29 - <<"lib/phoenix_kit_web/components/core/aws_region_select.ex">>,
30 - <<"lib/phoenix_kit_web/components/core/markdown_content.ex">>,
31 - <<"lib/phoenix_kit_web/components/core/table_default.ex">>,
32 - <<"lib/phoenix_kit_web/components/core/file_display.ex">>,
33 - <<"lib/phoenix_kit_web/components/core/email_activity_badges.ex">>,
34 - <<"lib/phoenix_kit_web/components/core/nav_tabs.ex">>,
35 - <<"lib/phoenix_kit_web/components/core/theme_switcher.ex">>,
36 - <<"lib/phoenix_kit_web/components/core/select.ex">>,
37 - <<"lib/phoenix_kit_web/components/core/user_info.ex">>,
38 - <<"lib/phoenix_kit_web/components/core/time_display.ex">>,
39 - <<"lib/phoenix_kit_web/components/core/oauth_checkbox.ex">>,
40 - <<"lib/phoenix_kit_web/components/core/oauth_provider.ex">>,
41 - <<"lib/phoenix_kit_web/components/core/checkbox.ex">>,
42 - <<"lib/phoenix_kit_web/components/core/message_tag_badge.ex">>,
43 - <<"lib/phoenix_kit_web/components/core/modal.ex">>,
44 - <<"lib/phoenix_kit_web/components/core/number_formatter.ex">>,
45 - <<"lib/phoenix_kit_web/components/core/form_field_label.ex">>,
46 - <<"lib/phoenix_kit_web/components/core/hero_stat_card.ex">>,
47 - <<"lib/phoenix_kit_web/components/core/theme_controller.ex">>,
48 - <<"lib/phoenix_kit_web/components/core/pagination.ex">>,
49 - <<"lib/phoenix_kit_web/components/core/flash.ex">>,
50 - <<"lib/phoenix_kit_web/components/core/event_timeline_item.ex">>,
51 - <<"lib/phoenix_kit_web/components/core/oauth_utils.ex">>,
52 - <<"lib/phoenix_kit_web/components/core/accordion.ex">>,
53 - <<"lib/phoenix_kit_web/components/core/table_row_menu.ex">>,
54 - <<"lib/phoenix_kit_web/components/core/icon.ex">>,
55 - <<"lib/phoenix_kit_web/components/core/form_field_error.ex">>,
56 - <<"lib/phoenix_kit_web/components/core/email_status_badge.ex">>,
57 - <<"lib/phoenix_kit_web/components/core/draggable_list.ex">>,
58 - <<"lib/phoenix_kit_web/components/core/markdown_editor.ex">>,
59 - <<"lib/phoenix_kit_web/components/core/input.ex">>,
60 - <<"lib/phoenix_kit_web/components/core/markdown.ex">>,
61 - <<"lib/phoenix_kit_web/components/core/badge.ex">>,
62 - <<"lib/phoenix_kit_web/components/core/aws_credentials_verify.ex">>,
63 - <<"lib/phoenix_kit_web/components/core/phoenix_kit_globals.ex">>,
64 - <<"lib/phoenix_kit_web/components/core/header.ex">>,
65 - <<"lib/phoenix_kit_web/components/core/language_switcher.ex">>,
66 - <<"lib/phoenix_kit_web/components/core/file_upload.ex">>,
67 - <<"lib/phoenix_kit_web/components/core/module_card.ex">>,
68 - <<"lib/phoenix_kit_web/components/core/admin_page_header.ex">>,
69 - <<"lib/phoenix_kit_web/components/core/simple_form.ex">>,
70 - <<"lib/phoenix_kit_web/components/core/textarea.ex">>,
71 - <<"lib/phoenix_kit_web/components/core/pk_link.ex">>,
72 - <<"lib/phoenix_kit_web/components/core/media_thumbnail.ex">>,
73 - <<"lib/phoenix_kit_web/components/core/user_dashboard_header.ex">>,
74 - <<"lib/phoenix_kit_web/components/core/dev_notice.ex">>,
75 - <<"lib/phoenix_kit_web/components/core/button.ex">>,
76 - <<"lib/phoenix_kit_web/components/multilang_form.ex">>,
77 - <<"lib/phoenix_kit_web/components/layouts.ex">>,
78 - <<"lib/phoenix_kit_web/components/dashboard">>,
79 - <<"lib/phoenix_kit_web/components/dashboard/live_tabs.ex">>,
80 - <<"lib/phoenix_kit_web/components/dashboard/tab_item.ex">>,
81 - <<"lib/phoenix_kit_web/components/dashboard/multi_context_selector.ex">>,
82 - <<"lib/phoenix_kit_web/components/dashboard/admin_sidebar.ex">>,
83 - <<"lib/phoenix_kit_web/components/dashboard/context_selector.ex">>,
84 - <<"lib/phoenix_kit_web/components/dashboard/sidebar.ex">>,
85 - <<"lib/phoenix_kit_web/components/dashboard/badge.ex">>,
86 - <<"lib/phoenix_kit_web/components/language_switcher.ex">>,
87 - <<"lib/phoenix_kit_web/components/user_dashboard_nav.ex">>,
88 - <<"lib/phoenix_kit_web/components/auth_page_wrapper.ex">>,
89 - <<"lib/phoenix_kit_web/controllers">>,
90 - <<"lib/phoenix_kit_web/controllers/context_controller.ex">>,
91 - <<"lib/phoenix_kit_web/controllers/file_controller.ex">>,
92 - <<"lib/phoenix_kit_web/controllers/assets_controller.ex">>,
93 - <<"lib/phoenix_kit_web/controllers/upload_controller.ex">>,
94 - <<"lib/phoenix_kit_web/controllers/error_html.ex">>,
95 - <<"lib/phoenix_kit_web/controllers/pages_html">>,
96 - <<"lib/phoenix_kit_web/controllers/pages_html/show.html.heex">>,
97 - <<"lib/phoenix_kit_web/controllers/error_json.ex">>,
98 - <<"lib/phoenix_kit_web/controllers/pages_html.ex">>,
99 - <<"lib/phoenix_kit_web/users">>,
100 - <<"lib/phoenix_kit_web/users/confirmation.html.heex">>,
101 - <<"lib/phoenix_kit_web/users/magic_link_registration_request.ex">>,
102 - <<"lib/phoenix_kit_web/users/forgot_password.ex">>,
103 - <<"lib/phoenix_kit_web/users/magic_link_registration_request.html.heex">>,
104 - <<"lib/phoenix_kit_web/users/reset_password.html.heex">>,
105 - <<"lib/phoenix_kit_web/users/forgot_password.html.heex">>,
106 - <<"lib/phoenix_kit_web/users/login.ex">>,
107 - <<"lib/phoenix_kit_web/users/user_form.ex">>,
108 - <<"lib/phoenix_kit_web/users/reset_password.ex">>,
109 - <<"lib/phoenix_kit_web/users/registration.ex">>,
110 - <<"lib/phoenix_kit_web/users/login.html.heex">>,
111 - <<"lib/phoenix_kit_web/users/oauth.ex">>,
112 - <<"lib/phoenix_kit_web/users/settings.ex">>,
113 - <<"lib/phoenix_kit_web/users/magic_link_registration.ex">>,
114 - <<"lib/phoenix_kit_web/users/magic_link_registration.html.heex">>,
115 - <<"lib/phoenix_kit_web/users/session.ex">>,
116 - <<"lib/phoenix_kit_web/users/magic_link_registration_verify.ex">>,
117 - <<"lib/phoenix_kit_web/users/confirmation_instructions.html.heex">>,
118 - <<"lib/phoenix_kit_web/users/confirmation.ex">>,
119 - <<"lib/phoenix_kit_web/users/registration.html.heex">>,
120 - <<"lib/phoenix_kit_web/users/user_form.html.heex">>,
121 - <<"lib/phoenix_kit_web/users/confirmation_instructions.ex">>,
122 - <<"lib/phoenix_kit_web/users/magic_link.html.heex">>,
123 - <<"lib/phoenix_kit_web/users/magic_link_verify.ex">>,
124 - <<"lib/phoenix_kit_web/users/auth.ex">>,
125 - <<"lib/phoenix_kit_web/users/magic_link.ex">>,
126 - <<"lib/phoenix_kit_web/live">>,<<"lib/phoenix_kit_web/live/dashboard">>,
127 - <<"lib/phoenix_kit_web/live/dashboard/index.ex">>,
128 - <<"lib/phoenix_kit_web/live/dashboard/settings.ex">>,
129 - <<"lib/phoenix_kit_web/live/users">>,
130 - <<"lib/phoenix_kit_web/live/users/media.html.heex">>,
131 - <<"lib/phoenix_kit_web/live/users/live_sessions.ex">>,
132 - <<"lib/phoenix_kit_web/live/users/live_sessions.html.heex">>,
133 - <<"lib/phoenix_kit_web/live/users/media_selector.html.heex">>,
134 - <<"lib/phoenix_kit_web/live/users/sessions.html.heex">>,
135 - <<"lib/phoenix_kit_web/live/users/permissions_matrix.ex">>,
136 - <<"lib/phoenix_kit_web/live/users/permissions_matrix.html.heex">>,
137 - <<"lib/phoenix_kit_web/live/users/media_detail.ex">>,
138 - <<"lib/phoenix_kit_web/live/users/sessions.ex">>,
139 - <<"lib/phoenix_kit_web/live/users/roles.ex">>,
140 - <<"lib/phoenix_kit_web/live/users/user_details.ex">>,
141 - <<"lib/phoenix_kit_web/live/users/media_selector.ex">>,
142 - <<"lib/phoenix_kit_web/live/users/user_details.html.heex">>,
143 - <<"lib/phoenix_kit_web/live/users/media_detail.html.heex">>,
144 - <<"lib/phoenix_kit_web/live/users/users.ex">>,
145 - <<"lib/phoenix_kit_web/live/users/users.html.heex">>,
146 - <<"lib/phoenix_kit_web/live/users/media.ex">>,
147 - <<"lib/phoenix_kit_web/live/users/roles.html.heex">>,
148 - <<"lib/phoenix_kit_web/live/activity">>,
149 - <<"lib/phoenix_kit_web/live/activity/index.ex">>,
150 - <<"lib/phoenix_kit_web/live/activity/show.ex">>,
151 - <<"lib/phoenix_kit_web/live/activity/show.html.heex">>,
152 - <<"lib/phoenix_kit_web/live/activity/index.html.heex">>,
153 - <<"lib/phoenix_kit_web/live/settings.html.heex">>,
154 - <<"lib/phoenix_kit_web/live/settings.ex">>,
155 - <<"lib/phoenix_kit_web/live/modules.html.heex">>,
156 - <<"lib/phoenix_kit_web/live/dashboard.ex">>,
157 - <<"lib/phoenix_kit_web/live/modules">>,
158 - <<"lib/phoenix_kit_web/live/modules/jobs">>,
159 - <<"lib/phoenix_kit_web/live/modules/jobs/index.ex">>,
160 - <<"lib/phoenix_kit_web/live/modules/jobs/index.html.heex">>,
161 - <<"lib/phoenix_kit_web/live/modules/languages.html.heex">>,
162 - <<"lib/phoenix_kit_web/live/modules/languages.ex">>,
163 - <<"lib/phoenix_kit_web/live/settings">>,
164 - <<"lib/phoenix_kit_web/live/settings/authorization.html.heex">>,
165 - <<"lib/phoenix_kit_web/live/settings/integrations.ex">>,
166 - <<"lib/phoenix_kit_web/live/settings/organization.ex">>,
167 - <<"lib/phoenix_kit_web/live/settings/users.html.heex">>,
168 - <<"lib/phoenix_kit_web/live/settings/integrations.html.heex">>,
169 - <<"lib/phoenix_kit_web/live/settings/organization.html.heex">>,
170 - <<"lib/phoenix_kit_web/live/settings/authorization.ex">>,
171 - <<"lib/phoenix_kit_web/live/settings/users.ex">>,
172 - <<"lib/phoenix_kit_web/live/settings/integration_form.ex">>,
173 - <<"lib/phoenix_kit_web/live/settings/integration_form.html.heex">>,
174 - <<"lib/phoenix_kit_web/live/settings/seo.html.heex">>,
175 - <<"lib/phoenix_kit_web/live/settings/seo.ex">>,
176 - <<"lib/phoenix_kit_web/live/components">>,
177 - <<"lib/phoenix_kit_web/live/components/searchable_select.ex">>,
178 - <<"lib/phoenix_kit_web/live/components/media_selector_modal.html.heex">>,
179 - <<"lib/phoenix_kit_web/live/components/user_settings.ex">>,
180 - <<"lib/phoenix_kit_web/live/components/user_media_selector_modal.ex">>,
181 - <<"lib/phoenix_kit_web/live/components/media_selector_modal.ex">>,
182 - <<"lib/phoenix_kit_web/live/dashboard.html.heex">>,
183 - <<"lib/phoenix_kit_web/live/modules.ex">>,
184 - <<"lib/phoenix_kit_web/integration.ex">>,<<"lib/phoenix_kit_web/plugs">>,
185 - <<"lib/phoenix_kit_web/plugs/ensure_oauth_scheme.ex">>,
186 - <<"lib/phoenix_kit_web/plugs/integration.ex">>,
187 - <<"lib/phoenix_kit_web/plugs/ensure_oauth_config.ex">>,
188 - <<"lib/phoenix_kit_web/plugs/request_timer.ex">>,
189 - <<"lib/phoenix_kit_web/endpoint.ex">>,<<"lib/phoenix_kit_web/dashboard">>,
190 - <<"lib/phoenix_kit_web/dashboard/tabs_initializer.ex">>,
191 - <<"lib/phoenix_kit_web/dashboard/context_provider.ex">>,
192 - <<"lib/phoenix_kit_web/gettext.ex">>,<<"lib/phoenix_kit_web/helpers">>,
193 - <<"lib/phoenix_kit_web/helpers/media_selector_helper.ex">>,
194 - <<"lib/phoenix_kit_web/helpers/admin_edit_helper.ex">>,
195 - <<"lib/phoenix_kit_web/helpers/layout_helpers.ex">>,
196 - <<"lib/phoenix_kit_web/router.ex">>,
197 - <<"lib/phoenix_kit_web/auth_router.ex">>,<<"lib/phoenix_kit_web/routes">>,
198 - <<"lib/phoenix_kit_web/routes/referrals.ex">>,
199 - <<"lib/phoenix_kit_web/routes/customer_service.ex">>,
200 - <<"lib/phoenix_kit_web/hooks">>,
201 - <<"lib/phoenix_kit_web/hooks/invitation_hook.ex">>,<<"lib/mix">>,
202 - <<"lib/mix/tasks">>,<<"lib/mix/tasks/compile.phoenix_kit_css_sources.ex">>,
203 - <<"lib/mix/tasks/phoenix_kit_templates.ex">>,
204 - <<"lib/mix/tasks/phoenix_kit.status.ex">>,
205 - <<"lib/mix/tasks/phoenix_kit.install.ex">>,
206 - <<"lib/mix/tasks/phoenix_kit.gen.user.dashboard.ex">>,
207 - <<"lib/mix/tasks/phoenix_kit.modernize_layouts.ex">>,
208 - <<"lib/mix/tasks/phoenix_kit.assets.rebuild.ex">>,
209 - <<"lib/mix/tasks/phoenix_kit.gen.admin.page.ex">>,
210 - <<"lib/mix/tasks/phoenix_kit.cleanup_orphaned_files.ex">>,
211 - <<"lib/mix/tasks/phoenix_kit.update.ex">>,
212 - <<"lib/mix/tasks/phoenix_kit.gen.migration.ex">>,
213 - <<"lib/mix/tasks/phoenix_kit.doctor.ex">>,<<"lib/phoenix_kit">>,
214 - <<"lib/phoenix_kit/utils">>,<<"lib/phoenix_kit/utils/ip_address.ex">>,
215 - <<"lib/phoenix_kit/utils/uuid.ex">>,
216 - <<"lib/phoenix_kit/utils/country_data.ex">>,
217 - <<"lib/phoenix_kit/utils/html_sanitizer.ex">>,
218 - <<"lib/phoenix_kit/utils/session_fingerprint.ex">>,
219 - <<"lib/phoenix_kit/utils/phoenix_version.ex">>,
220 - <<"lib/phoenix_kit/utils/routes.ex">>,
221 - <<"lib/phoenix_kit/utils/geolocation.ex">>,
222 - <<"lib/phoenix_kit/utils/hero_icons.ex">>,
223 - <<"lib/phoenix_kit/utils/date.ex">>,<<"lib/phoenix_kit/utils/slug.ex">>,
224 - <<"lib/phoenix_kit/utils/multilang.ex">>,
225 - <<"lib/phoenix_kit/utils/number.ex">>,
226 - <<"lib/phoenix_kit/scheduled_jobs.ex">>,<<"lib/phoenix_kit/admin">>,
227 - <<"lib/phoenix_kit/admin/presence.ex">>,
228 - <<"lib/phoenix_kit/admin/events.ex">>,
229 - <<"lib/phoenix_kit/admin/simple_presence.ex">>,
230 - <<"lib/phoenix_kit/application.ex">>,<<"lib/phoenix_kit/audit_log.ex">>,
231 - <<"lib/phoenix_kit/module.ex">>,<<"lib/phoenix_kit/integrations">>,
232 - <<"lib/phoenix_kit/integrations/oauth.ex">>,
233 - <<"lib/phoenix_kit/integrations/encryption.ex">>,
234 - <<"lib/phoenix_kit/integrations/events.ex">>,
235 - <<"lib/phoenix_kit/integrations/integrations.ex">>,
236 - <<"lib/phoenix_kit/integrations/providers.ex">>,
237 - <<"lib/phoenix_kit/config.ex">>,<<"lib/phoenix_kit/migration.ex">>,
238 - <<"lib/phoenix_kit/dashboard">>,<<"lib/phoenix_kit/dashboard/README.md">>,
239 - <<"lib/phoenix_kit/dashboard/ADMIN_README.md">>,
240 - <<"lib/phoenix_kit/dashboard/context_selector.ex">>,
241 - <<"lib/phoenix_kit/dashboard/admin_tabs.ex">>,
242 - <<"lib/phoenix_kit/dashboard/group.ex">>,
243 - <<"lib/phoenix_kit/dashboard/badge.ex">>,
244 - <<"lib/phoenix_kit/dashboard/presence.ex">>,
245 - <<"lib/phoenix_kit/dashboard/tab_helpers.ex">>,
246 - <<"lib/phoenix_kit/dashboard/registry.ex">>,
247 - <<"lib/phoenix_kit/dashboard/dashboard.ex">>,
248 - <<"lib/phoenix_kit/dashboard/tab.ex">>,
249 - <<"lib/phoenix_kit/theme_config.ex">>,<<"lib/phoenix_kit/email">>,
250 - <<"lib/phoenix_kit/email/default_provider.ex">>,
251 - <<"lib/phoenix_kit/email/provider.ex">>,<<"lib/phoenix_kit/supervisor.ex">>,
252 - <<"lib/phoenix_kit/migrations">>,<<"lib/phoenix_kit/migrations/postgres">>,
253 - <<"lib/phoenix_kit/migrations/postgres/v75.ex">>,
254 - <<"lib/phoenix_kit/migrations/postgres/v82.ex">>,
255 - <<"lib/phoenix_kit/migrations/postgres/v05.ex">>,
256 - <<"lib/phoenix_kit/migrations/postgres/v12.ex">>,
257 - <<"lib/phoenix_kit/migrations/postgres/v95.ex">>,
258 - <<"lib/phoenix_kit/migrations/postgres/v62.ex">>,
259 - <<"lib/phoenix_kit/migrations/postgres/v63.ex">>,
260 - <<"lib/phoenix_kit/migrations/postgres/v94.ex">>,
261 - <<"lib/phoenix_kit/migrations/postgres/v13.ex">>,
262 - <<"lib/phoenix_kit/migrations/postgres/v04.ex">>,
263 - <<"lib/phoenix_kit/migrations/postgres/v83.ex">>,
264 - <<"lib/phoenix_kit/migrations/postgres/v74.ex">>,
265 - <<"lib/phoenix_kit/migrations/postgres/v06.ex">>,
266 - <<"lib/phoenix_kit/migrations/postgres/v59.ex">>,
267 - <<"lib/phoenix_kit/migrations/postgres/v76.ex">>,
268 - <<"lib/phoenix_kit/migrations/postgres/v29.ex">>,
269 - <<"lib/phoenix_kit/migrations/postgres/v81.ex">>,
270 - <<"lib/phoenix_kit/migrations/postgres/v61.ex">>,
271 - <<"lib/phoenix_kit/migrations/postgres/v11.ex">>,
272 - <<"lib/phoenix_kit/migrations/postgres/v10.ex">>,
273 - <<"lib/phoenix_kit/migrations/postgres/v60.ex">>,
274 - <<"lib/phoenix_kit/migrations/postgres/v80.ex">>,
275 - <<"lib/phoenix_kit/migrations/postgres/v28.ex">>,
276 - <<"lib/phoenix_kit/migrations/postgres/v77.ex">>,
277 - <<"lib/phoenix_kit/migrations/postgres/v58.ex">>,
278 - <<"lib/phoenix_kit/migrations/postgres/v07.ex">>,
279 - <<"lib/phoenix_kit/migrations/postgres/v93.ex">>,
280 - <<"lib/phoenix_kit/migrations/postgres/v64.ex">>,
281 - <<"lib/phoenix_kit/migrations/postgres/v14.ex">>,
282 - <<"lib/phoenix_kit/migrations/postgres/v03.ex">>,
283 - <<"lib/phoenix_kit/migrations/postgres/v73.ex">>,
284 - <<"lib/phoenix_kit/migrations/postgres/v84.ex">>,
285 - <<"lib/phoenix_kit/migrations/postgres/v85.ex">>,
286 - <<"lib/phoenix_kit/migrations/postgres/v72.ex">>,
287 - <<"lib/phoenix_kit/migrations/postgres/v02.ex">>,
288 - <<"lib/phoenix_kit/migrations/postgres/v15.ex">>,
289 - <<"lib/phoenix_kit/migrations/postgres/v65.ex">>,
290 - <<"lib/phoenix_kit/migrations/postgres/v92.ex">>,
291 - <<"lib/phoenix_kit/migrations/postgres/v48.ex">>,
292 - <<"lib/phoenix_kit/migrations/postgres/v17.ex">>,
293 - <<"lib/phoenix_kit/migrations/postgres/v90.ex">>,
294 - <<"lib/phoenix_kit/migrations/postgres/v38.ex">>,
295 - <<"lib/phoenix_kit/migrations/postgres/v67.ex">>,
296 - <<"lib/phoenix_kit/migrations/postgres/v70.ex">>,
297 - <<"lib/phoenix_kit/migrations/postgres/v87.ex">>,
298 - <<"lib/phoenix_kit/migrations/postgres/v01.ex">>,
299 - <<"lib/phoenix_kit/migrations/postgres/v86.ex">>,
300 - <<"lib/phoenix_kit/migrations/postgres/v71.ex">>,
301 - <<"lib/phoenix_kit/migrations/postgres/v66.ex">>,
302 - <<"lib/phoenix_kit/migrations/postgres/v39.ex">>,
303 - <<"lib/phoenix_kit/migrations/postgres/v91.ex">>,
304 - <<"lib/phoenix_kit/migrations/postgres/v16.ex">>,
305 - <<"lib/phoenix_kit/migrations/postgres/v49.ex">>,
306 - <<"lib/phoenix_kit/migrations/postgres/v08.ex">>,
307 - <<"lib/phoenix_kit/migrations/postgres/v57.ex">>,
308 - <<"lib/phoenix_kit/migrations/postgres/v78.ex">>,
309 - <<"lib/phoenix_kit/migrations/postgres/v27.ex">>,
310 - <<"lib/phoenix_kit/migrations/postgres/v30.ex">>,
311 - <<"lib/phoenix_kit/migrations/postgres/v40.ex">>,
312 - <<"lib/phoenix_kit/migrations/postgres/v41.ex">>,
313 - <<"lib/phoenix_kit/migrations/postgres/v31.ex">>,
314 - <<"lib/phoenix_kit/migrations/postgres/v26.ex">>,
315 - <<"lib/phoenix_kit/migrations/postgres/v79.ex">>,
316 - <<"lib/phoenix_kit/migrations/postgres/v56.ex">>,
317 - <<"lib/phoenix_kit/migrations/postgres/v09.ex">>,
318 - <<"lib/phoenix_kit/migrations/postgres/v24.ex">>,
319 - <<"lib/phoenix_kit/migrations/postgres/v54.ex">>,
320 - <<"lib/phoenix_kit/migrations/postgres/v43.ex">>,
321 - <<"lib/phoenix_kit/migrations/postgres/v33.ex">>,
322 - <<"lib/phoenix_kit/migrations/postgres/v32.ex">>,
323 - <<"lib/phoenix_kit/migrations/postgres/v42.ex">>,
324 - <<"lib/phoenix_kit/migrations/postgres/v55.ex">>,
325 - <<"lib/phoenix_kit/migrations/postgres/v25.ex">>,
326 - <<"lib/phoenix_kit/migrations/postgres/v46.ex">>,
327 - <<"lib/phoenix_kit/migrations/postgres/v19.ex">>,
328 - <<"lib/phoenix_kit/migrations/postgres/v36.ex">>,
329 - <<"lib/phoenix_kit/migrations/postgres/v69.ex">>,
330 - <<"lib/phoenix_kit/migrations/postgres/v89.ex">>,
331 - <<"lib/phoenix_kit/migrations/postgres/v21.ex">>,
332 - <<"lib/phoenix_kit/migrations/postgres/v51.ex">>,
333 - <<"lib/phoenix_kit/migrations/postgres/v50.ex">>,
334 - <<"lib/phoenix_kit/migrations/postgres/v20.ex">>,
335 - <<"lib/phoenix_kit/migrations/postgres/v88.ex">>,
336 - <<"lib/phoenix_kit/migrations/postgres/v68.ex">>,
337 - <<"lib/phoenix_kit/migrations/postgres/v37.ex">>,
338 - <<"lib/phoenix_kit/migrations/postgres/v18.ex">>,
339 - <<"lib/phoenix_kit/migrations/postgres/v47.ex">>,
340 - <<"lib/phoenix_kit/migrations/postgres/v35.ex">>,
341 - <<"lib/phoenix_kit/migrations/postgres/v45.ex">>,
342 - <<"lib/phoenix_kit/migrations/postgres/v52.ex">>,
343 - <<"lib/phoenix_kit/migrations/postgres/v22.ex">>,
344 - <<"lib/phoenix_kit/migrations/postgres/v23.ex">>,
345 - <<"lib/phoenix_kit/migrations/postgres/v53.ex">>,
346 - <<"lib/phoenix_kit/migrations/postgres/v44.ex">>,
347 - <<"lib/phoenix_kit/migrations/postgres/v34.ex">>,
348 - <<"lib/phoenix_kit/migrations/uuid_fk_columns.ex">>,
349 - <<"lib/phoenix_kit/migrations/postgres.ex">>,
350 - <<"lib/phoenix_kit/migrations/uuid_repair.ex">>,
351 - <<"lib/phoenix_kit/settings">>,<<"lib/phoenix_kit/settings/settings.ex">>,
15 + [<<"lib">>,<<"lib/phoenix_kit">>,<<"lib/phoenix_kit/supervisor.ex">>,
16 + <<"lib/phoenix_kit/settings">>,<<"lib/phoenix_kit/settings/events.ex">>,
352 17 <<"lib/phoenix_kit/settings/setting.ex">>,
353 18 <<"lib/phoenix_kit/settings/queries.ex">>,
354 - <<"lib/phoenix_kit/settings/events.ex">>,
355 - <<"lib/phoenix_kit/scheduled_jobs">>,
356 - <<"lib/phoenix_kit/scheduled_jobs/handler.ex">>,
357 - <<"lib/phoenix_kit/scheduled_jobs/scheduled_job.ex">>,
358 - <<"lib/phoenix_kit/scheduled_jobs/workers">>,
359 - <<"lib/phoenix_kit/scheduled_jobs/workers/process_scheduled_jobs_worker.ex">>,
360 - <<"lib/phoenix_kit/users">>,<<"lib/phoenix_kit/users/role_assignment.ex">>,
361 - <<"lib/phoenix_kit/users/roles.ex">>,
362 - <<"lib/phoenix_kit/users/oauth_provider.ex">>,
363 - <<"lib/phoenix_kit/users/rate_limiter.ex">>,
364 - <<"lib/phoenix_kit/users/table_columns.ex">>,
365 - <<"lib/phoenix_kit/users/invitations.ex">>,
366 - <<"lib/phoenix_kit/users/admin_note.ex">>,
367 - <<"lib/phoenix_kit/users/oauth_config.ex">>,
368 - <<"lib/phoenix_kit/users/custom_fields.ex">>,
369 - <<"lib/phoenix_kit/users/magic_link_registration.ex">>,
370 - <<"lib/phoenix_kit/users/custom_fields">>,
371 - <<"lib/phoenix_kit/users/custom_fields/events.ex">>,
372 - <<"lib/phoenix_kit/users/scope_notifier.ex">>,
373 - <<"lib/phoenix_kit/users/magic_link.ex">>,
374 - <<"lib/phoenix_kit/users/permissions.ex">>,
375 - <<"lib/phoenix_kit/users/oauth.ex">>,
376 - <<"lib/phoenix_kit/users/role_permission.ex">>,
377 - <<"lib/phoenix_kit/users/organization_invitation.ex">>,
378 - <<"lib/phoenix_kit/users/auth.ex">>,<<"lib/phoenix_kit/users/role.ex">>,
379 - <<"lib/phoenix_kit/users/oauth_availability.ex">>,
380 - <<"lib/phoenix_kit/users/sessions.ex">>,<<"lib/phoenix_kit/users/auth">>,
381 - <<"lib/phoenix_kit/users/auth/user_notifier.ex">>,
382 - <<"lib/phoenix_kit/users/auth/user.ex">>,
383 - <<"lib/phoenix_kit/users/auth/user_token.ex">>,
384 - <<"lib/phoenix_kit/users/auth/scope.ex">>,<<"lib/phoenix_kit/system">>,
385 - <<"lib/phoenix_kit/system/dependencies.ex">>,<<"lib/phoenix_kit/jobs.ex">>,
386 - <<"lib/phoenix_kit/config">>,
387 - <<"lib/phoenix_kit/config/admin_dashboard_categories.ex">>,
388 - <<"lib/phoenix_kit/config/aws.ex">>,
389 - <<"lib/phoenix_kit/config/ueber_auth.ex">>,
390 - <<"lib/phoenix_kit/config/user_dashboard_categories.ex">>,
391 - <<"lib/phoenix_kit/config/config.ex">>,
392 - <<"lib/phoenix_kit/config/endpoint_url_sync.ex">>,<<"lib/phoenix_kit/aws">>,
393 - <<"lib/phoenix_kit/aws/infrastructure_setup.ex">>,
394 - <<"lib/phoenix_kit/aws/credentials_verifier.ex">>,
395 - <<"lib/phoenix_kit/aws/sesv2.ex">>,<<"lib/phoenix_kit/pubsub">>,
396 - <<"lib/phoenix_kit/pubsub/manager.ex">>,
397 - <<"lib/phoenix_kit/pubsub_helper.ex">>,<<"lib/phoenix_kit/audit_log">>,
398 - <<"lib/phoenix_kit/audit_log/entry.ex">>,
399 - <<"lib/phoenix_kit/module_discovery.ex">>,
400 - <<"lib/phoenix_kit/layout_config.ex">>,<<"lib/phoenix_kit/workers">>,
401 - <<"lib/phoenix_kit/workers/oauth_config_loader.ex">>,
402 - <<"lib/phoenix_kit/activity">>,<<"lib/phoenix_kit/activity/entry.ex">>,
403 - <<"lib/phoenix_kit/activity/prune_worker.ex">>,
404 - <<"lib/phoenix_kit/activity/activity.ex">>,<<"lib/phoenix_kit/mailer.ex">>,
405 - <<"lib/phoenix_kit/install">>,
406 - <<"lib/phoenix_kit/install/application_supervisor.ex">>,
407 - <<"lib/phoenix_kit/install/router_integration.ex">>,
408 - <<"lib/phoenix_kit/install/repo_detection.ex">>,
409 - <<"lib/phoenix_kit/install/css_integration.ex">>,
410 - <<"lib/phoenix_kit/install/runtime_detector.ex">>,
411 - <<"lib/phoenix_kit/install/igniter_compat.ex">>,
412 - <<"lib/phoenix_kit/install/basic_configuration.ex">>,
413 - <<"lib/phoenix_kit/install/js_integration.ex">>,
414 - <<"lib/phoenix_kit/install/endpoint_integration.ex">>,
415 - <<"lib/phoenix_kit/install/mailer_config.ex">>,
416 - <<"lib/phoenix_kit/install/db_connection_check.ex">>,
417 - <<"lib/phoenix_kit/install/asset_rebuild.ex">>,
418 - <<"lib/phoenix_kit/install/layout_config.ex">>,
419 - <<"lib/phoenix_kit/install/common.ex">>,
19 + <<"lib/phoenix_kit/settings/settings.ex">>,<<"lib/phoenix_kit/migrations">>,
20 + <<"lib/phoenix_kit/migrations/uuid_fk_columns.ex">>,
21 + <<"lib/phoenix_kit/migrations/postgres">>,
22 + <<"lib/phoenix_kit/migrations/postgres/v88.ex">>,
23 + <<"lib/phoenix_kit/migrations/postgres/v89.ex">>,
24 + <<"lib/phoenix_kit/migrations/postgres/v55.ex">>,
25 + <<"lib/phoenix_kit/migrations/postgres/v04.ex">>,
26 + <<"lib/phoenix_kit/migrations/postgres/v30.ex">>,
27 + <<"lib/phoenix_kit/migrations/postgres/v61.ex">>,
28 + <<"lib/phoenix_kit/migrations/postgres/v92.ex">>,
29 + <<"lib/phoenix_kit/migrations/postgres/v82.ex">>,
30 + <<"lib/phoenix_kit/migrations/postgres/v71.ex">>,
31 + <<"lib/phoenix_kit/migrations/postgres/v20.ex">>,
32 + <<"lib/phoenix_kit/migrations/postgres/v14.ex">>,
33 + <<"lib/phoenix_kit/migrations/postgres/v45.ex">>,
34 + <<"lib/phoenix_kit/migrations/postgres/v65.ex">>,
35 + <<"lib/phoenix_kit/migrations/postgres/v34.ex">>,
36 + <<"lib/phoenix_kit/migrations/postgres/v96.ex">>,
37 + <<"lib/phoenix_kit/migrations/postgres/v51.ex">>,
38 + <<"lib/phoenix_kit/migrations/postgres/v41.ex">>,
39 + <<"lib/phoenix_kit/migrations/postgres/v10.ex">>,
40 + <<"lib/phoenix_kit/migrations/postgres/v86.ex">>,
41 + <<"lib/phoenix_kit/migrations/postgres/v24.ex">>,
42 + <<"lib/phoenix_kit/migrations/postgres/v75.ex">>,
43 + <<"lib/phoenix_kit/migrations/postgres/v64.ex">>,
44 + <<"lib/phoenix_kit/migrations/postgres/v35.ex">>,
45 + <<"lib/phoenix_kit/migrations/postgres/v01.ex">>,
46 + <<"lib/phoenix_kit/migrations/postgres/v50.ex">>,
47 + <<"lib/phoenix_kit/migrations/postgres/v40.ex">>,
48 + <<"lib/phoenix_kit/migrations/postgres/v11.ex">>,
49 + <<"lib/phoenix_kit/migrations/postgres/v87.ex">>,
50 + <<"lib/phoenix_kit/migrations/postgres/v25.ex">>,
51 + <<"lib/phoenix_kit/migrations/postgres/v74.ex">>,
52 + <<"lib/phoenix_kit/migrations/postgres/v54.ex">>,
53 + <<"lib/phoenix_kit/migrations/postgres/v05.ex">>,
54 + <<"lib/phoenix_kit/migrations/postgres/v31.ex">>,
55 + <<"lib/phoenix_kit/migrations/postgres/v60.ex">>,
56 + <<"lib/phoenix_kit/migrations/postgres/v93.ex">>,
57 + <<"lib/phoenix_kit/migrations/postgres/v83.ex">>,
58 + <<"lib/phoenix_kit/migrations/postgres/v70.ex">>,
59 + <<"lib/phoenix_kit/migrations/postgres/v21.ex">>,
60 + <<"lib/phoenix_kit/migrations/postgres/v15.ex">>,
61 + <<"lib/phoenix_kit/migrations/postgres/v44.ex">>,
62 + <<"lib/phoenix_kit/migrations/postgres/v94.ex">>,
63 + <<"lib/phoenix_kit/migrations/postgres/v36.ex">>,
64 + <<"lib/phoenix_kit/migrations/postgres/v67.ex">>,
65 + <<"lib/phoenix_kit/migrations/postgres/v53.ex">>,
66 + <<"lib/phoenix_kit/migrations/postgres/v02.ex">>,
67 + <<"lib/phoenix_kit/migrations/postgres/v12.ex">>,
68 + <<"lib/phoenix_kit/migrations/postgres/v43.ex">>,
69 + <<"lib/phoenix_kit/migrations/postgres/v77.ex">>,
70 + <<"lib/phoenix_kit/migrations/postgres/v26.ex">>,
71 + <<"lib/phoenix_kit/migrations/postgres/v84.ex">>,
72 + <<"lib/phoenix_kit/migrations/postgres/v06.ex">>,
73 + <<"lib/phoenix_kit/migrations/postgres/v57.ex">>,
74 + <<"lib/phoenix_kit/migrations/postgres/v90.ex">>,
75 + <<"lib/phoenix_kit/migrations/postgres/v63.ex">>,
76 + <<"lib/phoenix_kit/migrations/postgres/v32.ex">>,
77 + <<"lib/phoenix_kit/migrations/postgres/v22.ex">>,
78 + <<"lib/phoenix_kit/migrations/postgres/v73.ex">>,
79 + <<"lib/phoenix_kit/migrations/postgres/v80.ex">>,
80 + <<"lib/phoenix_kit/migrations/postgres/v47.ex">>,
81 + <<"lib/phoenix_kit/migrations/postgres/v16.ex">>,
82 + <<"lib/phoenix_kit/migrations/postgres/v07.ex">>,
83 + <<"lib/phoenix_kit/migrations/postgres/v56.ex">>,
84 + <<"lib/phoenix_kit/migrations/postgres/v91.ex">>,
85 + <<"lib/phoenix_kit/migrations/postgres/v62.ex">>,
86 + <<"lib/phoenix_kit/migrations/postgres/v33.ex">>,
87 + <<"lib/phoenix_kit/migrations/postgres/v23.ex">>,
88 + <<"lib/phoenix_kit/migrations/postgres/v72.ex">>,
89 + <<"lib/phoenix_kit/migrations/postgres/v81.ex">>,
90 + <<"lib/phoenix_kit/migrations/postgres/v46.ex">>,
91 + <<"lib/phoenix_kit/migrations/postgres/v17.ex">>,
92 + <<"lib/phoenix_kit/migrations/postgres/v95.ex">>,
93 + <<"lib/phoenix_kit/migrations/postgres/v37.ex">>,
94 + <<"lib/phoenix_kit/migrations/postgres/v66.ex">>,
95 + <<"lib/phoenix_kit/migrations/postgres/v52.ex">>,
96 + <<"lib/phoenix_kit/migrations/postgres/v03.ex">>,
97 + <<"lib/phoenix_kit/migrations/postgres/v13.ex">>,
98 + <<"lib/phoenix_kit/migrations/postgres/v42.ex">>,
99 + <<"lib/phoenix_kit/migrations/postgres/v76.ex">>,
100 + <<"lib/phoenix_kit/migrations/postgres/v27.ex">>,
101 + <<"lib/phoenix_kit/migrations/postgres/v85.ex">>,
102 + <<"lib/phoenix_kit/migrations/postgres/v59.ex">>,
103 + <<"lib/phoenix_kit/migrations/postgres/v08.ex">>,
104 + <<"lib/phoenix_kit/migrations/postgres/v18.ex">>,
105 + <<"lib/phoenix_kit/migrations/postgres/v49.ex">>,
106 + <<"lib/phoenix_kit/migrations/postgres/v69.ex">>,
107 + <<"lib/phoenix_kit/migrations/postgres/v38.ex">>,
108 + <<"lib/phoenix_kit/migrations/postgres/v28.ex">>,
109 + <<"lib/phoenix_kit/migrations/postgres/v79.ex">>,
110 + <<"lib/phoenix_kit/migrations/postgres/v68.ex">>,
111 + <<"lib/phoenix_kit/migrations/postgres/v39.ex">>,
112 + <<"lib/phoenix_kit/migrations/postgres/v29.ex">>,
113 + <<"lib/phoenix_kit/migrations/postgres/v78.ex">>,
114 + <<"lib/phoenix_kit/migrations/postgres/v58.ex">>,
115 + <<"lib/phoenix_kit/migrations/postgres/v09.ex">>,
116 + <<"lib/phoenix_kit/migrations/postgres/v19.ex">>,
117 + <<"lib/phoenix_kit/migrations/postgres/v48.ex">>,
118 + <<"lib/phoenix_kit/migrations/uuid_repair.ex">>,
119 + <<"lib/phoenix_kit/migrations/postgres.ex">>,<<"lib/phoenix_kit/install">>,
420 120 <<"lib/phoenix_kit/install/browser_pipeline_integration.ex">>,
421 121 <<"lib/phoenix_kit/install/oauth_config.ex">>,
422 - <<"lib/phoenix_kit/install/demo_files.ex">>,
423 - <<"lib/phoenix_kit/install/igniter_config.ex">>,
424 122 <<"lib/phoenix_kit/install/igniter_helpers.ex">>,
425 - <<"lib/phoenix_kit/install/oban_config.ex">>,
123 + <<"lib/phoenix_kit/install/endpoint_integration.ex">>,
124 + <<"lib/phoenix_kit/install/layout_config.ex">>,
426 125 <<"lib/phoenix_kit/install/migration_strategy.ex">>,
126 + <<"lib/phoenix_kit/install/mailer_config.ex">>,
127 + <<"lib/phoenix_kit/install/demo_files.ex">>,
128 + <<"lib/phoenix_kit/install/repo_detection.ex">>,
129 + <<"lib/phoenix_kit/install/asset_rebuild.ex">>,
130 + <<"lib/phoenix_kit/install/css_integration.ex">>,
131 + <<"lib/phoenix_kit/install/igniter_compat.ex">>,
132 + <<"lib/phoenix_kit/install/igniter_config.ex">>,
427 133 <<"lib/phoenix_kit/install/rate_limiter_config.ex">>,
428 - <<"lib/phoenix_kit/install/finch_setup.ex">>,<<"lib/phoenix_kit/cache">>,
429 - <<"lib/phoenix_kit/cache/cache.ex">>,
430 - <<"lib/phoenix_kit/cache/registry.ex">>,
134 + <<"lib/phoenix_kit/install/basic_configuration.ex">>,
135 + <<"lib/phoenix_kit/install/finch_setup.ex">>,
136 + <<"lib/phoenix_kit/install/application_supervisor.ex">>,
137 + <<"lib/phoenix_kit/install/common.ex">>,
138 + <<"lib/phoenix_kit/install/oban_config.ex">>,
139 + <<"lib/phoenix_kit/install/runtime_detector.ex">>,
140 + <<"lib/phoenix_kit/install/router_integration.ex">>,
141 + <<"lib/phoenix_kit/install/js_integration.ex">>,
142 + <<"lib/phoenix_kit/install/db_connection_check.ex">>,
143 + <<"lib/phoenix_kit/cache">>,<<"lib/phoenix_kit/cache/registry.ex">>,
144 + <<"lib/phoenix_kit/cache/cache.ex">>,<<"lib/phoenix_kit/config">>,
145 + <<"lib/phoenix_kit/config/aws.ex">>,<<"lib/phoenix_kit/config/config.ex">>,
146 + <<"lib/phoenix_kit/config/user_dashboard_categories.ex">>,
147 + <<"lib/phoenix_kit/config/admin_dashboard_categories.ex">>,
148 + <<"lib/phoenix_kit/config/ueber_auth.ex">>,
149 + <<"lib/phoenix_kit/config/endpoint_url_sync.ex">>,
150 + <<"lib/phoenix_kit/layout_config.ex">>,<<"lib/phoenix_kit/activity">>,
151 + <<"lib/phoenix_kit/activity/activity.ex">>,
152 + <<"lib/phoenix_kit/activity/prune_worker.ex">>,
153 + <<"lib/phoenix_kit/activity/entry.ex">>,
154 + <<"lib/phoenix_kit/scheduled_jobs">>,
155 + <<"lib/phoenix_kit/scheduled_jobs/scheduled_job.ex">>,
156 + <<"lib/phoenix_kit/scheduled_jobs/handler.ex">>,
157 + <<"lib/phoenix_kit/scheduled_jobs/workers">>,
158 + <<"lib/phoenix_kit/scheduled_jobs/workers/process_scheduled_jobs_worker.ex">>,
159 + <<"lib/phoenix_kit/admin">>,<<"lib/phoenix_kit/admin/events.ex">>,
160 + <<"lib/phoenix_kit/admin/simple_presence.ex">>,
161 + <<"lib/phoenix_kit/admin/presence.ex">>,<<"lib/phoenix_kit/config.ex">>,
162 + <<"lib/phoenix_kit/utils">>,<<"lib/phoenix_kit/utils/country_data.ex">>,
163 + <<"lib/phoenix_kit/utils/number.ex">>,
164 + <<"lib/phoenix_kit/utils/geolocation.ex">>,
165 + <<"lib/phoenix_kit/utils/hero_icons.ex">>,
166 + <<"lib/phoenix_kit/utils/phoenix_version.ex">>,
167 + <<"lib/phoenix_kit/utils/session_fingerprint.ex">>,
168 + <<"lib/phoenix_kit/utils/ip_address.ex">>,
169 + <<"lib/phoenix_kit/utils/multilang.ex">>,
170 + <<"lib/phoenix_kit/utils/html_sanitizer.ex">>,
171 + <<"lib/phoenix_kit/utils/uuid.ex">>,<<"lib/phoenix_kit/utils/slug.ex">>,
172 + <<"lib/phoenix_kit/utils/date.ex">>,<<"lib/phoenix_kit/utils/routes.ex">>,
173 + <<"lib/phoenix_kit/repo_helper.ex">>,<<"lib/phoenix_kit/audit_log">>,
174 + <<"lib/phoenix_kit/audit_log/entry.ex">>,<<"lib/phoenix_kit/dashboard">>,
175 + <<"lib/phoenix_kit/dashboard/registry.ex">>,
176 + <<"lib/phoenix_kit/dashboard/presence.ex">>,
177 + <<"lib/phoenix_kit/dashboard/badge.ex">>,
178 + <<"lib/phoenix_kit/dashboard/ADMIN_README.md">>,
179 + <<"lib/phoenix_kit/dashboard/admin_tabs.ex">>,
180 + <<"lib/phoenix_kit/dashboard/context_selector.ex">>,
181 + <<"lib/phoenix_kit/dashboard/README.md">>,
182 + <<"lib/phoenix_kit/dashboard/tab.ex">>,
183 + <<"lib/phoenix_kit/dashboard/dashboard.ex">>,
184 + <<"lib/phoenix_kit/dashboard/tab_helpers.ex">>,
185 + <<"lib/phoenix_kit/dashboard/group.ex">>,<<"lib/phoenix_kit/integrations">>,
186 + <<"lib/phoenix_kit/integrations/events.ex">>,
187 + <<"lib/phoenix_kit/integrations/encryption.ex">>,
188 + <<"lib/phoenix_kit/integrations/integrations.ex">>,
189 + <<"lib/phoenix_kit/integrations/oauth.ex">>,
190 + <<"lib/phoenix_kit/integrations/providers.ex">>,
191 + <<"lib/phoenix_kit/system">>,<<"lib/phoenix_kit/system/dependencies.ex">>,
192 + <<"lib/phoenix_kit/module.ex">>,<<"lib/phoenix_kit/migration.ex">>,
193 + <<"lib/phoenix_kit/module_discovery.ex">>,
194 + <<"lib/phoenix_kit/pubsub_helper.ex">>,<<"lib/phoenix_kit/mailer.ex">>,
195 + <<"lib/phoenix_kit/audit_log.ex">>,<<"lib/phoenix_kit/users">>,
196 + <<"lib/phoenix_kit/users/oauth_availability.ex">>,
197 + <<"lib/phoenix_kit/users/oauth_provider.ex">>,
198 + <<"lib/phoenix_kit/users/oauth_config.ex">>,
199 + <<"lib/phoenix_kit/users/table_columns.ex">>,
200 + <<"lib/phoenix_kit/users/rate_limiter.ex">>,
201 + <<"lib/phoenix_kit/users/role.ex">>,<<"lib/phoenix_kit/users/auth">>,
202 + <<"lib/phoenix_kit/users/auth/user.ex">>,
203 + <<"lib/phoenix_kit/users/auth/scope.ex">>,
204 + <<"lib/phoenix_kit/users/auth/user_notifier.ex">>,
205 + <<"lib/phoenix_kit/users/auth/user_token.ex">>,
206 + <<"lib/phoenix_kit/users/role_permission.ex">>,
207 + <<"lib/phoenix_kit/users/auth.ex">>,<<"lib/phoenix_kit/users/sessions.ex">>,
208 + <<"lib/phoenix_kit/users/custom_fields">>,
209 + <<"lib/phoenix_kit/users/custom_fields/events.ex">>,
210 + <<"lib/phoenix_kit/users/roles.ex">>,
211 + <<"lib/phoenix_kit/users/scope_notifier.ex">>,
212 + <<"lib/phoenix_kit/users/custom_fields.ex">>,
213 + <<"lib/phoenix_kit/users/admin_note.ex">>,
214 + <<"lib/phoenix_kit/users/oauth.ex">>,
215 + <<"lib/phoenix_kit/users/magic_link_registration.ex">>,
216 + <<"lib/phoenix_kit/users/role_assignment.ex">>,
217 + <<"lib/phoenix_kit/users/organization_invitation.ex">>,
218 + <<"lib/phoenix_kit/users/magic_link.ex">>,
219 + <<"lib/phoenix_kit/users/invitations.ex">>,
220 + <<"lib/phoenix_kit/users/permissions.ex">>,<<"lib/phoenix_kit/pubsub">>,
221 + <<"lib/phoenix_kit/pubsub/manager.ex">>,<<"lib/phoenix_kit/workers">>,
222 + <<"lib/phoenix_kit/workers/oauth_config_loader.ex">>,
223 + <<"lib/phoenix_kit/jobs.ex">>,<<"lib/phoenix_kit/aws">>,
224 + <<"lib/phoenix_kit/aws/infrastructure_setup.ex">>,
225 + <<"lib/phoenix_kit/aws/sesv2.ex">>,
226 + <<"lib/phoenix_kit/aws/credentials_verifier.ex">>,
431 227 <<"lib/phoenix_kit/module_registry.ex">>,
432 - <<"lib/phoenix_kit/repo_helper.ex">>,<<"lib/phoenix_kit_web.ex">>,
433 - <<"lib/phoenix_kit.ex">>,<<"lib/modules">>,<<"lib/modules/db">>,
434 - <<"lib/modules/db/web">>,<<"lib/modules/db/web/activity.html.heex">>,
435 - <<"lib/modules/db/web/activity.ex">>,
436 - <<"lib/modules/db/web/show.html.heex">>,
437 - <<"lib/modules/db/web/index.html.heex">>,<<"lib/modules/db/web/index.ex">>,
438 - <<"lib/modules/db/web/show.ex">>,<<"lib/modules/db/listener.ex">>,
439 - <<"lib/modules/db/db.ex">>,<<"lib/modules/seo">>,
440 - <<"lib/modules/seo/seo.ex">>,<<"lib/modules/shared">>,
441 - <<"lib/modules/shared/README.md">>,<<"lib/modules/shared/components">>,
442 - <<"lib/modules/shared/components/subheadline.ex">>,
443 - <<"lib/modules/shared/components/video.ex">>,
444 - <<"lib/modules/shared/components/image.ex">>,
445 - <<"lib/modules/shared/components/headline.ex">>,
446 - <<"lib/modules/shared/components/cta.ex">>,
228 + <<"lib/phoenix_kit/scheduled_jobs.ex">>,
229 + <<"lib/phoenix_kit/application.ex">>,<<"lib/phoenix_kit/theme_config.ex">>,
230 + <<"lib/phoenix_kit/email">>,<<"lib/phoenix_kit/email/default_provider.ex">>,
231 + <<"lib/phoenix_kit/email/provider.ex">>,<<"lib/mix">>,<<"lib/mix/tasks">>,
232 + <<"lib/mix/tasks/phoenix_kit.gen.user.dashboard.ex">>,
233 + <<"lib/mix/tasks/phoenix_kit_templates.ex">>,
234 + <<"lib/mix/tasks/phoenix_kit.status.ex">>,
235 + <<"lib/mix/tasks/phoenix_kit.assets.rebuild.ex">>,
236 + <<"lib/mix/tasks/phoenix_kit.doctor.ex">>,
237 + <<"lib/mix/tasks/phoenix_kit.update.ex">>,
238 + <<"lib/mix/tasks/compile.phoenix_kit_css_sources.ex">>,
239 + <<"lib/mix/tasks/phoenix_kit.gen.migration.ex">>,
240 + <<"lib/mix/tasks/phoenix_kit.modernize_layouts.ex">>,
241 + <<"lib/mix/tasks/phoenix_kit.install.ex">>,
242 + <<"lib/mix/tasks/phoenix_kit.gen.admin.page.ex">>,
243 + <<"lib/mix/tasks/phoenix_kit.cleanup_orphaned_files.ex">>,
244 + <<"lib/phoenix_kit.ex">>,<<"lib/phoenix_kit_web.ex">>,
245 + <<"lib/phoenix_kit_web">>,<<"lib/phoenix_kit_web/gettext.ex">>,
246 + <<"lib/phoenix_kit_web/router.ex">>,<<"lib/phoenix_kit_web/dashboard">>,
247 + <<"lib/phoenix_kit_web/dashboard/context_provider.ex">>,
248 + <<"lib/phoenix_kit_web/dashboard/tabs_initializer.ex">>,
249 + <<"lib/phoenix_kit_web/components">>,
250 + <<"lib/phoenix_kit_web/components/invitation_banner.ex">>,
251 + <<"lib/phoenix_kit_web/components/admin_nav.ex">>,
252 + <<"lib/phoenix_kit_web/components/core">>,
253 + <<"lib/phoenix_kit_web/components/core/dev_notice.ex">>,
254 + <<"lib/phoenix_kit_web/components/core/icons.ex">>,
255 + <<"lib/phoenix_kit_web/components/core/oauth_provider.ex">>,
256 + <<"lib/phoenix_kit_web/components/core/table_default.ex">>,
257 + <<"lib/phoenix_kit_web/components/core/module_card.ex">>,
258 + <<"lib/phoenix_kit_web/components/core/simple_form.ex">>,
259 + <<"lib/phoenix_kit_web/components/core/markdown_editor.ex">>,
260 + <<"lib/phoenix_kit_web/components/core/message_tag_badge.ex">>,
261 + <<"lib/phoenix_kit_web/components/core/file_display.ex">>,
262 + <<"lib/phoenix_kit_web/components/core/badge.ex">>,
263 + <<"lib/phoenix_kit_web/components/core/table_row_menu.ex">>,
264 + <<"lib/phoenix_kit_web/components/core/icon.ex">>,
265 + <<"lib/phoenix_kit_web/components/core/integration_picker.ex">>,
266 + <<"lib/phoenix_kit_web/components/core/textarea.ex">>,
267 + <<"lib/phoenix_kit_web/components/core/theme_switcher.ex">>,
268 + <<"lib/phoenix_kit_web/components/core/form_field_error.ex">>,
269 + <<"lib/phoenix_kit_web/components/core/oauth_utils.ex">>,
270 + <<"lib/phoenix_kit_web/components/core/event_timeline_item.ex">>,
271 + <<"lib/phoenix_kit_web/components/core/user_dashboard_header.ex">>,
272 + <<"lib/phoenix_kit_web/components/core/stat_card.ex">>,
273 + <<"lib/phoenix_kit_web/components/core/email_activity_badges.ex">>,
274 + <<"lib/phoenix_kit_web/components/core/header.ex">>,
275 + <<"lib/phoenix_kit_web/components/core/pk_link.ex">>,
276 + <<"lib/phoenix_kit_web/components/core/select.ex">>,
277 + <<"lib/phoenix_kit_web/components/core/pagination.ex">>,
278 + <<"lib/phoenix_kit_web/components/core/number_formatter.ex">>,
279 + <<"lib/phoenix_kit_web/components/core/markdown_content.ex">>,
280 + <<"lib/phoenix_kit_web/components/core/media_thumbnail.ex">>,
281 + <<"lib/phoenix_kit_web/components/core/time_display.ex">>,
282 + <<"lib/phoenix_kit_web/components/core/hero_stat_card.ex">>,
283 + <<"lib/phoenix_kit_web/components/core/email_status_badge.ex">>,
284 + <<"lib/phoenix_kit_web/components/core/phoenix_kit_globals.ex">>,
285 + <<"lib/phoenix_kit_web/components/core/file_upload.ex">>,
286 + <<"lib/phoenix_kit_web/components/core/language_switcher.ex">>,
287 + <<"lib/phoenix_kit_web/components/core/checkbox.ex">>,
288 + <<"lib/phoenix_kit_web/components/core/theme_controller.ex">>,
289 + <<"lib/phoenix_kit_web/components/core/draggable_list.ex">>,
290 + <<"lib/phoenix_kit_web/components/core/aws_region_select.ex">>,
291 + <<"lib/phoenix_kit_web/components/core/oauth_checkbox.ex">>,
292 + <<"lib/phoenix_kit_web/components/core/button.ex">>,
293 + <<"lib/phoenix_kit_web/components/core/form_field_label.ex">>,
294 + <<"lib/phoenix_kit_web/components/core/input.ex">>,
295 + <<"lib/phoenix_kit_web/components/core/aws_credentials_verify.ex">>,
296 + <<"lib/phoenix_kit_web/components/core/markdown.ex">>,
297 + <<"lib/phoenix_kit_web/components/core/accordion.ex">>,
298 + <<"lib/phoenix_kit_web/components/core/admin_page_header.ex">>,
299 + <<"lib/phoenix_kit_web/components/core/user_info.ex">>,
300 + <<"lib/phoenix_kit_web/components/core/modal.ex">>,
301 + <<"lib/phoenix_kit_web/components/core/nav_tabs.ex">>,
302 + <<"lib/phoenix_kit_web/components/core/flash.ex">>,
303 + <<"lib/phoenix_kit_web/components/auth_page_wrapper.ex">>,
304 + <<"lib/phoenix_kit_web/components/user_dashboard_nav.ex">>,
305 + <<"lib/phoenix_kit_web/components/dashboard">>,
306 + <<"lib/phoenix_kit_web/components/dashboard/badge.ex">>,
307 + <<"lib/phoenix_kit_web/components/dashboard/sidebar.ex">>,
308 + <<"lib/phoenix_kit_web/components/dashboard/context_selector.ex">>,
309 + <<"lib/phoenix_kit_web/components/dashboard/multi_context_selector.ex">>,
310 + <<"lib/phoenix_kit_web/components/dashboard/tab_item.ex">>,
311 + <<"lib/phoenix_kit_web/components/dashboard/admin_sidebar.ex">>,
312 + <<"lib/phoenix_kit_web/components/dashboard/live_tabs.ex">>,
313 + <<"lib/phoenix_kit_web/components/layouts.ex">>,
314 + <<"lib/phoenix_kit_web/components/layouts">>,
315 + <<"lib/phoenix_kit_web/components/layouts/root.html.heex">>,
316 + <<"lib/phoenix_kit_web/components/layouts/dashboard.html.heex">>,
317 + <<"lib/phoenix_kit_web/components/layouts/app.html.heex">>,
318 + <<"lib/phoenix_kit_web/components/layouts/admin.html.heex">>,
319 + <<"lib/phoenix_kit_web/components/oauth_buttons.ex">>,
320 + <<"lib/phoenix_kit_web/components/language_switcher.ex">>,
321 + <<"lib/phoenix_kit_web/components/layout_wrapper.ex">>,
322 + <<"lib/phoenix_kit_web/components/multilang_form.ex">>,
323 + <<"lib/phoenix_kit_web/plugs">>,
324 + <<"lib/phoenix_kit_web/plugs/ensure_oauth_scheme.ex">>,
325 + <<"lib/phoenix_kit_web/plugs/request_timer.ex">>,
326 + <<"lib/phoenix_kit_web/plugs/ensure_oauth_config.ex">>,
327 + <<"lib/phoenix_kit_web/plugs/integration.ex">>,
328 + <<"lib/phoenix_kit_web/hooks">>,
329 + <<"lib/phoenix_kit_web/hooks/invitation_hook.ex">>,
330 + <<"lib/phoenix_kit_web/users">>,
331 + <<"lib/phoenix_kit_web/users/confirmation_instructions.ex">>,
332 + <<"lib/phoenix_kit_web/users/session.ex">>,
333 + <<"lib/phoenix_kit_web/users/confirmation.html.heex">>,
334 + <<"lib/phoenix_kit_web/users/confirmation_instructions.html.heex">>,
335 + <<"lib/phoenix_kit_web/users/reset_password.html.heex">>,
336 + <<"lib/phoenix_kit_web/users/magic_link_registration_request.ex">>,
337 + <<"lib/phoenix_kit_web/users/user_form.html.heex">>,
338 + <<"lib/phoenix_kit_web/users/auth.ex">>,
339 + <<"lib/phoenix_kit_web/users/registration.ex">>,
340 + <<"lib/phoenix_kit_web/users/magic_link.html.heex">>,
341 + <<"lib/phoenix_kit_web/users/magic_link_registration_request.html.heex">>,
342 + <<"lib/phoenix_kit_web/users/magic_link_registration.html.heex">>,
343 + <<"lib/phoenix_kit_web/users/login.ex">>,
344 + <<"lib/phoenix_kit_web/users/forgot_password.html.heex">>,
345 + <<"lib/phoenix_kit_web/users/login.html.heex">>,
346 + <<"lib/phoenix_kit_web/users/reset_password.ex">>,
347 + <<"lib/phoenix_kit_web/users/user_form.ex">>,
348 + <<"lib/phoenix_kit_web/users/oauth.ex">>,
349 + <<"lib/phoenix_kit_web/users/magic_link_registration_verify.ex">>,
350 + <<"lib/phoenix_kit_web/users/forgot_password.ex">>,
351 + <<"lib/phoenix_kit_web/users/magic_link_registration.ex">>,
352 + <<"lib/phoenix_kit_web/users/magic_link.ex">>,
353 + <<"lib/phoenix_kit_web/users/confirmation.ex">>,
354 + <<"lib/phoenix_kit_web/users/magic_link_verify.ex">>,
355 + <<"lib/phoenix_kit_web/users/registration.html.heex">>,
356 + <<"lib/phoenix_kit_web/users/settings.ex">>,<<"lib/phoenix_kit_web/live">>,
357 + <<"lib/phoenix_kit_web/live/settings">>,
358 + <<"lib/phoenix_kit_web/live/settings/organization.ex">>,
359 + <<"lib/phoenix_kit_web/live/settings/authorization.html.heex">>,
360 + <<"lib/phoenix_kit_web/live/settings/integration_form.ex">>,
361 + <<"lib/phoenix_kit_web/live/settings/organization.html.heex">>,
362 + <<"lib/phoenix_kit_web/live/settings/integration_form.html.heex">>,
363 + <<"lib/phoenix_kit_web/live/settings/users.ex">>,
364 + <<"lib/phoenix_kit_web/live/settings/seo.ex">>,
365 + <<"lib/phoenix_kit_web/live/settings/integrations.html.heex">>,
366 + <<"lib/phoenix_kit_web/live/settings/integrations.ex">>,
367 + <<"lib/phoenix_kit_web/live/settings/seo.html.heex">>,
368 + <<"lib/phoenix_kit_web/live/settings/authorization.ex">>,
369 + <<"lib/phoenix_kit_web/live/settings/users.html.heex">>,
370 + <<"lib/phoenix_kit_web/live/activity">>,
371 + <<"lib/phoenix_kit_web/live/activity/index.html.heex">>,
372 + <<"lib/phoenix_kit_web/live/activity/show.ex">>,
373 + <<"lib/phoenix_kit_web/live/activity/index.ex">>,
374 + <<"lib/phoenix_kit_web/live/activity/show.html.heex">>,
375 + <<"lib/phoenix_kit_web/live/dashboard">>,
376 + <<"lib/phoenix_kit_web/live/dashboard/index.ex">>,
377 + <<"lib/phoenix_kit_web/live/dashboard/settings.ex">>,
378 + <<"lib/phoenix_kit_web/live/modules.ex">>,
379 + <<"lib/phoenix_kit_web/live/components">>,
380 + <<"lib/phoenix_kit_web/live/components/user_media_selector_modal.ex">>,
381 + <<"lib/phoenix_kit_web/live/components/user_settings.ex">>,
382 + <<"lib/phoenix_kit_web/live/components/media_selector_modal.ex">>,
383 + <<"lib/phoenix_kit_web/live/components/media_selector_modal.html.heex">>,
384 + <<"lib/phoenix_kit_web/live/components/searchable_select.ex">>,
385 + <<"lib/phoenix_kit_web/live/users">>,
386 + <<"lib/phoenix_kit_web/live/users/media_selector.ex">>,
387 + <<"lib/phoenix_kit_web/live/users/live_sessions.ex">>,
388 + <<"lib/phoenix_kit_web/live/users/media_detail.ex">>,
389 + <<"lib/phoenix_kit_web/live/users/permissions_matrix.ex">>,
390 + <<"lib/phoenix_kit_web/live/users/live_sessions.html.heex">>,
391 + <<"lib/phoenix_kit_web/live/users/media.ex">>,
392 + <<"lib/phoenix_kit_web/live/users/sessions.ex">>,
393 + <<"lib/phoenix_kit_web/live/users/user_details.ex">>,
394 + <<"lib/phoenix_kit_web/live/users/users.ex">>,
395 + <<"lib/phoenix_kit_web/live/users/roles.ex">>,
396 + <<"lib/phoenix_kit_web/live/users/roles.html.heex">>,
397 + <<"lib/phoenix_kit_web/live/users/permissions_matrix.html.heex">>,
398 + <<"lib/phoenix_kit_web/live/users/media_selector.html.heex">>,
399 + <<"lib/phoenix_kit_web/live/users/media_detail.html.heex">>,
400 + <<"lib/phoenix_kit_web/live/users/user_details.html.heex">>,
401 + <<"lib/phoenix_kit_web/live/users/sessions.html.heex">>,
402 + <<"lib/phoenix_kit_web/live/users/users.html.heex">>,
403 + <<"lib/phoenix_kit_web/live/users/media.html.heex">>,
404 + <<"lib/phoenix_kit_web/live/modules.html.heex">>,
405 + <<"lib/phoenix_kit_web/live/dashboard.ex">>,
406 + <<"lib/phoenix_kit_web/live/dashboard.html.heex">>,
407 + <<"lib/phoenix_kit_web/live/settings.html.heex">>,
408 + <<"lib/phoenix_kit_web/live/modules">>,
409 + <<"lib/phoenix_kit_web/live/modules/languages.html.heex">>,
410 + <<"lib/phoenix_kit_web/live/modules/languages.ex">>,
411 + <<"lib/phoenix_kit_web/live/modules/jobs">>,
412 + <<"lib/phoenix_kit_web/live/modules/jobs/index.html.heex">>,
413 + <<"lib/phoenix_kit_web/live/modules/jobs/index.ex">>,
414 + <<"lib/phoenix_kit_web/live/settings.ex">>,
415 + <<"lib/phoenix_kit_web/endpoint.ex">>,
416 + <<"lib/phoenix_kit_web/integration.ex">>,
417 + <<"lib/phoenix_kit_web/controllers">>,
418 + <<"lib/phoenix_kit_web/controllers/file_controller.ex">>,
419 + <<"lib/phoenix_kit_web/controllers/assets_controller.ex">>,
420 + <<"lib/phoenix_kit_web/controllers/context_controller.ex">>,
421 + <<"lib/phoenix_kit_web/controllers/error_json.ex">>,
422 + <<"lib/phoenix_kit_web/controllers/pages_html">>,
423 + <<"lib/phoenix_kit_web/controllers/pages_html/show.html.heex">>,
424 + <<"lib/phoenix_kit_web/controllers/error_html.ex">>,
425 + <<"lib/phoenix_kit_web/controllers/upload_controller.ex">>,
426 + <<"lib/phoenix_kit_web/controllers/pages_html.ex">>,
427 + <<"lib/phoenix_kit_web/routes">>,
428 + <<"lib/phoenix_kit_web/routes/referrals.ex">>,
429 + <<"lib/phoenix_kit_web/routes/customer_service.ex">>,
430 + <<"lib/phoenix_kit_web/helpers">>,
431 + <<"lib/phoenix_kit_web/helpers/layout_helpers.ex">>,
432 + <<"lib/phoenix_kit_web/helpers/admin_edit_helper.ex">>,
433 + <<"lib/phoenix_kit_web/helpers/media_selector_helper.ex">>,
434 + <<"lib/phoenix_kit_web/auth_router.ex">>,<<"lib/modules">>,
447 435 <<"lib/modules/customer_service">>,
448 436 <<"lib/modules/customer_service/events.ex">>,
437 + <<"lib/modules/customer_service/ticket_comment.ex">>,
449 438 <<"lib/modules/customer_service/web">>,
450 - <<"lib/modules/customer_service/web/settings.html.heex">>,
451 - <<"lib/modules/customer_service/web/settings.ex">>,
452 - <<"lib/modules/customer_service/web/user_new.html.heex">>,
453 - <<"lib/modules/customer_service/web/user_new.ex">>,
454 - <<"lib/modules/customer_service/web/edit.ex">>,
455 - <<"lib/modules/customer_service/web/details.ex">>,
456 439 <<"lib/modules/customer_service/web/user_list.ex">>,
440 + <<"lib/modules/customer_service/web/new.html.heex">>,
441 + <<"lib/modules/customer_service/web/edit.ex">>,
442 + <<"lib/modules/customer_service/web/edit.html.heex">>,
443 + <<"lib/modules/customer_service/web/list.ex">>,
444 + <<"lib/modules/customer_service/web/user_new.ex">>,
445 + <<"lib/modules/customer_service/web/user_details.ex">>,
446 + <<"lib/modules/customer_service/web/user_new.html.heex">>,
447 + <<"lib/modules/customer_service/web/list.html.heex">>,
457 448 <<"lib/modules/customer_service/web/details.html.heex">>,
458 449 <<"lib/modules/customer_service/web/user_details.html.heex">>,
459 - <<"lib/modules/customer_service/web/list.ex">>,
460 - <<"lib/modules/customer_service/web/user_details.ex">>,
461 - <<"lib/modules/customer_service/web/edit.html.heex">>,
462 - <<"lib/modules/customer_service/web/new.html.heex">>,
450 + <<"lib/modules/customer_service/web/settings.html.heex">>,
451 + <<"lib/modules/customer_service/web/details.ex">>,
463 452 <<"lib/modules/customer_service/web/new.ex">>,
464 453 <<"lib/modules/customer_service/web/user_list.html.heex">>,
465 - <<"lib/modules/customer_service/web/list.html.heex">>,
466 - <<"lib/modules/customer_service/ticket_comment.ex">>,
467 - <<"lib/modules/customer_service/ticket_attachment.ex">>,
468 - <<"lib/modules/customer_service/ticket_status_history.ex">>,
454 + <<"lib/modules/customer_service/web/settings.ex">>,
469 455 <<"lib/modules/customer_service/ticket.ex">>,
456 + <<"lib/modules/customer_service/ticket_attachment.ex">>,
470 457 <<"lib/modules/customer_service/customer_service.ex">>,
458 + <<"lib/modules/customer_service/ticket_status_history.ex">>,
471 459 <<"lib/modules/referrals">>,<<"lib/modules/referrals/web">>,
472 - <<"lib/modules/referrals/web/list.ex">>,
473 460 <<"lib/modules/referrals/web/form.html.heex">>,
461 + <<"lib/modules/referrals/web/list.ex">>,
474 462 <<"lib/modules/referrals/web/list.html.heex">>,
475 463 <<"lib/modules/referrals/web/settings.html.heex">>,
464 + <<"lib/modules/referrals/web/form.ex">>,
476 465 <<"lib/modules/referrals/web/settings.ex">>,
477 - <<"lib/modules/referrals/web/form.ex">>,<<"lib/modules/referrals/schemas">>,
466 + <<"lib/modules/referrals/referrals.ex">>,
467 + <<"lib/modules/referrals/schemas">>,
478 468 <<"lib/modules/referrals/schemas/referral_code_usage.ex">>,
479 - <<"lib/modules/referrals/referrals.ex">>,<<"lib/modules/storage">>,
480 - <<"lib/modules/storage/web">>,
481 - <<"lib/modules/storage/web/health.html.heex">>,
482 - <<"lib/modules/storage/web/bucket_form.ex">>,
483 - <<"lib/modules/storage/web/dimensions.ex">>,
484 - <<"lib/modules/storage/web/dimensions.html.heex">>,
485 - <<"lib/modules/storage/web/settings.ex">>,
486 - <<"lib/modules/storage/web/settings.html.heex">>,
487 - <<"lib/modules/storage/web/health.ex">>,
488 - <<"lib/modules/storage/web/dimension_form.ex">>,
489 - <<"lib/modules/storage/web/bucket_form.html.heex">>,
490 - <<"lib/modules/storage/web/dimension_form.html.heex">>,
491 - <<"lib/modules/storage/schemas">>,
492 - <<"lib/modules/storage/schemas/bucket.ex">>,
493 - <<"lib/modules/storage/schemas/folder_link.ex">>,
494 - <<"lib/modules/storage/schemas/file_instance.ex">>,
495 - <<"lib/modules/storage/schemas/dimension.ex">>,
496 - <<"lib/modules/storage/schemas/folder.ex">>,
497 - <<"lib/modules/storage/schemas/file_location.ex">>,
498 - <<"lib/modules/storage/schemas/file.ex">>,
499 - <<"lib/modules/storage/services">>,
500 - <<"lib/modules/storage/services/url_signer.ex">>,
501 - <<"lib/modules/storage/services/variant_generator.ex">>,
502 - <<"lib/modules/storage/services/image_processor.ex">>,
503 - <<"lib/modules/storage/services/pdf_processor.ex">>,
504 - <<"lib/modules/storage/services/manager.ex">>,
505 - <<"lib/modules/storage/services/file_server.ex">>,
506 - <<"lib/modules/storage/workers">>,
507 - <<"lib/modules/storage/workers/process_file_job.ex">>,
508 - <<"lib/modules/storage/workers/test_job.ex">>,
509 - <<"lib/modules/storage/workers/delete_orphaned_file_job.ex">>,
510 - <<"lib/modules/storage/workers/sync_files_job.ex">>,
511 - <<"lib/modules/storage/README.md">>,<<"lib/modules/storage/providers">>,
512 - <<"lib/modules/storage/providers/s3.ex">>,
513 - <<"lib/modules/storage/providers/provider.ex">>,
514 - <<"lib/modules/storage/providers/provider_registry.ex">>,
515 - <<"lib/modules/storage/providers/local.ex">>,
516 - <<"lib/modules/storage/storage.ex">>,<<"lib/modules/sitemap">>,
517 - <<"lib/modules/sitemap/url_entry.ex">>,
518 - <<"lib/modules/sitemap/route_resolver.ex">>,
469 + <<"lib/modules/sitemap">>,<<"lib/modules/sitemap/route_resolver.ex">>,
519 470 <<"lib/modules/sitemap/sitemap.ex">>,
520 - <<"lib/modules/sitemap/file_storage.ex">>,<<"lib/modules/sitemap/sources">>,
521 - <<"lib/modules/sitemap/sources/shop.ex">>,
522 - <<"lib/modules/sitemap/sources/source.ex">>,
523 - <<"lib/modules/sitemap/sources/router_discovery.ex">>,
524 - <<"lib/modules/sitemap/sources/publishing.ex">>,
525 - <<"lib/modules/sitemap/sources/posts.ex">>,
526 - <<"lib/modules/sitemap/sources/static.ex">>,
527 - <<"lib/modules/sitemap/scheduler_worker.ex">>,
528 471 <<"lib/modules/sitemap/html_generator.ex">>,
529 - <<"lib/modules/sitemap/generator.ex">>,
530 - <<"lib/modules/sitemap/sitemap_file.ex">>,
531 - <<"lib/modules/sitemap/cache.ex">>,<<"lib/modules/sitemap/web">>,
472 + <<"lib/modules/sitemap/cache.ex">>,
473 + <<"lib/modules/sitemap/scheduler_worker.ex">>,<<"lib/modules/sitemap/web">>,
532 474 <<"lib/modules/sitemap/web/controller.ex">>,
533 475 <<"lib/modules/sitemap/web/settings.html.heex">>,
534 - <<"lib/modules/sitemap/web/settings.ex">>,<<"lib/modules/languages">>,
476 + <<"lib/modules/sitemap/web/settings.ex">>,
477 + <<"lib/modules/sitemap/url_entry.ex">>,<<"lib/modules/sitemap/sources">>,
478 + <<"lib/modules/sitemap/sources/posts.ex">>,
479 + <<"lib/modules/sitemap/sources/source.ex">>,
480 + <<"lib/modules/sitemap/sources/shop.ex">>,
481 + <<"lib/modules/sitemap/sources/publishing.ex">>,
482 + <<"lib/modules/sitemap/sources/router_discovery.ex">>,
483 + <<"lib/modules/sitemap/sources/static.ex">>,
484 + <<"lib/modules/sitemap/sitemap_file.ex">>,
485 + <<"lib/modules/sitemap/generator.ex">>,
486 + <<"lib/modules/sitemap/file_storage.ex">>,<<"lib/modules/shared">>,
487 + <<"lib/modules/shared/README.md">>,<<"lib/modules/shared/components">>,
488 + <<"lib/modules/shared/components/subheadline.ex">>,
489 + <<"lib/modules/shared/components/image.ex">>,
490 + <<"lib/modules/shared/components/cta.ex">>,
491 + <<"lib/modules/shared/components/video.ex">>,
492 + <<"lib/modules/shared/components/headline.ex">>,<<"lib/modules/storage">>,
493 + <<"lib/modules/storage/web">>,<<"lib/modules/storage/web/health.ex">>,
494 + <<"lib/modules/storage/web/health.html.heex">>,
495 + <<"lib/modules/storage/web/dimensions.html.heex">>,
496 + <<"lib/modules/storage/web/dimensions.ex">>,
497 + <<"lib/modules/storage/web/bucket_form.html.heex">>,
498 + <<"lib/modules/storage/web/bucket_form.ex">>,
499 + <<"lib/modules/storage/web/dimension_form.ex">>,
500 + <<"lib/modules/storage/web/settings.html.heex">>,
501 + <<"lib/modules/storage/web/dimension_form.html.heex">>,
502 + <<"lib/modules/storage/web/settings.ex">>,
503 + <<"lib/modules/storage/providers">>,
504 + <<"lib/modules/storage/providers/local.ex">>,
505 + <<"lib/modules/storage/providers/provider.ex">>,
506 + <<"lib/modules/storage/providers/s3.ex">>,
507 + <<"lib/modules/storage/providers/provider_registry.ex">>,
508 + <<"lib/modules/storage/schemas">>,
509 + <<"lib/modules/storage/schemas/folder.ex">>,
510 + <<"lib/modules/storage/schemas/file_location.ex">>,
511 + <<"lib/modules/storage/schemas/bucket.ex">>,
512 + <<"lib/modules/storage/schemas/file_instance.ex">>,
513 + <<"lib/modules/storage/schemas/folder_link.ex">>,
514 + <<"lib/modules/storage/schemas/dimension.ex">>,
515 + <<"lib/modules/storage/schemas/file.ex">>,
516 + <<"lib/modules/storage/README.md">>,<<"lib/modules/storage/workers">>,
517 + <<"lib/modules/storage/workers/test_job.ex">>,
518 + <<"lib/modules/storage/workers/delete_orphaned_file_job.ex">>,
519 + <<"lib/modules/storage/workers/process_file_job.ex">>,
520 + <<"lib/modules/storage/workers/sync_files_job.ex">>,
521 + <<"lib/modules/storage/storage.ex">>,<<"lib/modules/storage/services">>,
522 + <<"lib/modules/storage/services/image_processor.ex">>,
523 + <<"lib/modules/storage/services/url_signer.ex">>,
524 + <<"lib/modules/storage/services/variant_generator.ex">>,
525 + <<"lib/modules/storage/services/file_server.ex">>,
526 + <<"lib/modules/storage/services/manager.ex">>,
527 + <<"lib/modules/storage/services/pdf_processor.ex">>,
528 + <<"lib/modules/languages">>,<<"lib/modules/languages/README.md">>,
535 529 <<"lib/modules/languages/dialect_mapper.ex">>,
536 - <<"lib/modules/languages/language.ex">>,
537 530 <<"lib/modules/languages/languages.ex">>,
538 - <<"lib/modules/languages/README.md">>,<<"lib/modules/billing">>,
539 - <<"lib/modules/billing/web">>,<<"lib/modules/billing/web/components">>,
540 - <<"lib/modules/billing/web/components/billing_tabs.ex">>,
531 + <<"lib/modules/languages/language.ex">>,<<"lib/modules/db">>,
532 + <<"lib/modules/db/web">>,<<"lib/modules/db/web/activity.html.heex">>,
533 + <<"lib/modules/db/web/activity.ex">>,
534 + <<"lib/modules/db/web/index.html.heex">>,<<"lib/modules/db/web/show.ex">>,
535 + <<"lib/modules/db/web/index.ex">>,<<"lib/modules/db/web/show.html.heex">>,
536 + <<"lib/modules/db/db.ex">>,<<"lib/modules/db/listener.ex">>,
541 537 <<"lib/modules/maintenance">>,<<"lib/modules/maintenance/maintenance.ex">>,
542 538 <<"lib/modules/maintenance/web">>,
543 539 <<"lib/modules/maintenance/web/components">>,
  @@ -545,43 +541,46 @@
545 541 <<"lib/modules/maintenance/web/plugs">>,
546 542 <<"lib/modules/maintenance/web/plugs/maintenance_mode.ex">>,
547 543 <<"lib/modules/maintenance/web/settings.html.heex">>,
548 - <<"lib/modules/maintenance/settings.ex">>,
549 - <<"lib/modules/maintenance/README.md">>,<<"priv">>,<<"priv/repo">>,
550 - <<"priv/repo/migrations">>,<<"priv/repo/migrations/.formatter.exs">>,
551 - <<"priv/repo/seeds">>,<<"priv/repo/seeds/test_comments.exs">>,
552 - <<"priv/templates">>,<<"priv/templates/test_require_auth_live.ex">>,
553 - <<"priv/templates/admin_category_index_page.ex">>,
554 - <<"priv/templates/user_dashboard_page.ex">>,
555 - <<"priv/templates/admin_category_page.ex">>,
556 - <<"priv/templates/test_ensure_auth_live.ex">>,
557 - <<"priv/templates/test_redirect_if_auth_live.ex">>,<<"priv/static">>,
558 - <<"priv/static/examples">>,<<"priv/static/examples/sample_page.phk">>,
559 - <<"priv/static/assets">>,<<"priv/static/assets/css">>,
560 - <<"priv/static/assets/css/app.css">>,
561 - <<"priv/static/assets/sitemap-index-table.xsl">>,
562 - <<"priv/static/assets/phoenix_kit_markdown_editor.js">>,
563 - <<"priv/static/assets/sitemap-index-minimal.xsl">>,
564 - <<"priv/static/assets/phoenix_kit.js">>,
565 - <<"priv/static/assets/dashboard_animations.css">>,
566 - <<"priv/static/assets/phoenix_kit_sortable.js">>,
567 - <<"priv/static/assets/phoenix_kit_themes.js">>,
568 - <<"priv/static/assets/sitemap-minimal.xsl">>,
569 - <<"priv/static/assets/sitemap-table.xsl">>,
570 - <<"priv/static/assets/phoenix_kit_daisyui5.css">>,<<"priv/gettext">>,
571 - <<"priv/gettext/en">>,<<"priv/gettext/en/LC_MESSAGES">>,
572 - <<"priv/gettext/en/LC_MESSAGES/errors.po">>,
573 - <<"priv/gettext/en/LC_MESSAGES/default.po">>,<<"priv/gettext/errors.pot">>,
574 - <<"priv/gettext/default.pot">>,<<"priv/gettext/et">>,
575 - <<"priv/gettext/et/LC_MESSAGES">>,
576 - <<"priv/gettext/et/LC_MESSAGES/default.po">>,
577 - <<"priv/gettext/et/LC_MESSAGES/errors.po">>,<<"priv/gettext/es">>,
578 - <<"priv/gettext/es/LC_MESSAGES">>,
579 - <<"priv/gettext/es/LC_MESSAGES/default.po">>,
580 - <<"priv/gettext/es/LC_MESSAGES/errors.po">>,<<"priv/gettext/ru">>,
544 + <<"lib/modules/maintenance/README.md">>,
545 + <<"lib/modules/maintenance/settings.ex">>,<<"lib/modules/seo">>,
546 + <<"lib/modules/seo/seo.ex">>,<<"lib/modules/billing">>,
547 + <<"lib/modules/billing/web">>,<<"lib/modules/billing/web/components">>,
548 + <<"lib/modules/billing/web/components/billing_tabs.ex">>,<<"priv">>,
549 + <<"priv/gettext">>,<<"priv/gettext/default.pot">>,<<"priv/gettext/ru">>,
581 550 <<"priv/gettext/ru/LC_MESSAGES">>,
582 551 <<"priv/gettext/ru/LC_MESSAGES/default.po">>,
583 - <<"priv/gettext/ru/LC_MESSAGES/errors.po">>,<<"mix.exs">>,<<"README.md">>,
584 - <<"LICENSE">>,<<"CHANGELOG.md">>]}.
552 + <<"priv/gettext/ru/LC_MESSAGES/errors.po">>,<<"priv/gettext/es">>,
553 + <<"priv/gettext/es/LC_MESSAGES">>,
554 + <<"priv/gettext/es/LC_MESSAGES/default.po">>,
555 + <<"priv/gettext/es/LC_MESSAGES/errors.po">>,<<"priv/gettext/et">>,
556 + <<"priv/gettext/et/LC_MESSAGES">>,
557 + <<"priv/gettext/et/LC_MESSAGES/default.po">>,
558 + <<"priv/gettext/et/LC_MESSAGES/errors.po">>,<<"priv/gettext/en">>,
559 + <<"priv/gettext/en/LC_MESSAGES">>,
560 + <<"priv/gettext/en/LC_MESSAGES/default.po">>,
561 + <<"priv/gettext/en/LC_MESSAGES/errors.po">>,<<"priv/gettext/errors.pot">>,
562 + <<"priv/static">>,<<"priv/static/examples">>,
563 + <<"priv/static/examples/sample_page.phk">>,<<"priv/static/assets">>,
564 + <<"priv/static/assets/phoenix_kit_themes.js">>,
565 + <<"priv/static/assets/phoenix_kit_sortable.js">>,
566 + <<"priv/static/assets/css">>,<<"priv/static/assets/css/app.css">>,
567 + <<"priv/static/assets/sitemap-minimal.xsl">>,
568 + <<"priv/static/assets/phoenix_kit_daisyui5.css">>,
569 + <<"priv/static/assets/sitemap-index-minimal.xsl">>,
570 + <<"priv/static/assets/phoenix_kit.js">>,
571 + <<"priv/static/assets/phoenix_kit_markdown_editor.js">>,
572 + <<"priv/static/assets/sitemap-table.xsl">>,
573 + <<"priv/static/assets/dashboard_animations.css">>,
574 + <<"priv/static/assets/sitemap-index-table.xsl">>,<<"priv/templates">>,
575 + <<"priv/templates/admin_category_index_page.ex">>,
576 + <<"priv/templates/test_require_auth_live.ex">>,
577 + <<"priv/templates/test_ensure_auth_live.ex">>,
578 + <<"priv/templates/admin_category_page.ex">>,
579 + <<"priv/templates/test_redirect_if_auth_live.ex">>,
580 + <<"priv/templates/user_dashboard_page.ex">>,<<"priv/repo">>,
581 + <<"priv/repo/migrations">>,<<"priv/repo/migrations/.formatter.exs">>,
582 + <<"priv/repo/seeds">>,<<"priv/repo/seeds/test_comments.exs">>,<<"mix.exs">>,
583 + <<"README.md">>,<<"LICENSE">>,<<"CHANGELOG.md">>]}.
585 584 {<<"requirements">>,
586 585 [[{<<"name">>,<<"ecto_sql">>},
587 586 {<<"app">>,<<"ecto_sql">>},
  @@ -529,7 +529,19 @@ defmodule PhoenixKit.Migrations.Postgres do
529 529 - Replaces unique index with partial index (slug-mode only, WHERE slug IS NOT NULL)
530 530 - Adds unique index on `(group_uuid, post_date, post_time)` for timestamp-mode posts
531 531
532 - ### V94 - Document Creator local DB sync ⚡ LATEST
532 + ### V96 - Catalogue items linked directly to catalogues ⚡ LATEST
533 + - Adds nullable `catalogue_uuid` FK on `phoenix_kit_cat_items` so items can
534 + belong to a catalogue independently of having a category
535 + - Backfills existing items from their category's catalogue_uuid
536 + - Pins any remaining orphans to the oldest non-deleted catalogue
537 + - Adds indexes on `catalogue_uuid` and `(catalogue_uuid, status)`
538 +
539 + ### V95 - Media folders and folder links
540 + - Creates `phoenix_kit_media_folders` and `phoenix_kit_media_folder_links` tables
541 + - Adds organizational folder hierarchy for media files (metadata-only;
542 + storage buckets are unaware of them)
543 +
544 + ### V94 - Document Creator local DB sync
533 545 - Adds `google_doc_id` (VARCHAR(255)) to `phoenix_kit_doc_templates`, `phoenix_kit_doc_documents`, `phoenix_kit_doc_headers_footers`
534 546 - Adds `status` (VARCHAR(20), DEFAULT 'published') to `phoenix_kit_doc_documents`
535 547 - Partial unique indexes on `google_doc_id WHERE google_doc_id IS NOT NULL`
  @@ -701,7 +713,7 @@ defmodule PhoenixKit.Migrations.Postgres do
701 713 use Ecto.Migration
702 714
703 715 @initial_version 1
704 - @current_version 95
716 + @current_version 96
705 717 @default_prefix "public"
706 718
707 719 @doc false
  @@ -0,0 +1,114 @@
1 + defmodule PhoenixKit.Migrations.Postgres.V96 do
2 + @moduledoc """
3 + V96: Attach catalogue items directly to a catalogue.
4 +
5 + Adds a nullable `catalogue_uuid` FK on `phoenix_kit_cat_items` so items
6 + can belong to a catalogue independently of having a category. This lets
7 + "uncategorized" items (items with no category) still be scoped to a
8 + catalogue instead of floating in a global pool.
9 +
10 + - Adds `catalogue_uuid` column with a FK to `phoenix_kit_cat_catalogues`
11 + (`on_delete: :nilify_all`) — in-app cascades handle soft-delete lifecycle
12 + - Backfills existing items from their category's catalogue_uuid
13 + - Pins any remaining orphans (items with no category at all) to the
14 + oldest non-deleted catalogue so they stay visible in the UI
15 + - Adds indexes on `catalogue_uuid` and `(catalogue_uuid, status)`
16 +
17 + All operations are idempotent.
18 + """
19 +
20 + use Ecto.Migration
21 +
22 + def up(opts) do
23 + prefix = Map.get(opts, :prefix, "public")
24 + p = prefix_str(prefix)
25 + schema = if prefix == "public", do: "public", else: prefix
26 +
27 + # 1. Add catalogue_uuid column (nullable FK, nilify on catalogue hard-delete)
28 + execute("""
29 + DO $$
30 + BEGIN
31 + IF NOT EXISTS (
32 + SELECT FROM information_schema.columns
33 + WHERE table_schema = '#{schema}'
34 + AND table_name = 'phoenix_kit_cat_items'
35 + AND column_name = 'catalogue_uuid'
36 + ) THEN
37 + ALTER TABLE #{p}phoenix_kit_cat_items
38 + ADD COLUMN catalogue_uuid uuid
39 + REFERENCES #{p}phoenix_kit_cat_catalogues(uuid) ON DELETE SET NULL;
40 + END IF;
41 + END $$;
42 + """)
43 +
44 + # 2. Backfill catalogue_uuid from the item's category
45 + execute("""
46 + UPDATE #{p}phoenix_kit_cat_items AS i
47 + SET catalogue_uuid = c.catalogue_uuid
48 + FROM #{p}phoenix_kit_cat_categories AS c
49 + WHERE i.category_uuid = c.uuid
50 + AND i.catalogue_uuid IS NULL
51 + """)
52 +
53 + # 3. Backfill any remaining orphans (items with no category at all) into
54 + # the oldest non-deleted catalogue. In the pre-v95 world these items
55 + # showed up on every catalogue detail page as "global uncategorized";
56 + # pinning them to the first active catalogue keeps them visible and
57 + # behaves the same way in the common single-catalogue case.
58 + #
59 + # We filter out `status = 'deleted'` so we never land orphans inside a
60 + # trashed catalogue (which would immediately soft-delete them via the
61 + # normal cascade semantics). If no non-deleted catalogues exist, the
62 + # subquery returns NULL and nothing is updated — the items stay orphaned
63 + # until one does.
64 + execute("""
65 + UPDATE #{p}phoenix_kit_cat_items
66 + SET catalogue_uuid = (
67 + SELECT uuid FROM #{p}phoenix_kit_cat_catalogues
68 + WHERE status <> 'deleted'
69 + ORDER BY inserted_at ASC
70 + LIMIT 1
71 + )
72 + WHERE catalogue_uuid IS NULL
73 + """)
74 +
75 + # 4. Index on catalogue_uuid for per-catalogue queries, plus a composite
76 + # index on (catalogue_uuid, status) because every per-catalogue query
77 + # (`item_count_for_catalogue`, `list_items_for_catalogue`,
78 + # `item_counts_by_catalogue`, `search_items_in_catalogue`) filters on
79 + # both columns. The composite lets the planner satisfy the filter
80 + # without a separate status check.
81 + create_if_not_exists(index(:phoenix_kit_cat_items, [:catalogue_uuid], prefix: prefix))
82 +
83 + create_if_not_exists(
84 + index(:phoenix_kit_cat_items, [:catalogue_uuid, :status], prefix: prefix)
85 + )
86 +
87 + execute("COMMENT ON TABLE #{p}phoenix_kit IS '96'")
88 + end
89 +
90 + @doc """
91 + Rolls V96 back by dropping the `catalogue_uuid` column (and its indexes).
92 +
93 + **Lossy rollback:** items that were created *after* V96 as uncategorized
94 + (no category) have their catalogue linkage stored solely in
95 + `catalogue_uuid`. Dropping the column means those items can no longer
96 + be attributed to a catalogue — they'll become global orphans again
97 + (their pre-V96 shape). Back up before rolling back in production.
98 + """
99 + def down(opts) do
100 + prefix = Map.get(opts, :prefix, "public")
101 + p = prefix_str(prefix)
102 +
103 + drop_if_exists(index(:phoenix_kit_cat_items, [:catalogue_uuid, :status], prefix: prefix))
104 +
105 + drop_if_exists(index(:phoenix_kit_cat_items, [:catalogue_uuid], prefix: prefix))
106 +
107 + execute("ALTER TABLE #{p}phoenix_kit_cat_items DROP COLUMN IF EXISTS catalogue_uuid")
108 +
109 + execute("COMMENT ON TABLE #{p}phoenix_kit IS '95'")
110 + end
111 +
112 + defp prefix_str("public"), do: "public."
113 + defp prefix_str(prefix), do: "#{prefix}."
114 + end
  @@ -1,7 +1,7 @@
1 1 defmodule PhoenixKit.MixProject do
2 2 use Mix.Project
3 3
4 - @version "1.7.94"
4 + @version "1.7.95"
5 5 @description "A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more"
6 6 @source_url "https://github.com/BeamLabEU/phoenix_kit"