ultimate-jekyll-manager 0.0.124 → 0.0.126

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.
@@ -630,11 +630,20 @@ export class FormManager {
630
630
  });
631
631
  }
632
632
 
633
+ /**
634
+ * Get all submit buttons in the form
635
+ * Note: Uses button.type property instead of [type="submit"] selector
636
+ * because HTML minifiers may strip the attribute (it's the default)
637
+ */
638
+ _getSubmitButtons() {
639
+ return Array.from(this.$form.querySelectorAll('button')).filter($btn => $btn.type === 'submit');
640
+ }
641
+
633
642
  /**
634
643
  * Show/hide spinner on submit buttons
635
644
  */
636
645
  _showSpinner(show) {
637
- this.$form.querySelectorAll('button[type="submit"]').forEach(($btn) => {
646
+ this._getSubmitButtons().forEach(($btn) => {
638
647
  if (show) {
639
648
  // Store original content
640
649
  $btn._originalHTML = $btn.innerHTML;
@@ -649,7 +658,7 @@ export class FormManager {
649
658
  * Show submitted text on submit buttons (when allowResubmit: false)
650
659
  */
651
660
  _showSubmittedText() {
652
- this.$form.querySelectorAll('button[type="submit"]').forEach(($btn) => {
661
+ this._getSubmitButtons().forEach(($btn) => {
653
662
  const $buttonText = $btn.querySelector('.button-text');
654
663
  if ($buttonText) {
655
664
  $buttonText.textContent = this.config.submittedText;
@@ -57,8 +57,7 @@ function setupResetApiKeyForm() {
57
57
 
58
58
  formManager.on('submit', async () => {
59
59
  // 1ms wait for dialog to appear properly
60
- // await new Promise(resolve => setTimeout(resolve, 1));
61
- await new Promise(resolve => setTimeout(resolve, 1000));
60
+ await new Promise(resolve => setTimeout(resolve, 1));
62
61
 
63
62
  // Show confirmation dialog
64
63
  if (!confirm('Are you sure you want to reset your API key? This will invalidate your current key and any applications using it will stop working.')) {
@@ -1,5 +1,6 @@
1
1
  // Import the theme entry point
2
2
  import bootstrap from '../bootstrap/js/index.umd.js';
3
+ import { ready as domReady } from 'web-manager/modules/dom.js';
3
4
 
4
5
  // Make Bootstrap available globally
5
6
  window.bootstrap = bootstrap;
@@ -15,15 +16,15 @@ window.bootstrap = bootstrap;
15
16
  import setupNavbarScroll from './js/navbar-scroll.js';
16
17
  // Import logo scroll functionality
17
18
  import setupLogoScroll from './js/logo-scroll.js';
19
+ // Import tooltip initialization
20
+ import initializeTooltips from './js/initialize-tooltips.js';
18
21
 
19
- // Initialize navbar scroll effect when DOM is ready
20
- if (document.readyState === 'loading') {
21
- document.addEventListener('DOMContentLoaded', () => {
22
- setupNavbarScroll();
23
- setupLogoScroll();
24
- });
25
- } else {
22
+ // Initialize theme components when DOM is ready
23
+ domReady().then(() => {
24
+ // Classy Theme Initializations
26
25
  setupNavbarScroll();
27
26
  setupLogoScroll();
28
- }
29
27
 
28
+ // Generic Bootstrap initializations
29
+ initializeTooltips();
30
+ });
@@ -1,57 +1,6 @@
1
1
  // Classy Utility Classes
2
2
  // Custom helper classes and theme-specific utilities
3
3
 
4
- // ============================================
5
- // Section Spacing
6
- // ============================================
7
-
8
- // Section Spacing
9
- // .section {
10
- // padding: $classy-spacing-4xl 0;
11
-
12
- // &.section-sm {
13
- // padding: $classy-spacing-2xl 0;
14
- // }
15
-
16
- // &.section-lg {
17
- // padding: 6rem 0;
18
- // }
19
-
20
- // &.section-xl {
21
- // padding: 8rem 0;
22
- // }
23
- // }
24
-
25
- // Hero Sections
26
- // .hero {
27
- // padding: 6rem 0;
28
- // position: relative;
29
- // overflow: hidden;
30
-
31
- // &.hero-gradient {
32
- // background: $classy-gradient-primary;
33
- // }
34
-
35
- // &.hero-pattern {
36
- // &::before {
37
- // content: "";
38
- // position: absolute;
39
- // top: 0;
40
- // left: 0;
41
- // right: 0;
42
- // bottom: 0;
43
- // background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%235B47FB' fill-opacity='0.1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
44
- // opacity: 0.1;
45
- // z-index: 0;
46
- // }
47
- // }
48
-
49
- // .hero-content {
50
- // position: relative;
51
- // z-index: 1;
52
- // }
53
- // }
54
-
55
4
  // ============================================
56
5
  // Shadow Utilities
57
6
  // ============================================
@@ -68,10 +17,12 @@
68
17
  // ============================================
69
18
  // Cursor Utilities
70
19
  // ============================================
71
- // TODO: cursor-move, cursor-grab
72
-
73
- // .cursor-pointer { cursor: pointer !important; }
74
- // .cursor-default { cursor: default !important; }
20
+ .cursor-default { cursor: default !important; }
21
+ .cursor-pointer { cursor: pointer !important; }
22
+ .cursor-help { cursor: help !important; }
23
+ .cursor-move { cursor: move !important; }
24
+ .cursor-grab { cursor: grab !important; }
25
+ .cursor-not-allowed { cursor: not-allowed !important; }
26
+ .cursor-crosshair { cursor: crosshair !important; }
75
27
  // .cursor-wait { cursor: wait !important; }
76
- // .cursor-not-allowed { cursor: not-allowed !important; }
77
28
 
@@ -39,3 +39,15 @@
39
39
  [data-bs-theme="dark"] .text-adaptive {
40
40
  @extend .text-dark;
41
41
  }
42
+
43
+ // ============================================
44
+ // Text Decoration Utilities
45
+ // ============================================
46
+ .text-decoration-dotted {
47
+ text-decoration-style: dotted !important;
48
+ }
49
+
50
+ .text-decoration-dashed {
51
+ text-decoration-style: dashed !important;
52
+ }
53
+
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Initialize Bootstrap Tooltips
3
+ * Finds all elements with data-bs-toggle="tooltip" and initializes them
4
+ */
5
+ export default function initializeTooltips() {
6
+ const $tooltipTriggers = document.querySelectorAll('[data-bs-toggle="tooltip"]');
7
+
8
+ // If no tooltips found, exit early
9
+ if ($tooltipTriggers.length === 0) {
10
+ return;
11
+ }
12
+
13
+ // Log the number of tooltips being initialized
14
+ console.log(`Initializing ${$tooltipTriggers.length} tooltips`);
15
+
16
+ // Initialize each tooltip
17
+ $tooltipTriggers.forEach(($el) => {
18
+ new bootstrap.Tooltip($el);
19
+ });
20
+ }
@@ -7,7 +7,7 @@ layout: themes/[ site.theme.id ]/frontend/core/base
7
7
  hero:
8
8
  headline: "Get in"
9
9
  headline_accent: "touch"
10
- subheadline: "We're here to help! Reach out to our friendly support team and we'll get back to you as soon as possible."
10
+ subheadline: "Have questions about {{ site.brand.name }}? Our support team is here to help you."
11
11
 
12
12
  # Contact Methods Section
13
13
  contact_methods:
@@ -11,7 +11,7 @@ theme:
11
11
  # Hero Section
12
12
  hero:
13
13
  tagline: "Introducing {{ site.brand.name }}"
14
- headline: "The #1 platform for business"
14
+ headline: "The #1 platform <br> for business"
15
15
  headline_accent: "success"
16
16
  description: "AI automation for modern businesses made simple."
17
17
  primary_button:
@@ -15,11 +15,24 @@ pricing:
15
15
  enabled: true
16
16
  feature_id: "credits" # Which feature to calculate price per unit for
17
17
  label: "credit" # What to call the unit (e.g., "credit", "user", "GB")
18
+ definitions:
19
+ - id: "credits"
20
+ definition: "Credits are used to generate content. Each generation consumes 1 credit."
21
+ - id: "exports"
22
+ definition: "Export your creations in various formats. Watermarked exports include a small logo."
23
+ - id: "api_access"
24
+ definition: "Access our REST API to integrate with your own applications and workflows."
25
+ - id: "priority_support"
26
+ definition: "Get faster response times and dedicated support from our team."
27
+ - id: "team_collaboration"
28
+ definition: "Invite team members to collaborate on projects and share resources."
29
+ - id: "custom_branding"
30
+ definition: "Remove our branding and add your own logo to exports."
18
31
  plans:
19
32
  - id: "basic"
20
33
  name: "Basic"
21
34
  tagline: "best for getting started"
22
- url: "/download" # URL for free plan signup
35
+ url: "/dashboard" # URL for free plan signup
23
36
  pricing:
24
37
  monthly: 0
25
38
  annually: 0
@@ -36,6 +49,7 @@ pricing:
36
49
  - id: "starter"
37
50
  name: "Starter"
38
51
  tagline: "best for individuals"
52
+ url: null
39
53
  pricing:
40
54
  monthly: 28
41
55
  annually: 276 # Total annual price (~20% off monthly)
@@ -60,6 +74,7 @@ pricing:
60
74
  - id: "pro"
61
75
  name: "Pro"
62
76
  tagline: "best for small businesses"
77
+ url: null
63
78
  popular: true
64
79
  pricing:
65
80
  monthly: 50
@@ -77,6 +92,7 @@ pricing:
77
92
  - id: "max"
78
93
  name: "Max"
79
94
  tagline: "best for growing businesses"
95
+ url: null
80
96
  pricing:
81
97
  monthly: 100
82
98
  annually: 960 # Total annual price (20% off monthly)
@@ -352,24 +368,27 @@ faqs:
352
368
 
353
369
  <!-- Button -->
354
370
  <div class="d-grid mb-3">
355
- {% if plan.id == "basic" %}
356
- <a href="{{ plan.url | default: '/account' }}" class="btn btn-adaptive btn-md fw-semibold px-2 fs-5">
357
- <!-- Get started for free -->
358
- Get Started
359
- </a>
371
+ {% if plan.popular %}
372
+ {% assign btn_style = "btn-gradient-rainbow gradient-animated" %}
360
373
  {% else %}
361
- {% if plan.popular %}
362
- {% assign btn_style = "btn-gradient-rainbow gradient-animated" %}
363
- {% else %}
364
- {% assign btn_style = "btn-primary" %}
365
- {% endif %}
366
374
  {% assign btn_style = "btn-primary" %}
375
+ {% endif %}
376
+ {% assign btn_style = "btn-primary" %}
377
+
378
+ {% iftruthy plan.url %}
379
+ <a href="{{ plan.url }}" class="btn {% if plan.pricing.monthly == 0 %}btn-adaptive{% else %}{{ btn_style }}{% endif %} btn-md fw-semibold px-2 fs-5">
380
+ {% if plan.pricing.monthly == 0 %}
381
+ Get Started
382
+ {% else %}
383
+ Get Free Trial
384
+ {% endif %}
385
+ </a>
386
+ {% endiftruthy %}
387
+ {% iffalsy plan.url %}
367
388
  <button class="btn {{ btn_style }} btn-md fw-semibold px-2 fs-5" data-plan-id="{{ plan.id }}">
368
- <!-- Try {{ plan.name }} for 14 days -->
369
- <!-- Try free for 14 days -->
370
389
  Get Free Trial
371
390
  </button>
372
- {% endif %}
391
+ {% endiffalsy %}
373
392
  </div>
374
393
 
375
394
  <!-- Billing info -->
@@ -391,14 +410,27 @@ faqs:
391
410
  <ul class="list-unstyled mb-3">
392
411
  {% for feature in plan.features %}
393
412
  {% if common_feature_ids contains feature.id %}
413
+ {% assign feature_definition = nil %}
414
+ {% for def in page.resolved.pricing.definitions %}
415
+ {% if def.id == feature.id %}
416
+ {% assign feature_definition = def.definition %}
417
+ {% break %}
418
+ {% endif %}
419
+ {% endfor %}
394
420
  <li class="d-flex align-items-start mb-2">
395
421
  <span class="me-3">{% uj_icon feature.icon, "fa-md" %}</span>
396
422
  <span>
397
423
  {% if feature.value == "Unlimited" %}
398
- Unlimited {{ feature.name }}
424
+ Unlimited
399
425
  {% else %}
400
- {{ feature.value | uj_commaify }} {{ feature.name }}
426
+ {{ feature.value | uj_commaify }}
401
427
  {% endif %}
428
+ {% iftruthy feature_definition %}
429
+ <span class="text-decoration-underline text-decoration-dotted cursor-help" data-bs-toggle="tooltip" data-bs-title="{{ feature_definition }}">{{ feature.name }}</span>
430
+ {% endiftruthy %}
431
+ {% iffalsy feature_definition %}
432
+ {{ feature.name }}
433
+ {% endiffalsy %}
402
434
  </span>
403
435
  </li>
404
436
  {% endif %}
@@ -435,16 +467,29 @@ faqs:
435
467
  <ul class="list-unstyled mb-0">
436
468
  {% for feature in plan.features %}
437
469
  {% unless common_feature_ids contains feature.id %}
470
+ {% assign feature_definition = nil %}
471
+ {% for def in page.resolved.pricing.definitions %}
472
+ {% if def.id == feature.id %}
473
+ {% assign feature_definition = def.definition %}
474
+ {% break %}
475
+ {% endif %}
476
+ {% endfor %}
438
477
  <li class="d-flex align-items-start mb-2 {% if forloop.last %}mb-0{% endif %}">
439
478
  <span class="me-3">{% uj_icon feature.icon, "fa-md" %}</span>
440
479
  <span>
441
480
  {% if feature.value == "24/7" %}
442
- {{ feature.value }} {{ feature.name }}
481
+ {{ feature.value }}
443
482
  {% elsif feature.value == "Included" or feature.value == "Available" or feature.value == "Full" %}
444
- {{ feature.name }}
483
+ <!-- No prefix for these values -->
445
484
  {% else %}
446
- {{ feature.value | uj_commaify }} {{ feature.name }}
485
+ {{ feature.value | uj_commaify }}
447
486
  {% endif %}
487
+ {% iftruthy feature_definition %}
488
+ <span class="text-decoration-underline text-decoration-dotted cursor-help" data-bs-toggle="tooltip" data-bs-title="{{ feature_definition }}">{{ feature.name }}</span>
489
+ {% endiftruthy %}
490
+ {% iffalsy feature_definition %}
491
+ {{ feature.name }}
492
+ {% endiffalsy %}
448
493
  </span>
449
494
  </li>
450
495
  {% endunless %}
@@ -541,8 +586,22 @@ faqs:
541
586
  </thead>
542
587
  <tbody>
543
588
  {% for feature_def in all_features %}
589
+ {% assign table_feature_definition = nil %}
590
+ {% for def in page.resolved.pricing.definitions %}
591
+ {% if def.id == feature_def.id %}
592
+ {% assign table_feature_definition = def.definition %}
593
+ {% break %}
594
+ {% endif %}
595
+ {% endfor %}
544
596
  <tr>
545
- <th scope="row">{{ feature_def.name }}</th>
597
+ <th scope="row">
598
+ {% iftruthy table_feature_definition %}
599
+ <span class="text-decoration-underline text-decoration-dotted cursor-help" data-bs-toggle="tooltip" data-bs-title="{{ table_feature_definition }}">{{ feature_def.name }}</span>
600
+ {% endiftruthy %}
601
+ {% iffalsy table_feature_definition %}
602
+ {{ feature_def.name }}
603
+ {% endiffalsy %}
604
+ </th>
546
605
  {% for plan in page.resolved.pricing.plans %}
547
606
  <td>
548
607
  {% assign has_feature = false %}
@@ -1272,6 +1272,216 @@ meta:
1272
1272
  </div>
1273
1273
  </section>
1274
1274
 
1275
+ <!-- Cursor Utilities -->
1276
+ <section>
1277
+ <h2 class="border-bottom pb-2 mb-4">Cursor Utilities</h2>
1278
+ <p class="text-muted mb-4">Test all CSS cursor classes. Hover over each box to see the cursor. If the cursor doesn't change, that class needs to be added to the theme utilities.</p>
1279
+
1280
+ <h3 class="mb-3">General</h3>
1281
+ <div class="row g-3 mb-4">
1282
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1283
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-auto">
1284
+ <code>.cursor-auto</code>
1285
+ </div>
1286
+ </div>
1287
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1288
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-default">
1289
+ <code>.cursor-default</code>
1290
+ </div>
1291
+ </div>
1292
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1293
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-none">
1294
+ <code>.cursor-none</code>
1295
+ </div>
1296
+ </div>
1297
+ </div>
1298
+
1299
+ <h3 class="mb-3">Links & Status</h3>
1300
+ <div class="row g-3 mb-4">
1301
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1302
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-context-menu">
1303
+ <code>.cursor-context-menu</code>
1304
+ </div>
1305
+ </div>
1306
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1307
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-help">
1308
+ <code>.cursor-help</code>
1309
+ </div>
1310
+ </div>
1311
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1312
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-pointer">
1313
+ <code>.cursor-pointer</code>
1314
+ </div>
1315
+ </div>
1316
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1317
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-progress">
1318
+ <code>.cursor-progress</code>
1319
+ </div>
1320
+ </div>
1321
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1322
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-wait">
1323
+ <code>.cursor-wait</code>
1324
+ </div>
1325
+ </div>
1326
+ </div>
1327
+
1328
+ <h3 class="mb-3">Selection</h3>
1329
+ <div class="row g-3 mb-4">
1330
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1331
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-cell">
1332
+ <code>.cursor-cell</code>
1333
+ </div>
1334
+ </div>
1335
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1336
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-crosshair">
1337
+ <code>.cursor-crosshair</code>
1338
+ </div>
1339
+ </div>
1340
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1341
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-text">
1342
+ <code>.cursor-text</code>
1343
+ </div>
1344
+ </div>
1345
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1346
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-vertical-text">
1347
+ <code>.cursor-vertical-text</code>
1348
+ </div>
1349
+ </div>
1350
+ </div>
1351
+
1352
+ <h3 class="mb-3">Drag & Drop</h3>
1353
+ <div class="row g-3 mb-4">
1354
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1355
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-alias">
1356
+ <code>.cursor-alias</code>
1357
+ </div>
1358
+ </div>
1359
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1360
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-copy">
1361
+ <code>.cursor-copy</code>
1362
+ </div>
1363
+ </div>
1364
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1365
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-move">
1366
+ <code>.cursor-move</code>
1367
+ </div>
1368
+ </div>
1369
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1370
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-no-drop">
1371
+ <code>.cursor-no-drop</code>
1372
+ </div>
1373
+ </div>
1374
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1375
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-not-allowed">
1376
+ <code>.cursor-not-allowed</code>
1377
+ </div>
1378
+ </div>
1379
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1380
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-grab">
1381
+ <code>.cursor-grab</code>
1382
+ </div>
1383
+ </div>
1384
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1385
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-grabbing">
1386
+ <code>.cursor-grabbing</code>
1387
+ </div>
1388
+ </div>
1389
+ </div>
1390
+
1391
+ <h3 class="mb-3">Resizing & Scrolling</h3>
1392
+ <div class="row g-3 mb-4">
1393
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1394
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-all-scroll">
1395
+ <code>.cursor-all-scroll</code>
1396
+ </div>
1397
+ </div>
1398
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1399
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-col-resize">
1400
+ <code>.cursor-col-resize</code>
1401
+ </div>
1402
+ </div>
1403
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1404
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-row-resize">
1405
+ <code>.cursor-row-resize</code>
1406
+ </div>
1407
+ </div>
1408
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1409
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-n-resize">
1410
+ <code>.cursor-n-resize</code>
1411
+ </div>
1412
+ </div>
1413
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1414
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-e-resize">
1415
+ <code>.cursor-e-resize</code>
1416
+ </div>
1417
+ </div>
1418
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1419
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-s-resize">
1420
+ <code>.cursor-s-resize</code>
1421
+ </div>
1422
+ </div>
1423
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1424
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-w-resize">
1425
+ <code>.cursor-w-resize</code>
1426
+ </div>
1427
+ </div>
1428
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1429
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-ne-resize">
1430
+ <code>.cursor-ne-resize</code>
1431
+ </div>
1432
+ </div>
1433
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1434
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-nw-resize">
1435
+ <code>.cursor-nw-resize</code>
1436
+ </div>
1437
+ </div>
1438
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1439
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-se-resize">
1440
+ <code>.cursor-se-resize</code>
1441
+ </div>
1442
+ </div>
1443
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1444
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-sw-resize">
1445
+ <code>.cursor-sw-resize</code>
1446
+ </div>
1447
+ </div>
1448
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1449
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-ew-resize">
1450
+ <code>.cursor-ew-resize</code>
1451
+ </div>
1452
+ </div>
1453
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1454
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-ns-resize">
1455
+ <code>.cursor-ns-resize</code>
1456
+ </div>
1457
+ </div>
1458
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1459
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-nesw-resize">
1460
+ <code>.cursor-nesw-resize</code>
1461
+ </div>
1462
+ </div>
1463
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1464
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-nwse-resize">
1465
+ <code>.cursor-nwse-resize</code>
1466
+ </div>
1467
+ </div>
1468
+ </div>
1469
+
1470
+ <h3 class="mb-3">Zooming</h3>
1471
+ <div class="row g-3">
1472
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1473
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-zoom-in">
1474
+ <code>.cursor-zoom-in</code>
1475
+ </div>
1476
+ </div>
1477
+ <div class="col-6 col-md-4 col-lg-3 col-xl-2">
1478
+ <div class="p-3 bg-body-tertiary border rounded text-center cursor-zoom-out">
1479
+ <code>.cursor-zoom-out</code>
1480
+ </div>
1481
+ </div>
1482
+ </div>
1483
+ </section>
1484
+
1275
1485
  <!-- Grid -->
1276
1486
  <section>
1277
1487
  <h2 class="border-bottom pb-2 mb-4">Grid System</h2>
@@ -1542,3 +1542,31 @@
1542
1542
  [debug] [2025-12-02T11:01:20.107Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1543
1543
  [debug] [2025-12-02T11:01:20.107Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1544
1544
  [debug] [2025-12-02T11:01:20.107Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1545
+ [debug] [2025-12-03T01:51:35.334Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1546
+ [debug] [2025-12-03T01:51:35.337Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1547
+ [debug] [2025-12-03T01:51:35.337Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1548
+ [debug] [2025-12-03T01:51:35.337Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1549
+ [debug] [2025-12-03T01:51:35.348Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1550
+ [debug] [2025-12-03T01:51:35.349Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1551
+ [debug] [2025-12-03T01:51:35.443Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1552
+ [debug] [2025-12-03T01:51:35.448Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1553
+ [debug] [2025-12-03T01:51:35.448Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1554
+ [debug] [2025-12-03T01:51:35.448Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1555
+ [debug] [2025-12-03T01:51:35.463Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1556
+ [debug] [2025-12-03T01:51:35.464Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1557
+ [debug] [2025-12-03T01:51:35.471Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1558
+ [debug] [2025-12-03T01:51:35.471Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1559
+ [debug] [2025-12-03T01:51:35.472Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1560
+ [debug] [2025-12-03T01:51:35.472Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1561
+ [debug] [2025-12-03T01:51:35.474Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1562
+ [debug] [2025-12-03T01:51:35.474Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1563
+ [debug] [2025-12-03T01:51:35.475Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1564
+ [debug] [2025-12-03T01:51:35.475Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1565
+ [debug] [2025-12-03T01:51:35.573Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1566
+ [debug] [2025-12-03T01:51:35.573Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1567
+ [debug] [2025-12-03T01:51:35.574Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1568
+ [debug] [2025-12-03T01:51:35.574Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1569
+ [debug] [2025-12-03T01:51:35.575Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1570
+ [debug] [2025-12-03T01:51:35.575Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1571
+ [debug] [2025-12-03T01:51:35.576Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1572
+ [debug] [2025-12-03T01:51:35.576Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "0.0.124",
3
+ "version": "0.0.126",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {