@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
@@ -909,8 +909,10 @@ input[type="color"] {
909
909
  pointer-events: none;
910
910
  }
911
911
 
912
- label:has(input[type="checkbox"]):not(fieldset label):not(label[data-toggle]),
913
- input[type="checkbox"] + label:not(fieldset label):not(label[data-toggle]) {
912
+ :is(
913
+ label:has(input[type="checkbox"]),
914
+ input[type="checkbox"] + label
915
+ ):not(fieldset label):not(label[data-toggle]) {
914
916
  display: inline-flex;
915
917
  align-items: center;
916
918
  justify-content: center;
@@ -937,42 +939,42 @@ input[type="checkbox"] + label:not(fieldset label):not(label[data-toggle]) {
937
939
  background-color: var(--color-surface-subtle);
938
940
  border-color: var(--color-primary-500);
939
941
  }
940
- }
941
942
 
942
- label:has(input[type="checkbox"]:checked):not(fieldset label):not(label[data-toggle]),
943
- input[type="checkbox"]:checked + label:not(fieldset label):not(label[data-toggle]) {
944
- background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
945
- color: var(--color-primary-700);
946
- border-color: var(--color-primary-500);
947
- border-width: var(--border-width-medium);
948
- font-weight: var(--font-weight-semibold);
949
-
950
- &:hover {
951
- background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
952
- border-color: var(--color-primary-600);
943
+ &:has(input[type="checkbox"]:checked),
944
+ input[type="checkbox"]:checked + label:not(fieldset label):not(label[data-toggle]) {
945
+ background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
946
+ color: var(--color-primary-700);
947
+ border-color: var(--color-primary-500);
948
+ border-width: var(--border-width-medium);
949
+ font-weight: var(--font-weight-semibold);
950
+
951
+ &:hover {
952
+ background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
953
+ border-color: var(--color-primary-600);
954
+ }
953
955
  }
954
- }
955
956
 
956
- label:has(input[type="checkbox"]:focus):not(fieldset label):not(label[data-toggle]),
957
- input[type="checkbox"]:focus + label:not(fieldset label):not(label[data-toggle]) {
958
- outline: none;
959
- box-shadow: 0 0 0 ${m}px color-mix(in oklab, var(--color-primary-500) ${Math.round((i||.3)*100)}%, transparent);
960
- }
957
+ &:has(input[type="checkbox"]:focus),
958
+ input[type="checkbox"]:focus + label:not(fieldset label):not(label[data-toggle]) {
959
+ outline: none;
960
+ box-shadow: 0 0 0 ${m}px color-mix(in oklab, var(--color-primary-500) ${Math.round((i||.3)*100)}%, transparent);
961
+ }
961
962
 
962
- label:has(input[type="checkbox"]:disabled):not(fieldset label):not(label[data-toggle]),
963
- input[type="checkbox"]:disabled + label:not(fieldset label):not(label[data-toggle]) {
964
- background-color: var(--color-input-disabled-bg);
965
- color: var(--color-input-disabled-text);
966
- border-color: var(--color-border);
967
- cursor: not-allowed;
968
- opacity: 0.6;
969
- }
963
+ &:has(input[type="checkbox"]:disabled),
964
+ input[type="checkbox"]:disabled + label:not(fieldset label):not(label[data-toggle]) {
965
+ background-color: var(--color-input-disabled-bg);
966
+ color: var(--color-input-disabled-text);
967
+ border-color: var(--color-border);
968
+ cursor: not-allowed;
969
+ opacity: 0.6;
970
+ }
970
971
 
971
- label:has(input[type="checkbox"]:checked:disabled):not(fieldset label):not(label[data-toggle]),
972
- input[type="checkbox"]:checked:disabled + label:not(fieldset label):not(label[data-toggle]) {
973
- background-color: var(--color-input-disabled-bg);
974
- color: var(--color-input-disabled-text);
975
- border-color: var(--color-border);
972
+ &:has(input[type="checkbox"]:checked:disabled),
973
+ input[type="checkbox"]:checked:disabled + label:not(fieldset label):not(label[data-toggle]) {
974
+ background-color: var(--color-input-disabled-bg);
975
+ color: var(--color-input-disabled-text);
976
+ border-color: var(--color-border);
977
+ }
976
978
  }
977
979
 
978
980
  /* Keep default checkbox/radio for inputs NOT in special containers */
@@ -1043,51 +1045,47 @@ fieldset[role="group"].buttons {
1043
1045
  color: var(--color-text-primary);
1044
1046
  }
1045
1047
 
1046
- &:has([disabled]){
1048
+ &:has([disabled]) {
1047
1049
  pointer-events: none;
1048
1050
  }
1049
- }
1050
-
1051
- label:has(input[type="radio"]:checked),
1052
- label:has(input[type="checkbox"]:checked) {
1053
- background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
1054
- border-color: var(--color-primary-500);
1055
- border-width: var(--border-width-medium);
1056
- font-weight: var(--font-weight-semibold);
1057
-
1058
- &:hover {
1059
- background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
1060
- border-color: var(--color-primary-600);
1051
+
1052
+ &:has(input:is([type="radio"], [type="checkbox"]):checked) {
1053
+ background-color: color-mix(in oklab, var(--color-primary-500) 8%, transparent);
1054
+ border-color: var(--color-primary-500);
1055
+ border-width: var(--border-width-medium);
1056
+ font-weight: var(--font-weight-semibold);
1057
+
1058
+ &:hover {
1059
+ background-color: color-mix(in oklab, var(--color-primary-500) 15%, transparent);
1060
+ border-color: var(--color-primary-600);
1061
+ }
1062
+ }
1063
+
1064
+ &:has(input:is([type="radio"], [type="checkbox"]):focus) {
1065
+ outline: none;
1066
+ box-shadow: 0 0 0 ${m}px color-mix(in oklab, var(--color-primary-500) ${Math.round((i||.3)*100)}%, transparent);
1067
+ }
1068
+
1069
+ &:has(input:is([type="radio"], [type="checkbox"]):disabled) {
1070
+ background-color: var(--color-input-disabled-bg);
1071
+ color: var(--color-input-disabled-text);
1072
+ border-color: var(--color-border);
1073
+ cursor: not-allowed;
1074
+ opacity: 0.6;
1075
+ }
1076
+
1077
+ &:has(input:is([type="radio"], [type="checkbox"]):checked:disabled) {
1078
+ background-color: var(--color-input-disabled-bg);
1079
+ color: var(--color-input-disabled-text);
1080
+ border-color: var(--color-border);
1061
1081
  }
1062
- }
1063
-
1064
- label:has(input[type="radio"]:focus),
1065
- label:has(input[type="checkbox"]:focus) {
1066
- outline: none;
1067
- box-shadow: 0 0 0 ${m}px color-mix(in oklab, var(--color-primary-500) ${Math.round((i||.3)*100)}%, transparent);
1068
- }
1069
-
1070
- label:has(input[type="radio"]:disabled),
1071
- label:has(input[type="checkbox"]:disabled) {
1072
- background-color: var(--color-input-disabled-bg);
1073
- color: var(--color-input-disabled-text);
1074
- border-color: var(--color-border);
1075
- cursor: not-allowed;
1076
- opacity: 0.6;
1077
- }
1078
-
1079
- label:has(input[type="radio"]:checked:disabled),
1080
- label:has(input[type="checkbox"]:checked:disabled) {
1081
- background-color: var(--color-input-disabled-bg);
1082
- color: var(--color-input-disabled-text);
1083
- border-color: var(--color-border);
1084
1082
  }
1085
1083
  }
1086
1084
 
1087
1085
  /* Toggle switches - enhanced checkboxes with data-toggle attribute */
1088
1086
  label[data-toggle] {
1089
1087
  display: inline-flex;
1090
- align-items: normal;
1088
+ align-items: center;
1091
1089
  gap: var(--spacing-3);
1092
1090
  cursor: pointer;
1093
1091
  user-select: none;
@@ -1102,6 +1100,10 @@ label[data-toggle] {
1102
1100
  display: none;
1103
1101
  }
1104
1102
 
1103
+ span[data-label] {
1104
+ margin-bottom: 0;
1105
+ }
1106
+
1105
1107
  /* Toggle switch container */
1106
1108
  .toggle-switch {
1107
1109
  position: relative;
@@ -1142,29 +1144,22 @@ label[data-toggle] {
1142
1144
  transition: opacity 200ms ease;
1143
1145
  }
1144
1146
 
1145
- &.with-icons:has(input[type="checkbox"]:checked) .toggle-knob::before {
1146
- content: "\u2713";
1147
- color: var(--color-primary-600);
1148
- }
1149
-
1150
- /* Toggle switch when checked - using :has() selector */
1151
- &:has(input[type="checkbox"]:checked) .toggle-switch {
1152
- background-color: var(--color-primary-fill);
1153
- }
1154
-
1147
+ &:has(input[type="checkbox"]:checked) {
1148
+ &.with-icons .toggle-knob::before {
1149
+ content: "\u2713";
1150
+ color: var(--color-primary-600);
1151
+ }
1155
1152
 
1156
- /* Toggle knob when checked - always moves to the right */
1157
- &:has(input[type="checkbox"]:checked) .toggle-knob {
1158
- left: 22px;
1159
- }
1153
+ .toggle-switch {
1154
+ background-color: var(--color-primary-fill);
1155
+ }
1160
1156
 
1161
- /* Focus state for toggle switch */
1162
- &:has(input[type="checkbox"]:focus) .toggle-switch {
1163
- outline: 2px solid var(--color-primary-500);
1164
- outline-offset: 2px;
1157
+ .toggle-knob {
1158
+ left: 22px;
1159
+ }
1165
1160
  }
1166
1161
 
1167
- /* Focus visible state when label is focused via keyboard */
1162
+ &:has(input[type="checkbox"]:focus) .toggle-switch,
1168
1163
  &:focus-visible .toggle-switch {
1169
1164
  outline: 2px solid var(--color-primary-500);
1170
1165
  outline-offset: 2px;
@@ -3000,15 +2995,9 @@ nav[data-dropdown] {
3000
2995
 
3001
2996
  /* Checkbox enhancement - visually hide native input but keep accessible
3002
2997
  Excludes button-style checkboxes in fieldsets and special containers */
3003
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]) input[type="checkbox"]) {
3004
- position: absolute;
3005
- opacity: 0;
3006
- width: 1px;
3007
- height: 1px;
3008
- }
3009
-
3010
- /* Style label container for checkbox */
3011
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])) {
2998
+ :where(
2999
+ label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])
3000
+ ) {
3012
3001
  display: inline-flex;
3013
3002
  align-items: center;
3014
3003
  gap: var(--spacing-2);
@@ -3016,64 +3005,65 @@ nav[data-dropdown] {
3016
3005
  user-select: none;
3017
3006
  position: relative;
3018
3007
  padding-left: calc(var(--spacing-5) + var(--spacing-3));
3019
- }
3020
3008
 
3021
- /* Custom checkbox box using PDS tokens - works with or without span wrapper */
3022
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"])::before) {
3023
- content: "";
3024
- position: absolute;
3025
- left: 0;
3026
- top: 50%;
3027
- transform: translateY(-50%);
3028
- width: var(--spacing-5);
3029
- height: var(--spacing-5);
3030
- border: var(--border-width-medium) solid var(--color-border);
3031
- border-radius: var(--radius-sm);
3032
- background: var(--color-surface-base);
3033
- transition: all var(--transition-fast);
3034
- flex-shrink: 0;
3035
- }
3009
+ input[type="checkbox"] {
3010
+ position: absolute;
3011
+ opacity: 0;
3012
+ width: 1px;
3013
+ height: 1px;
3014
+ }
3036
3015
 
