ultimate-jekyll-manager 1.0.2 → 1.0.4

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 (30) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/CLAUDE.md +64 -1
  3. package/TODO.md +13 -0
  4. package/dist/assets/css/pages/admin/calendar/index.scss +212 -18
  5. package/dist/assets/js/pages/admin/calendar/calendar-core.js +535 -95
  6. package/dist/assets/js/pages/admin/calendar/calendar-events.js +631 -124
  7. package/dist/assets/js/pages/admin/calendar/calendar-renderer.js +238 -69
  8. package/dist/assets/js/pages/admin/calendar/campaign-preview.js +100 -0
  9. package/dist/assets/js/pages/admin/calendar/index.js +3 -16
  10. package/dist/assets/js/pages/contact/index.js +5 -1
  11. package/dist/defaults/dist/_includes/admin/sections/sidebar.json +0 -34
  12. package/dist/defaults/dist/_includes/admin/sections/topbar.json +0 -34
  13. package/dist/defaults/dist/_includes/themes/classy/backend/sections/topbar.html +1 -72
  14. package/dist/defaults/dist/_includes/themes/classy/frontend/sections/nav.html +7 -140
  15. package/dist/defaults/dist/_includes/themes/classy/global/sections/account.html +72 -0
  16. package/dist/defaults/dist/_layouts/blueprint/admin/calendar/index.html +442 -159
  17. package/dist/defaults/src/_includes/backend/sections/topbar.json +0 -34
  18. package/dist/defaults/src/_includes/frontend/sections/nav.json +0 -34
  19. package/dist/defaults/src/_includes/global/sections/account.json +36 -0
  20. package/package.json +2 -1
  21. package/dist/assets/js/pages/admin/notifications/index.js +0 -53
  22. package/dist/assets/js/pages/admin/notifications/new/index.js +0 -492
  23. package/dist/defaults/dist/_layouts/blueprint/admin/newsletters/index.html +0 -59
  24. package/dist/defaults/dist/_layouts/blueprint/admin/newsletters/new.html +0 -46
  25. package/dist/defaults/dist/_layouts/blueprint/admin/notifications/index.html +0 -103
  26. package/dist/defaults/dist/_layouts/blueprint/admin/notifications/new.html +0 -399
  27. package/dist/defaults/dist/pages/admin/newsletters/index.html +0 -7
  28. package/dist/defaults/dist/pages/admin/newsletters/new.html +0 -7
  29. package/dist/defaults/dist/pages/admin/notifications/index.html +0 -7
  30. package/dist/defaults/dist/pages/admin/notifications/new.html +0 -7
