@pure-ds/core 0.7.19 → 0.7.21

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 (33) hide show
  1. package/.cursorrules +10 -0
  2. package/.github/copilot-instructions.md +10 -0
  3. package/custom-elements.json +232 -25
  4. package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
  5. package/dist/types/public/assets/pds/components/pds-code.d.ts +19 -0
  6. package/dist/types/public/assets/pds/components/pds-code.d.ts.map +1 -0
  7. package/dist/types/public/assets/pds/components/pds-icon.d.ts +31 -1
  8. package/dist/types/public/assets/pds/components/pds-icon.d.ts.map +1 -1
  9. package/dist/types/public/assets/pds/components/pds-treeview.d.ts +271 -16
  10. package/dist/types/public/assets/pds/components/pds-treeview.d.ts.map +1 -1
  11. package/dist/types/src/js/components/pds-code.d.ts +19 -0
  12. package/dist/types/src/js/components/pds-code.d.ts.map +1 -0
  13. package/dist/types/src/js/external/shiki.d.ts +3 -0
  14. package/dist/types/src/js/external/shiki.d.ts.map +1 -0
  15. package/dist/types/src/js/pds-core/pds-generator.d.ts.map +1 -1
  16. package/package.json +1 -1
  17. package/packages/pds-cli/bin/templates/bootstrap/public/assets/my/my-home.js +1 -1
  18. package/public/assets/js/app.js +1 -1
  19. package/public/assets/js/pds-manager.js +138 -148
  20. package/public/assets/pds/components/pds-calendar.js +504 -16
  21. package/public/assets/pds/components/pds-code.js +203 -0
  22. package/public/assets/pds/components/pds-icon.js +102 -27
  23. package/public/assets/pds/components/pds-live-importer.js +2 -2
  24. package/public/assets/pds/components/pds-scrollrow.js +27 -2
  25. package/public/assets/pds/components/pds-treeview.js +185 -0
  26. package/public/assets/pds/core/pds-manager.js +138 -148
  27. package/public/assets/pds/custom-elements.json +263 -18
  28. package/public/assets/pds/external/shiki.js +32 -0
  29. package/public/assets/pds/pds-css-complete.json +1 -1
  30. package/public/assets/pds/templates/feedback-ops-dashboard.html +1 -1
  31. package/public/assets/pds/templates/release-readiness-radar.html +2 -2
  32. package/public/assets/pds/templates/support-command-center.html +1 -1
  33. package/src/js/pds-core/pds-generator.js +142 -152
@@ -2315,8 +2315,10 @@ input[type="color"] {
2315
2315
  pointer-events: none;
2316
2316
  }
2317
2317
 
2318
- label:has(input[type="checkbox"]):not(fieldset label):not(label[data-toggle]),
2319
- input[type="checkbox"] + label:not(fieldset label):not(label[data-toggle]) {
2318
+ :is(
2319
+ label:has(input[type="checkbox"]),
2320
+ input[type="checkbox"] + label
2321
+ ):not(fieldset label):not(label[data-toggle]) {
2320
2322
  display: inline-flex;
2321
2323
  align-items: center;
2322
2324
  justify-content: center;
@@ -2345,44 +2347,44 @@ input[type="checkbox"] + label:not(fieldset label):not(label[data-toggle]) {
2345
2347
  background-color: var(--color-surface-subtle);
2346
2348
  border-color: var(--color-primary-500);
2347
2349
  }
2348
- }
2349
2350
 
2350
- label:has(input[type="checkbox"]:checked):not(fieldset label):not(label[data-toggle]),
2351
- input[type="checkbox"]:checked + label:not(fieldset label):not(label[data-toggle]) {
2352
- background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2353
- color: var(--color-primary-700);
2354
- border-color: var(--color-primary-500);
2355
- border-width: var(--border-width-medium);
2356
- font-weight: var(--font-weight-semibold);
2357
-
2358
- &:hover {
2359
- background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
2360
- border-color: var(--color-primary-600);
2351
+ &:has(input[type="checkbox"]:checked),
2352
+ input[type="checkbox"]:checked + label:not(fieldset label):not(label[data-toggle]) {
2353
+ background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2354
+ color: var(--color-primary-700);
2355
+ border-color: var(--color-primary-500);
2356
+ border-width: var(--border-width-medium);
2357
+ font-weight: var(--font-weight-semibold);
2358
+
2359
+ &:hover {
2360
+ background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
2361
+ border-color: var(--color-primary-600);
2362
+ }
2361
2363
  }
2362
- }
2363
2364
 
2364
- label:has(input[type="checkbox"]:focus):not(fieldset label):not(label[data-toggle]),
2365
- input[type="checkbox"]:focus + label:not(fieldset label):not(label[data-toggle]) {
2366
- outline: none;
2367
- box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-primary-500) ${Math.round(
2368
- (focusRingOpacity || 0.3) * 100,
2369
- )}%, transparent);
2370
- }
2365
+ &:has(input[type="checkbox"]:focus),
2366
+ input[type="checkbox"]:focus + label:not(fieldset label):not(label[data-toggle]) {
2367
+ outline: none;
2368
+ box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-primary-500) ${Math.round(
2369
+ (focusRingOpacity || 0.3) * 100,
2370
+ )}%, transparent);
2371
+ }
2371
2372
 