3037
- /* Checkmark */
3038
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked)::after) {
3039
- content: "";
3040
- position: absolute;
3041
- left: var(--spacing-2);
3042
- top: 50%;
3043
- transform: translateY(-60%) rotate(45deg);
3044
- width: var(--spacing-1-5);
3045
- height: var(--spacing-3);
3046
- border: solid var(--color-primary-contrast, white);
3047
- border-width: 0 2px 2px 0;
3048
- }
3016
+ &::before {
3017
+ content: "";
3018
+ position: absolute;
3019
+ left: 0;
3020
+ top: 50%;
3021
+ transform: translateY(-50%);
3022
+ width: var(--spacing-5);
3023
+ height: var(--spacing-5);
3024
+ border: var(--border-width-medium) solid var(--color-border);
3025
+ border-radius: var(--radius-sm);
3026
+ background: var(--color-surface-base);
3027
+ transition: all var(--transition-fast);
3028
+ flex-shrink: 0;
3029
+ }
3049
3030
 
3050
- /* Checked state */
3051
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked)::before) {
3052
- background: var(--color-primary-600);
3053
- border-color: var(--color-primary-600);
3054
- }
3031
+ &:has(input[type="checkbox"]:checked)::after {
3032
+ content: "";
3033
+ position: absolute;
3034
+ left: var(--spacing-2);
3035
+ top: 50%;
3036
+ transform: translateY(-60%) rotate(45deg);
3037
+ width: var(--spacing-1-5);
3038
+ height: var(--spacing-3);
3039
+ border: solid var(--color-primary-contrast, white);
3040
+ border-width: 0 2px 2px 0;
3041
+ }
3055
3042
 