@@ -1,59 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: themes/classy/admin/core/minimal
4
-
5
- ### THEME CONFIG ###
6
- theme:
7
- header:
8
- title:
9
- content: "Newsletters"
10
- icon: "envelope"
11
- breadcrumbs:
12
- items:
13
- - label: "Admin"
14
- href: "/admin"
15
- - label: "Marketing"
16
- - label: "Newsletters"
17
-
18
- ### REGULAR PAGES ###
19
- meta:
20
- title: "Newsletters - Admin"
21
- description: "Manage email newsletters"
22
- breadcrumb: "Newsletters"
23
- ---
24
-
25
- <!-- Page Header Actions -->
26
- <div class="row mb-4">
27
- <div class="col">
28
- <div class="d-flex justify-content-between align-items-center">
29
- <div>
30
- <p class="text-muted mb-0">Manage and send email newsletters to your subscribers</p>
31
- </div>
32
- <div>
33
- <a href="/admin/newsletters/new" class="btn btn-adaptive">
34
- {% uj_icon "plus", "fa-md me-2" %}
35
- Create Newsletter
36
- </a>
37
- </div>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <!-- Coming Soon -->
43
- <div class="card">
44
- <div class="card-body text-center py-5">
45
- <div class="mb-3">
46
- {% uj_icon "envelope", "fa-3xl text-muted" %}
47
- </div>
48
- <h5 class="mb-2">Newsletters coming soon</h5>
49
- <p class="text-muted mb-0">
50
- Email newsletter management will be available in a future update.
51
- <br>
52
- In the meantime, use <strong>Push Notifications</strong> to reach your subscribers.
53
- </p>
54
- <a href="/admin/notifications/new" class="btn btn-outline-adaptive mt-3">
55
- {% uj_icon "bell", "fa-md me-2" %}
56
- Send Push Notification
57
- </a>
58
- </div>
59
- </div>
@@ -1,46 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: themes/classy/admin/core/minimal
4
-
5
- ### THEME CONFIG ###
6
- theme:
7
- header:
8
- title:
9
- content: "Create Newsletter"
10
- icon: "envelope"
11
- breadcrumbs:
12
- items:
13
- - label: "Admin"
14
- href: "/admin"
15
- - label: "Marketing"
16
- - label: "Newsletters"
17
- href: "/admin/newsletters"
18
- - label: "Create Newsletter"
19
-
20
- ### REGULAR PAGES ###
21
- meta:
22
- title: "Create Newsletter - Admin"
23
- description: "Compose and send an email newsletter"
24
- breadcrumb: "Create Newsletter"
25
- ---
26
-
27
- <!-- Back Link -->
28
- <div class="mb-3">
29
- <a href="/admin/newsletters" class="text-decoration-none">
30
- {% uj_icon "arrow-left", "fa-sm me-2" %}
31
- Back to Newsletters
32
- </a>
33
- </div>
34
-
35
- <!-- Coming Soon -->
36
- <div class="card">
37
- <div class="card-body text-center py-5">
38
- <div class="mb-3">
39
- {% uj_icon "envelope", "fa-3xl text-muted" %}
40
- </div>
41
- <h5 class="mb-2">Newsletter composer coming soon</h5>
42
- <p class="text-muted mb-0">
43
- The ability to compose and send email newsletters will be available in a future update.
44
- </p>
45
- </div>
46
- </div>
@@ -1,103 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: themes/classy/admin/core/minimal
4
-
5
- ### THEME CONFIG ###
6
- theme:
7
- header:
8
- title:
9
- content: "Push Notifications"
10
- icon: "bell"
11
- breadcrumbs:
12
- items:
13
- - label: "Admin"
14
- href: "/admin"
15
- - label: "Marketing"
16
- - label: "Push Notifications"
17
-
18
- ### REGULAR PAGES ###
19
- meta:
20
- title: "Notifications - Admin"
21
- description: "Manage push notifications"
22
- breadcrumb: "Notifications"
23
- ---
24
-
25
- <!-- Page Header Actions -->
26
- <div class="row mb-4">
27
- <div class="col">
28
- <div class="d-flex justify-content-between align-items-center">
29
- <div>
30
- <p class="text-muted mb-0">Send push notifications to your subscriber network</p>
31
- </div>
32
- <div>
33
- <a href="/admin/notifications/new" class="btn btn-adaptive">
34
- {% uj_icon "plus", "fa-md me-2" %}
35
- Create Notification
36
- </a>
37
- </div>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <!-- Stats Cards -->
43
- <div class="row g-3 mb-4">
44
- <!-- Push Subscribers -->
45
- <div class="col-md-6">
46
- <div class="card h-100">
47
- <div class="card-body text-center">
48
- <div class="rounded-circle d-inline-flex align-items-center justify-content-center p-3 bg-primary bg-opacity-10 mx-auto mb-2">
49
- {% uj_icon "bell", "fa-xl text-primary" %}
50
- </div>
51
- <h6 class="text-muted mb-1">Push subscribers</h6>
52
- <h3 class="mb-0" id="stat-push-subscribers">
53
- <span class="spinner-border spinner-border-sm"></span>
54
- </h3>
55
- </div>
56
- </div>
57
- </div>
58
-
59
- <!-- Total Users -->
60
- <div class="col-md-6">
61
- <div class="card h-100">
62
- <div class="card-body text-center">
63
- <div class="rounded-circle d-inline-flex align-items-center justify-content-center p-3 bg-success bg-opacity-10 mx-auto mb-2">
64
- {% uj_icon "users", "fa-xl text-success" %}
65
- </div>
66
- <h6 class="text-muted mb-1">Total users</h6>
67
- <h3 class="mb-0" id="stat-total-users">
68
- <span class="spinner-border spinner-border-sm"></span>
69
- </h3>
70
- </div>
71
- </div>
72
- </div>
73
- </div>
74
-
75
- <!-- Send Notification CTA -->
76
- <div class="card mb-4">
77
- <div class="card-body text-center py-5">
78
- <div class="mb-3">
79
- {% uj_icon "paper-plane", "fa-3xl text-primary" %}
80
- </div>
81
- <h5 class="mb-2">Send a push notification</h5>
82
- <p class="text-muted mb-4">Compose and send a push notification to all subscribers in your network</p>
83
- <a href="/admin/notifications/new" class="btn btn-adaptive btn-lg">
84
- {% uj_icon "plus", "fa-md me-2" %}
85
- Create Notification
86
- </a>
87
- </div>
88
- </div>
89
-
90
- <!-- Info Alert -->
91
- <div class="alert alert-info mb-0">
92
- <div class="d-flex align-items-start">
93
- {% uj_icon "circle-info", "fa-md me-2 mt-1" %}
94
- <div>
95
- <strong>About push notifications</strong>
96
- <p class="mb-0 mt-1 small">
97
- Push notifications are delivered in real-time via Firebase Cloud Messaging (FCM).
98
- Users subscribe to notifications through their browser, and delivery is managed by FCM.
99
- Notification history is not stored — each notification is sent once and delivered directly to subscriber devices.
100
- </p>
101
- </div>
102
- </div>
103
- </div>
@@ -1,399 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: themes/classy/admin/core/minimal
4
-
5
- ### THEME CONFIG ###
6
- theme:
7
- header:
8
- title:
9
- content: "Create Notification"
10
- icon: "bell-plus"
11
- breadcrumbs:
12
- items:
13
- - label: "Admin"
14
- href: "/admin"
15
- - label: "Marketing"
16
- - label: "Notifications"
17
- href: "/admin/notifications"
18
- - label: "Create Notification"
19
-
20
- ### REGULAR PAGES ###
21
- meta:
22
- title: "Create Notification - Admin"
23
- description: "Create and send a new notification"
24
- breadcrumb: "Create Notification"
25
-
26
- ### ICON PRE-RENDERING ###
27
- prerender_icons:
28
- - name: "mobile"
29
- - name: "envelope"
30
- - name: "comment-sms"
31
- - name: "bell"
32
- ---
33
-
34
- <!-- Success/Error Alerts -->
35
- <div class="notification-success-alert alert alert-success d-none" role="alert">
36
- {% uj_icon "circle-check", "fa-sm" %} <span class="alert-message">Notification sent successfully!</span>
37
- </div>
38
-
39
- <div class="notification-error-alert alert alert-danger d-none" role="alert">
40
- {% uj_icon "triangle-exclamation", "fa-sm" %} <span class="alert-message">An error occurred</span>
41
- </div>
42
-
43
- <!-- Notification Creation Form -->
44
- <div class="row">
45
- <div class="col-lg-8">
46
- <div class="card">
47
- <div class="card-body">
48
- <form id="notification-form" novalidate onsubmit="return false">
49
- <!-- Notification Content -->
50
- <h5 class="mb-3">
51
- Notification Content
52
- </h5>
53
-
54
- <div class="mb-3">
55
- <label for="notification-icon" class="form-label">
56
- Icon URL <span class="text-danger">*</span>
57
- </label>
58
- <input type="url"
59
- class="form-control"
60
- id="notification-icon"
61
- name="notification.icon"
62
- placeholder="https://example.com/icon.png"
63
- value="{{ site.meta.image }}"
64
- pattern="https?://.+"
65
- title="URL must start with http:// or https://"
66
- required>
67
- <div class="invalid-feedback">Please provide a valid icon URL</div>
68
- </div>
69
-
70
- <div class="mb-3">
71
- <label for="notification-title" class="form-label">
72
- Title <span class="text-danger">*</span>
73
- </label>
74
- <input type="text"
75
- class="form-control"
76
- id="notification-title"
77
- name="notification.title"
78
- placeholder="Enter notification title"
79
- minlength="3"
80
- maxlength="60"
81
- required>
82
- <small class="text-muted">
83
- <span id="title-char-count">0 / 60</span> characters
84
- </small>
85
- <div class="invalid-feedback">Title is required (3-60 characters)</div>
86
- </div>
87
-
88
- <div class="mb-3">
89
- <label for="notification-body" class="form-label">
90
- Body <span class="text-danger">*</span>
91
- </label>
92
- <textarea class="form-control"
93
- id="notification-body"
94
- name="notification.body"
95
- rows="3"
96
- placeholder="Enter notification message"
97
- minlength="10"
98
- maxlength="200"
99
- required></textarea>
100
- <small class="text-muted">
101
- <span id="body-char-count">0 / 200</span> characters
102
- </small>
103
- <div class="invalid-feedback">Body is required (10-200 characters)</div>
104
- </div>
105
-
106
- <div class="mb-3">
107
- <label for="notification-url" class="form-label">
108
- Click Action URL <span class="text-danger">*</span>
109
- </label>
110
- <input type="url"
111
- class="form-control"
112
- id="notification-url"
113
- name="notification.clickAction"
114
- placeholder="https://example.com/landing"
115
- value="{{ site.url }}"
116
- pattern="https?://.+"
117
- title="URL must start with http:// or https://"
118
- required>
119
- <small class="text-muted">Where users go when clicking the notification</small>
120
- <div class="invalid-feedback">Please provide a valid URL</div>
121
- </div>
122
-
123
- {% comment %}
124
- <!-- Delivery Channels - NOT CURRENTLY SUPPORTED BY BACKEND -->
125
- <h5 class="mb-3 mt-4">
126
- {% uj_icon "send", "fa-md me-2 text-info" %}
127
- Delivery Channels
128
- </h5>
129
-
130
- <div class="row">
131
- <div class="col-6 col-md-3 mb-3">
132
- <div class="form-check">
133
- <input class="form-check-input"
134
- type="checkbox"
135
- id="channel-push"
136
- name="channels.push.enabled"
137
- checked>
138
- <label class="form-check-label" for="channel-push">
139
- {% uj_icon "mobile", "fa-sm me-1 text-primary" %}
140
- Push
141
- </label>
142
- </div>
143
- </div>
144
- <div class="col-6 col-md-3 mb-3">
145
- <div class="form-check">
146
- <input class="form-check-input"
147
- type="checkbox"
148
- id="channel-email"
149
- name="channels.email.enabled">
150
- <label class="form-check-label" for="channel-email">
151
- {% uj_icon "envelope", "fa-sm me-1 text-info" %}
152
- Email
153
- </label>
154
- </div>
155
- </div>
156
- <div class="col-6 col-md-3 mb-3">
157
- <div class="form-check">
158
- <input class="form-check-input"
159
- type="checkbox"
160
- id="channel-sms"
161
- name="channels.sms.enabled">
162
- <label class="form-check-label" for="channel-sms">
163
- {% uj_icon "comment-sms", "fa-sm me-1 text-success" %}
164
- SMS
165
- </label>
166
- </div>
167
- </div>
168
- <div class="col-6 col-md-3 mb-3">
169
- <div class="form-check">
170
- <input class="form-check-input"
171
- type="checkbox"
172
- id="channel-inapp"
173
- name="channels.inapp.enabled">
174
- <label class="form-check-label" for="channel-inapp">
175
- {% uj_icon "bell", "fa-sm me-1 text-warning" %}
176
- In-App
177
- </label>
178
- </div>
179
- </div>
180
- </div>
181
-
182
- <!-- Channel-specific settings (hidden by default) -->
183
- <div id="push-channel-settings" class="channel-settings">
184
- <!-- Push-specific options can go here -->
185
- </div>
186
-
187
- <div id="email-channel-settings" class="channel-settings d-none">
188
- <div class="mb-3">
189
- <label class="form-label">Email Subject</label>
190
- <input type="text" class="form-control" name="channels.email.subject">
191
- </div>
192
- </div>
193
- {% endcomment %}
194
-
195
- {% comment %}
196
- <!-- Target Audience - NOT CURRENTLY SUPPORTED BY BACKEND -->
197
- <h5 class="mb-3 mt-4">
198
- {% uj_icon "people", "fa-md me-2 text-success" %}
199
- Target Audience
200
- </h5>
201
-
202
- <div class="mb-3">
203
- <div class="form-check">
204
- <input class="form-check-input"
205
- type="radio"
206
- name="audience.type"
207
- id="audience-all"
208
- value="all"
209
- checked>
210
- <label class="form-check-label" for="audience-all">
211
- All Users
212
- </label>
213
- </div>
214
- <div class="form-check mt-2">
215
- <input class="form-check-input"
216
- type="radio"
217
- name="audience.type"
218
- id="audience-segment"
219
- value="segment">
220
- <label class="form-check-label" for="audience-segment">
221
- User Segment
222
- </label>
223
- </div>
224
- <div class="form-check mt-2">
225
- <input class="form-check-input"
226
- type="radio"
227
- name="audience.type"
228
- id="audience-test"
229
- value="test">
230
- <label class="form-check-label" for="audience-test">
231
- Test Users Only
232
- </label>
233
- </div>
234
- </div>
235
- {% endcomment %}
236
-
237
- <!-- Schedule -->
238
- <h5 class="mb-3 mt-4">
239
- Schedule
240
- </h5>
241
-
242
- <div class="mb-3">
243
- <span class="form-label d-block">Auto-submit Date & Time</span>
244
- <small class="d-block text-muted mb-2">
245
- Leave empty to send immediately, or schedule for later
246
- </small>
247
- <div class="row">
248
- <div class="col-md-5">
249
- <label for="schedule-date" class="visually-hidden">Schedule date</label>
250
- <input type="date"
251
- class="form-control"
252
- name="schedule.date"
253
- id="schedule-date">
254
- </div>
255
- <div class="col-md-4">
256
- <label for="schedule-time" class="visually-hidden">Schedule time</label>
257
- <input type="time"
258
- class="form-control"
259
- name="schedule.time"
260
- id="schedule-time">
261
- </div>
262
- <div class="col-md-3">
263
- <button type="button"
264
- class="btn btn-sm btn-outline-primary w-100 btn-set-auto-submit">
265
- Tomorrow 10am
266
- </button>
267
- </div>
268
- </div>
269
- <div class="mt-2">
270
- <button type="button"
271
- class="btn btn-sm btn-outline-adaptive btn-clear-auto-submit">
272
- Clear Schedule
273
- </button>
274
- <span id="auto-submit-countdown" class="ms-2 text-primary d-none"></span>
275
- </div>
276
- </div>
277
-
278
- <!-- Warning Message -->
279
- <div class="alert alert-warning mt-4" role="alert">
280
- <h6 class="alert-heading">
281
- {% uj_icon "exclamation-triangle", "fa-sm me-1" %}
282
- Sending to Notification Network
283
- </h6>
284
- <p class="mb-0">
285
- You are about to send this notification to
286
- <strong class="notification-user-count">0 / 0</strong> users.
287
- Please review carefully before submitting.
288
- </p>
289
- </div>
290
-
291
- <!-- Submit Button -->
292
- <div class="d-grid gap-2">
293
- <button type="submit" class="btn btn-primary btn-lg">
294
- {% uj_icon "paper-plane", "fa-md me-2" %}
295
- <span class="button-text">Send Notification</span>
296
- </button>
297
- </div>
298
- </form>
299
- </div>
300
- </div>
301
- </div>
302
-
303
- <!-- Preview Panel -->
304
- <div class="col-lg-4">
305
- <div class="card sticky-top mt-3 mt-lg-0">
306
- <div class="card-header bg-primary text-white">
307
- <h6 class="mb-0">
308
- Live Preview
309
- </h6>
310
- </div>
311
- <div class="card-body">
312
- <!-- Mobile Device Frame -->
313
- <div class="mobile-preview-frame border rounded p-2 bg-dark">
314
- <div class="mobile-screen rounded p-2">
315
- <!-- Status Bar -->
316
- <div class="status-bar d-flex justify-content-between small text-light text-opacity-50 mb-2">
317
- <span>9:41 AM</span>
318
- <span>
319
- {% uj_icon "wifi", "fa-sm me-1" %}
320
- {% uj_icon "battery-full", "fa-sm" %}
321
- </span>
322
- </div>
323
-
324
- <!-- Notification Preview (clickable) -->
325
- <div class="notification-preview bg-body-secondary rounded p-3 shadow-sm"
326
- id="notification-preview-clickable"
327
- role="button"
328
- style="cursor: pointer;"
329
- title="Click to test the notification link">
330
- <div class="d-flex align-items-start">
331
- <img src="{{ site.uj.placeholder.src }}"
332
- class="rounded me-2"
333
- id="preview-icon"
334
- width="50"
335
- height="50">
336
- <div class="flex-fill">
337
- <div class="fw-semibold small" id="preview-title">
338
- Notification Title
339
- </div>
340
- <div class="small text-muted mt-1" id="preview-body">
341
- This is what your notification body will look like...
342
- </div>
343
- <div class="small text-muted mt-1">
344
- {% uj_icon "clock", "fa-xs me-1" %}
345
- <span id="preview-time">Now</span>
346
- </div>
347
- </div>
348
- </div>
349
- </div>
350
-
351
- <!-- Other notifications -->
352
- <div class="mt-2 opacity-50">
353
- <div class="bg-body-secondary rounded p-2 small">
354
- <div class="text-muted">Earlier notifications...</div>
355
- </div>
356
- </div>
357
- </div>
358
- </div>
359
-
360
- <!-- Stats -->
361
- <div class="mt-4">
362
- <h6 class="text-muted small mb-3">ESTIMATED REACH</h6>
363
-
364
- <div class="mb-2">
365
- <div class="d-flex justify-content-between align-items-center">
366
- <span>
367
- {% uj_icon "people", "fa-sm me-1" %}
368
- Target Users
369
- </span>
370
- <span class="badge bg-primary notification-user-count">0 / 0</span>
371
- </div>
372
- </div>
373
-
374
- <div class="progress" style="height: 4px;">
375
- <div class="progress-bar bg-primary" role="progressbar" style="width: 100%"></div>
376
- </div>
377
-
378
- <small class="text-muted d-block mt-2">
379
- Final count may vary based on user preferences and device availability
380
- </small>
381
- </div>
382
-
383
- {% comment %}
384
- <!-- Channel Status - NOT CURRENTLY SUPPORTED -->
385
- <div class="mt-4">
386
- <h6 class="text-muted small mb-2">ACTIVE CHANNELS</h6>
387
- <div class="d-flex gap-2 flex-wrap">
388
- <span class="badge bg-primary">
389
- {% uj_icon "mobile", "fa-xs me-1" %}
390
- Push
391
- </span>
392
- <!-- Additional channel badges will be shown dynamically -->
393
- </div>
394
- </div>
395
- {% endcomment %}
396
- </div>
397
- </div>
398
- </div>
399
- </div>
@@ -1,7 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: blueprint/admin/newsletters/index
4
- permalink: /admin/newsletters
5
-
6
- ### REGULAR PAGES ###
7
- ---
@@ -1,7 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: blueprint/admin/newsletters/new
4
- permalink: /admin/newsletters/new
5
-
6
- ### REGULAR PAGES ###
7
- ---
@@ -1,7 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: blueprint/admin/notifications/index
4
- permalink: /admin/notifications
5
-
6
- ### REGULAR PAGES ###
7
- ---
@@ -1,7 +0,0 @@
1
- ---
2
- ### ALL PAGES ###
3
- layout: blueprint/admin/notifications/new
4
- permalink: /admin/notifications/new
5
-
6
- ### REGULAR PAGES ###
7
- ---