2372
- label:has(input[type="checkbox"]:disabled):not(fieldset label):not(label[data-toggle]),
2373
- input[type="checkbox"]:disabled + label:not(fieldset label):not(label[data-toggle]) {
2374
- background-color: var(--color-input-disabled-bg);
2375
- color: var(--color-input-disabled-text);
2376
- border-color: var(--color-border);
2377
- cursor: not-allowed;
2378
- opacity: 0.6;
2379
- }
2373
+ &:has(input[type="checkbox"]:disabled),
2374
+ input[type="checkbox"]:disabled + label:not(fieldset label):not(label[data-toggle]) {
2375
+ background-color: var(--color-input-disabled-bg);
2376
+ color: var(--color-input-disabled-text);
2377
+ border-color: var(--color-border);
2378
+ cursor: not-allowed;
2379
+ opacity: 0.6;
2380
+ }
2380
2381
 
2381
- label:has(input[type="checkbox"]:checked:disabled):not(fieldset label):not(label[data-toggle]),
2382
- input[type="checkbox"]:checked:disabled + label:not(fieldset label):not(label[data-toggle]) {
2383
- background-color: var(--color-input-disabled-bg);
2384
- color: var(--color-input-disabled-text);
2385
- border-color: var(--color-border);
2382
+ &:has(input[type="checkbox"]:checked:disabled),
2383
+ input[type="checkbox"]:checked:disabled + label:not(fieldset label):not(label[data-toggle]) {
2384
+ background-color: var(--color-input-disabled-bg);
2385
+ color: var(--color-input-disabled-text);
2386
+ border-color: var(--color-border);
2387
+ }
2386
2388
  }
2387
2389
 
2388
2390
  /* Keep default checkbox/radio for inputs NOT in special containers */
@@ -2455,53 +2457,49 @@ fieldset[role="group"].buttons {
2455
2457
  color: var(--color-text-primary);
2456
2458
  }
2457
2459
 
2458
- &:has([disabled]){
2460
+ &:has([disabled]) {
2459
2461
  pointer-events: none;
2460
2462
  }
2461
- }
2462
-
2463
- label:has(input[type="radio"]:checked),
2464
- label:has(input[type="checkbox"]:checked) {
2465
- background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2466
- border-color: var(--color-primary-500);
2467
- border-width: var(--border-width-medium);
2468
- font-weight: var(--font-weight-semibold);
2469
-
2470
- &:hover {
2471
- background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
2472
- border-color: var(--color-primary-600);
2463
+
2464
+ &:has(input:is([type="radio"], [type="checkbox"]):checked) {
2465
+ background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
2466
+ border-color: var(--color-primary-500);
2467
+ border-width: var(--border-width-medium);
2468
+ font-weight: var(--font-weight-semibold);
2469
+
2470
+ &:hover {
2471
+ background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
2472
+ border-color: var(--color-primary-600);
2473
+ }
2474
+ }
2475
+
2476
+ &:has(input:is([type="radio"], [type="checkbox"]):focus) {
2477
+ outline: none;
2478
+ box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-primary-500) ${Math.round(
2479
+ (focusRingOpacity || 0.3) * 100,
2480
+ )}%, transparent);
2481
+ }
2482
+
2483
+ &:has(input:is([type="radio"], [type="checkbox"]):disabled) {
2484
+ background-color: var(--color-input-disabled-bg);
2485
+ color: var(--color-input-disabled-text);
2486
+ border-color: var(--color-border);
2487
+ cursor: not-allowed;
2488
+ opacity: 0.6;
2489
+ }
2490
+
2491
+ &:has(input:is([type="radio"], [type="checkbox"]):checked:disabled) {
2492
+ background-color: var(--color-input-disabled-bg);
2493
+ color: var(--color-input-disabled-text);
2494
+ border-color: var(--color-border);
2473
2495
  }
2474
- }
2475
-
2476
- label:has(input[type="radio"]:focus),
2477
- label:has(input[type="checkbox"]:focus) {
2478
- outline: none;
2479
- box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-primary-500) ${Math.round(
2480
- (focusRingOpacity || 0.3) * 100,
2481
- )}%, transparent);
2482
- }
2483
-
2484
- label:has(input[type="radio"]:disabled),
2485
- label:has(input[type="checkbox"]:disabled) {
2486
- background-color: var(--color-input-disabled-bg);
2487
- color: var(--color-input-disabled-text);
2488
- border-color: var(--color-border);
2489
- cursor: not-allowed;
2490
- opacity: 0.6;
2491
- }
2492
-
2493
- label:has(input[type="radio"]:checked:disabled),
2494
- label:has(input[type="checkbox"]:checked:disabled) {
2495
- background-color: var(--color-input-disabled-bg);
2496
- color: var(--color-input-disabled-text);
2497
- border-color: var(--color-border);
2498
2496
  }
2499
2497
  }
2500
2498
 
2501
2499
  /* Toggle switches - enhanced checkboxes with data-toggle attribute */
2502
2500
  label[data-toggle] {
2503
2501
  display: inline-flex;
2504
- align-items: normal;
2502
+ align-items: center;
2505
2503
  gap: var(--spacing-3);
2506
2504
  cursor: pointer;
2507
2505
  user-select: none;
@@ -2516,6 +2514,10 @@ label[data-toggle] {
2516
2514
  display: none;
2517
2515
  }
2518
2516
 
2517
+ span[data-label] {
2518
+ margin-bottom: 0;
2519
+ }
2520
+
2519
2521
  /* Toggle switch container */
2520
2522
  .toggle-switch {
2521
2523
  position: relative;
@@ -2556,29 +2558,22 @@ label[data-toggle] {
2556
2558
  transition: opacity 200ms ease;
2557
2559
  }
2558
2560
 
2559
- &.with-icons:has(input[type="checkbox"]:checked) .toggle-knob::before {
2560
- content: "✓";
2561
- color: var(--color-primary-600);
2562
- }
2563
-
2564
- /* Toggle switch when checked - using :has() selector */
2565
- &:has(input[type="checkbox"]:checked) .toggle-switch {
2566
- background-color: var(--color-primary-fill);
2567
- }
2568
-
2561
+ &:has(input[type="checkbox"]:checked) {
2562
+ &.with-icons .toggle-knob::before {
2563
+ content: "✓";
2564
+ color: var(--color-primary-600);
2565
+ }
2569
2566
 
2570
- /* Toggle knob when checked - always moves to the right */
2571
- &:has(input[type="checkbox"]:checked) .toggle-knob {
2572
- left: 22px;
2573
- }
2567
+ .toggle-switch {
2568
+ background-color: var(--color-primary-fill);
2569
+ }
2574
2570
 
2575
- /* Focus state for toggle switch */
2576
- &:has(input[type="checkbox"]:focus) .toggle-switch {
2577
- outline: 2px solid var(--color-primary-500);
2578
- outline-offset: 2px;
2571
+ .toggle-knob {
2572
+ left: 22px;
2573
+ }
2579
2574
  }
2580
2575
 
2581
- /* Focus visible state when label is focused via keyboard */
2576
+ &:has(input[type="checkbox"]:focus) .toggle-switch,
2582
2577
  &:focus-visible .toggle-switch {
2583
2578
  outline: 2px solid var(--color-primary-500);
2584
2579
  outline-offset: 2px;
@@ -4697,15 +4692,9 @@ nav[data-dropdown] {
4697
4692
 
4698
4693
  /* Checkbox enhancement - visually hide native input but keep accessible
4699
4694
  Excludes button-style checkboxes in fieldsets and special containers */
4700
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]) input[type="checkbox"]) {
4701
- position: absolute;
4702
- opacity: 0;
4703
- width: 1px;
4704
- height: 1px;
4705
- }
4706
-
4707
- /* Style label container for checkbox */
4708
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])) {
4695
+ :where(
4696
+ label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])
4697
+ ) {
4709
4698
  display: inline-flex;
4710
4699
  align-items: center;
4711
4700
  gap: var(--spacing-2);
@@ -4713,64 +4702,65 @@ nav[data-dropdown] {
4713
4702
  user-select: none;
4714
4703
  position: relative;
4715
4704
  padding-left: calc(var(--spacing-5) + var(--spacing-3));
4716
- }
4717
4705
 
4718
- /* Custom checkbox box using PDS tokens - works with or without span wrapper */
4719
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])::before) {
4720
- content: "";
4721
- position: absolute;
4722
- left: 0;
4723
- top: 50%;
4724
- transform: translateY(-50%);
4725
- width: var(--spacing-5);
4726
- height: var(--spacing-5);
4727
- border: var(--border-width-medium) solid var(--color-border);
4728
- border-radius: var(--radius-sm);
4729
- background: var(--color-surface-base);
4730
- transition: all var(--transition-fast);
4731
- flex-shrink: 0;
4732
- }
4706
+ input[type="checkbox"] {
4707
+ position: absolute;
4708
+ opacity: 0;
4709
+ width: 1px;
4710
+ height: 1px;
4711
+ }
4733
4712
 