3056
- /* Focus styles for accessibility */
3057
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:focus)::before) {
3058
- outline: 2px solid var(--color-primary-500);
3059
- outline-offset: 2px;
3060
- }
3043
+ &:has(input[type="checkbox"]:checked)::before {
3044
+ background: var(--color-primary-600);
3045
+ border-color: var(--color-primary-600);
3046
+ }
3061
3047
 
3062
- /* Hover effects */
3063
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:not(:disabled)):hover::before) {
3064
- border-color: var(--color-primary-600);
3065
- background: var(--color-surface-subtle);
3066
- }
3048
+ &:has(input[type="checkbox"]:focus)::before {
3049
+ outline: 2px solid var(--color-primary-500);
3050
+ outline-offset: 2px;
3051
+ }
3067
3052
 
3068
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:checked:not(:disabled)):hover::before) {
3069
- background: var(--color-primary-700);
3070
- border-color: var(--color-primary-700);
3071
- }
3053
+ &:has(input[type="checkbox"]:not(:disabled)):hover::before {
3054
+ border-color: var(--color-primary-600);
3055
+ background: var(--color-surface-subtle);
3056
+ }
3072
3057
 
3073
- /* Disabled state */
3074
- :where(label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type="checkbox"]:disabled)) {
3075
- opacity: 0.5;
3076
- cursor: not-allowed;
3058
+ &:has(input[type="checkbox"]:checked:not(:disabled)):hover::before {
3059
+ background: var(--color-primary-700);
3060
+ border-color: var(--color-primary-700);
3061
+ }
3062
+
3063
+ &:has(input[type="checkbox"]:disabled) {
3064
+ opacity: 0.5;
3065
+ cursor: not-allowed;
3066
+ }
3077
3067
  }
3078
3068
 
3079
3069
  :where(fieldset) {