4734
- /* Checkmark */
4735
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked)::after) {
4736
- content: "";
4737
- position: absolute;
4738
- left: var(--spacing-2);
4739
- top: 50%;
4740
- transform: translateY(-60%) rotate(45deg);
4741
- width: var(--spacing-1-5);
4742
- height: var(--spacing-3);
4743
- border: solid var(--color-primary-contrast, white);
4744
- border-width: 0 2px 2px 0;
4745
- }
4713
+ &::before {
4714
+ content: "";
4715
+ position: absolute;
4716
+ left: 0;
4717
+ top: 50%;
4718
+ transform: translateY(-50%);
4719
+ width: var(--spacing-5);
4720
+ height: var(--spacing-5);
4721
+ border: var(--border-width-medium) solid var(--color-border);
4722
+ border-radius: var(--radius-sm);
4723
+ background: var(--color-surface-base);
4724
+ transition: all var(--transition-fast);
4725
+ flex-shrink: 0;
4726
+ }
4746
4727
 
4747
- /* Checked state */
4748
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked)::before) {
4749
- background: var(--color-primary-600);
4750
- border-color: var(--color-primary-600);
4751
- }
4728
+ &:has(input[type="checkbox"]:checked)::after {
4729
+ content: "";
4730
+ position: absolute;
4731
+ left: var(--spacing-2);
4732
+ top: 50%;
4733
+ transform: translateY(-60%) rotate(45deg);
4734
+ width: var(--spacing-1-5);
4735
+ height: var(--spacing-3);
4736
+ border: solid var(--color-primary-contrast, white);
4737
+ border-width: 0 2px 2px 0;
4738
+ }
4752
4739
 
4753
- /* Focus styles for accessibility */
4754
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:focus)::before) {
4755
- outline: 2px solid var(--color-primary-500);
4756
- outline-offset: 2px;
4757
- }
4740
+ &:has(input[type="checkbox"]:checked)::before {
4741
+ background: var(--color-primary-600);
4742
+ border-color: var(--color-primary-600);
4743
+ }
4758
4744
 
4759
- /* Hover effects */
4760
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:not(:disabled)):hover::before) {
4761
- border-color: var(--color-primary-600);
4762
- background: var(--color-surface-subtle);
4763
- }
4745
+ &:has(input[type="checkbox"]:focus)::before {
4746
+ outline: 2px solid var(--color-primary-500);
4747
+ outline-offset: 2px;
4748
+ }
4764
4749
 
4765
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked:not(:disabled)):hover::before) {
4766
- background: var(--color-primary-700);
4767
- border-color: var(--color-primary-700);
4768
- }
4750
+ &:has(input[type="checkbox"]:not(:disabled)):hover::before {
4751
+ border-color: var(--color-primary-600);
4752
+ background: var(--color-surface-subtle);
4753
+ }
4769
4754
 
4770
- /* Disabled state */
4771
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:disabled)) {
4772
- opacity: 0.5;
4773
- cursor: not-allowed;
4755
+ &:has(input[type="checkbox"]:checked:not(:disabled)):hover::before {
4756
+ background: var(--color-primary-700);
4757
+ border-color: var(--color-primary-700);
4758
+ }
4759
+
4760
+ &:has(input[type="checkbox"]:disabled) {
4761
+ opacity: 0.5;
4762
+ cursor: not-allowed;
4763
+ }
4774
4764
  }
4775
4765
 
4776
4766
  :where(fieldset) {