@pure-ds/core 0.7.25 → 0.7.26

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 (41) hide show
  1. package/.cursorrules +12 -1
  2. package/.github/copilot-instructions.md +12 -1
  3. package/custom-elements.json +1099 -74
  4. package/dist/types/public/assets/js/pds-ask.d.ts +2 -1
  5. package/dist/types/public/assets/js/pds-ask.d.ts.map +1 -1
  6. package/dist/types/public/assets/js/pds-autocomplete.d.ts +25 -36
  7. package/dist/types/public/assets/js/pds-autocomplete.d.ts.map +1 -1
  8. package/dist/types/public/assets/js/pds-enhancers.d.ts +4 -4
  9. package/dist/types/public/assets/js/pds-enhancers.d.ts.map +1 -1
  10. package/dist/types/public/assets/js/pds-manager.d.ts +444 -159
  11. package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
  12. package/dist/types/public/assets/js/pds-toast.d.ts +7 -6
  13. package/dist/types/public/assets/js/pds-toast.d.ts.map +1 -1
  14. package/dist/types/public/assets/js/pds.d.ts +4 -3
  15. package/dist/types/public/assets/js/pds.d.ts.map +1 -1
  16. package/dist/types/public/assets/pds/components/pds-daterange.d.ts +2 -0
  17. package/dist/types/public/assets/pds/components/pds-daterange.d.ts.map +1 -0
  18. package/dist/types/public/assets/pds/components/pds-form.d.ts.map +1 -1
  19. package/dist/types/public/assets/pds/components/pds-rating.d.ts +120 -0
  20. package/dist/types/public/assets/pds/components/pds-rating.d.ts.map +1 -0
  21. package/dist/types/public/assets/pds/components/pds-tags.d.ts +2 -0
  22. package/dist/types/public/assets/pds/components/pds-tags.d.ts.map +1 -0
  23. package/dist/types/src/js/common/ask.d.ts.map +1 -1
  24. package/dist/types/src/js/pds-core/pds-generator.d.ts.map +1 -1
  25. package/package.json +2 -2
  26. package/public/assets/js/app.js +1 -1
  27. package/public/assets/js/pds-ask.js +6 -6
  28. package/public/assets/js/pds-manager.js +104 -29
  29. package/public/assets/pds/components/pds-calendar.js +91 -159
  30. package/public/assets/pds/components/pds-daterange.js +683 -0
  31. package/public/assets/pds/components/pds-form.js +123 -21
  32. package/public/assets/pds/components/pds-rating.js +648 -0
  33. package/public/assets/pds/components/pds-tags.js +802 -0
  34. package/public/assets/pds/core/pds-ask.js +6 -6
  35. package/public/assets/pds/core/pds-manager.js +104 -29
  36. package/public/assets/pds/custom-elements.json +1099 -74
  37. package/public/assets/pds/pds-css-complete.json +7 -2
  38. package/public/assets/pds/pds.css-data.json +4 -4
  39. package/public/assets/pds/vscode-custom-data.json +97 -0
  40. package/src/js/pds-core/pds-generator.js +103 -28
  41. package/src/js/pds-core/pds-ontology.js +2 -2
@@ -1672,6 +1672,11 @@
1672
1672
  "description": "Button primitive component",
1673
1673
  "category": "Primitives"
1674
1674
  },
1675
+ {
1676
+ "name": "btn-danger",
1677
+ "description": "Button primitive component",
1678
+ "category": "Primitives"
1679
+ },
1675
1680
  {
1676
1681
  "name": "btn-sm",
1677
1682
  "description": "Button primitive component",
@@ -2292,9 +2297,9 @@
2292
2297
  ],
2293
2298
  "metadata": {
2294
2299
  "generator": "PDS CSS Data Generator",
2295
- "generatedAt": "2026-02-26T07:33:17.462Z",
2300
+ "generatedAt": "2026-03-03T08:40:38.831Z",
2296
2301
  "totalProperties": 169,
2297
- "totalClasses": 169,
2302
+ "totalClasses": 170,
2298
2303
  "totalAttributes": 5
2299
2304
  }
2300
2305
  }
@@ -2001,6 +2001,10 @@
2001
2001
  "name": "btn-outline",
2002
2002
  "description": "Button primitive component"
2003
2003
  },
2004
+ {
2005
+ "name": "btn-danger",
2006
+ "description": "Button primitive component"
2007
+ },
2004
2008
  {
2005
2009
  "name": "btn-sm",
2006
2010
  "description": "Button primitive component"
@@ -2192,10 +2196,6 @@
2192
2196
  {
2193
2197
  "name": "stack-md",
2194
2198
  "description": "Vertical flex layout with predefined gaps"
2195
- },
2196
- {
2197
- "name": "stack-lg",
2198
- "description": "Vertical flex layout with predefined gaps"
2199
2199
  }
2200
2200
  ],
2201
2201
  "pseudoElements": []
@@ -8,6 +8,66 @@
8
8
  {
9
9
  "name": "date",
10
10
  "description": "The date to display (defaults to current date). Accepts any valid date string"
11
+ },
12
+ {
13
+ "name": "required",
14
+ "description": ""
15
+ },
16
+ {
17
+ "name": "name",
18
+ "description": ""
19
+ },
20
+ {
21
+ "name": "disabled",
22
+ "description": ""
23
+ },
24
+ {
25
+ "name": "compact",
26
+ "description": ""
27
+ }
28
+ ]
29
+ },
30
+ {
31
+ "name": "pds-code",
32
+ "description": "PDSCode component",
33
+ "attributes": [
34
+ {
35
+ "name": "code",
36
+ "description": ""
37
+ },
38
+ {
39
+ "name": "lang",
40
+ "description": ""
41
+ },
42
+ {
43
+ "name": "theme",
44
+ "description": ""
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "name": "pds-daterange",
50
+ "description": "PdsDateRange component",
51
+ "attributes": [
52
+ {
53
+ "name": "name",
54
+ "description": "Form field name used during form submission."
55
+ },
56
+ {
57
+ "name": "required",
58
+ "description": "Requires both start and end dates to be selected."
59
+ },
60
+ {
61
+ "name": "disabled",
62
+ "description": "Disables interaction and closes the panel when active."
63
+ },
64
+ {
65
+ "name": "value",
66
+ "description": "Serialized range value as ISO interval: `YYYY-MM-DD/YYYY-MM-DD`."
67
+ },
68
+ {
69
+ "name": "display-format",
70
+ "description": "Button date text format. Default is `d MMM yy`."
11
71
  }
12
72
  ]
13
73
  },
@@ -739,6 +799,43 @@
739
799
  }
740
800
  ]
741
801
  },
802
+ {
803
+ "name": "pds-rating",
804
+ "description": "Star-based rating input that participates in native HTML forms.",
805
+ "attributes": [
806
+ {
807
+ "name": "max",
808
+ "description": "Maximum rating value and rendered star count (minimum 1, default 5)"
809
+ },
810
+ {
811
+ "name": "value",
812
+ "description": "Current rating value (snapped to 0.5 increments)"
813
+ },
814
+ {
815
+ "name": "disabled",
816
+ "description": "Disables keyboard/pointer interaction and form submission value",
817
+ "valueSet": "v"
818
+ },
819
+ {
820
+ "name": "required",
821
+ "description": "Marks the rating as required for form validation",
822
+ "valueSet": "v"
823
+ },
824
+ {
825
+ "name": "readonly",
826
+ "description": "Makes the rating non-editable while still focusable",
827
+ "valueSet": "v"
828
+ },
829
+ {
830
+ "name": "name",
831
+ "description": "Form field name used when submitting the rating"
832
+ },
833
+ {
834
+ "name": "color",
835
+ "description": "Optional active star color (CSS color value)"
836
+ }
837
+ ]
838
+ },
742
839
  {
743
840
  "name": "pds-richtext",
744
841
  "description": "RichText component",
@@ -2753,7 +2753,7 @@ button, .btn, input[type="submit"], input[type="button"], input[type="reset"] {
2753
2753
  border-color: var(--color-border);
2754
2754
 
2755
2755
  /* Only apply generic hover to non-variant buttons */
2756
- &:hover:not(.btn-primary):not(.btn-secondary):not(.btn-outline) {
2756
+ &:hover:not(.btn-primary):not(.btn-secondary):not(.btn-outline):not(.btn-danger) {
2757
2757
  background-color: var(--color-surface-elevated);
2758
2758
  }
2759
2759
 
@@ -2845,6 +2845,56 @@ button, .btn, input[type="submit"], input[type="button"], input[type="reset"] {
2845
2845
  }
2846
2846
  }
2847
2847
 
2848
+ .btn-danger {
2849
+ background-color: var(--color-danger-600);
2850
+ color: white;
2851
+ border-color: var(--color-danger-600);
2852
+
2853
+ &:hover {
2854
+ background-color: color-mix(in oklab, var(--color-danger-600) 90%, black 10%);
2855
+ border-color: color-mix(in oklab, var(--color-danger-600) 90%, black 10%);
2856
+ color: white;
2857
+ }
2858
+
2859
+ &:active {
2860
+ background-color: color-mix(in oklab, var(--color-danger-600) 80%, black 20%);
2861
+ border-color: color-mix(in oklab, var(--color-danger-600) 80%, black 20%);
2862
+ color: white;
2863
+ }
2864
+ }
2865
+
2866
+ .btn-danger.btn-outline {
2867
+ background-color: transparent;
2868
+ color: var(--color-danger-600);
2869
+ border-color: var(--color-danger-600);
2870
+
2871
+ &:hover {
2872
+ background-color: var(--color-danger-600);
2873
+ border-color: var(--color-danger-600);
2874
+ color: white;
2875
+
2876
+ pds-icon {
2877
+ color: white;
2878
+ }
2879
+ }
2880
+
2881
+ &:active {
2882
+ background-color: color-mix(in oklab, var(--color-danger-600) 80%, black 20%);
2883
+ border-color: color-mix(in oklab, var(--color-danger-600) 80%, black 20%);
2884
+ color: white;
2885
+
2886
+ pds-icon {
2887
+ color: white;
2888
+ }
2889
+ }
2890
+
2891
+ &:disabled {
2892
+ background-color: transparent;
2893
+ color: var(--color-input-disabled-text);
2894
+ border-color: var(--color-input-disabled-bg);
2895
+ }
2896
+ }
2897
+
2848
2898
  .btn-sm {
2849
2899
  padding: calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 0.85) calc(var(--spacing-6) * 0.8);
2850
2900
  font-size: var(--font-size-sm);
@@ -3516,6 +3566,17 @@ dialog {
3516
3566
  overflow: hidden; /* Prevent dialog itself from scrolling - let .dialog-body handle it */
3517
3567
  }
3518
3568
 
3569
+ /*
3570
+ * Overlay safety valve:
3571
+ * Some controls (e.g. pds-daterange panel, data-dropdown menus) need to escape
3572
+ * the dialog bounds. Scope overflow visibility to custom dialogs that contain
3573
+ * those controls instead of enabling it for all dialogs.
3574
+ */
3575
+ dialog.dialog-custom:has(pds-daterange),
3576
+ dialog.dialog-custom:has([data-dropdown]) {
3577
+ overflow: visible;
3578
+ }
3579
+
3519
3580
  /* Form structure - use flexbox instead of contents */
3520
3581
  dialog form {
3521
3582
  display: flex;
@@ -3525,11 +3586,6 @@ dialog form {
3525
3586
  margin: 0;
3526
3587
  }
3527
3588
 
3528
- /* Dialog fields - to open pds-form subforms */
3529
- .dialog-field {
3530
- margin-top: var(--spacing-3);
3531
- }
3532
-
3533
3589
  /* Dialog header */
3534
3590
  dialog {
3535
3591
  header,
@@ -3584,7 +3640,20 @@ dialog {
3584
3640
  min-height: 0; /* Critical: allow flex child to shrink and scroll */
3585
3641
  padding: var(--spacing-3) var(--spacing-6);
3586
3642
  overflow-y: auto;
3587
- overflow-x: hidden;
3643
+ overflow-x: visible;
3644
+ }
3645
+
3646
+ /* Allow overlay menus (e.g. data-dropdown) to escape dialog-body clipping while open */
3647
+ article:has([data-dropdown] > :last-child[aria-hidden="false"]),
3648
+ form > article:has([data-dropdown] > :last-child[aria-hidden="false"]),
3649
+ .dialog-body:has([data-dropdown] > :last-child[aria-hidden="false"]) {
3650
+ overflow: visible;
3651
+ }
3652
+
3653
+ article:has(pds-daterange),
3654
+ form > article:has(pds-daterange),
3655
+ .dialog-body:has(pds-daterange) {
3656
+ overflow: visible;
3588
3657
  }
3589
3658
 
3590
3659
  /* Dialog footer - actions */
@@ -3610,23 +3679,14 @@ dialog.dialog-full { width: calc(100vw - var(--spacing-8)); max-width: calc(100v
3610
3679
  /* Mobile responsiveness - maximize on mobile */
3611
3680
  @media (max-width: ${breakpoints.sm - 1}px) {
3612
3681
  dialog,
3682
+ dialog.dialog-sm,
3683
+ dialog.dialog-lg,
3684
+ dialog.dialog-xl,
3685
+ dialog.dialog-full,
3613
3686
  dialog.dialog-no-scale-animation,
3614
3687
  dialog.dialog-no-scale-animation[open] {
3615
- left: 0 !important;
3616
- top: 0 !important;
3617
- }
3618
-
3619
- dialog.dialog-no-scale-animation,
3620
- dialog.dialog-no-scale-animation[open] {
3621
- transform: none !important;
3622
- }
3623
-
3624
- dialog[open] {
3625
- left: 0 !important;
3626
- top: 0 !important;
3627
- }
3628
-
3629
- dialog {
3688
+ left: 0;
3689
+ top: 0;
3630
3690
  max-width: 100vw;
3631
3691
  width: 100vw;
3632
3692
  height: 100dvh;
@@ -3634,9 +3694,21 @@ dialog.dialog-full { width: calc(100vw - var(--spacing-8)); max-width: calc(100v
3634
3694
  --dialog-max-height: 100dvh; /* Override custom maxHeight on mobile */
3635
3695
  border-radius: 0;
3636
3696
  margin: 0;
3697
+ }
3698
+
3699
+ dialog,
3700
+ dialog.dialog-sm,
3701
+ dialog.dialog-lg,
3702
+ dialog.dialog-xl,
3703
+ dialog.dialog-full {
3637
3704
  transform: scale(0.98);
3638
3705
  }
3639
- dialog[open] {
3706
+
3707
+ dialog[open],
3708
+ dialog.dialog-sm[open],
3709
+ dialog.dialog-lg[open],
3710
+ dialog.dialog-xl[open],
3711
+ dialog.dialog-full[open] {
3640
3712
  transform: scale(1);
3641
3713
  animation: pds-dialog-enter-mobile var(--transition-normal) ease;
3642
3714
  }
@@ -4855,12 +4927,15 @@ nav[data-dropdown] {
4855
4927
  }
4856
4928
 
4857
4929
  /* Media primitives */
4858
- :where(img, video) {
4859
- max-width: 100%;
4860
- height: auto;
4930
+ :where(img, video) {
4861
4931
  border-radius: var(--radius-sm);
4862
4932
  }
4863
4933
 
4934
+ :where(img:not([height]):not([width]), video:not([height]):not([width])) {
4935
+ height: auto;
4936
+ max-width: 100%;
4937
+ }
4938
+
4864
4939
  :where(figure) {
4865
4940
  margin: 0 0 var(--spacing-6) 0;
4866
4941
  }
@@ -5065,7 +5140,7 @@ html:not([data-theme="dark"]) .surface-inverse {
5065
5140
  --color-code-bg: var(--color-gray-800);
5066
5141
  --color-surface-muted: rgba(255, 255, 255, 0.08);
5067
5142
 
5068
- & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
5143
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger),
5069
5144
  & .btn-secondary {
5070
5145
  background-color: rgba(255, 255, 255, 0.12);
5071
5146
  color: var(--surface-inverse-text);
@@ -5097,7 +5172,7 @@ html[data-theme="dark"] .surface-inverse {
5097
5172
  --color-code-bg: var(--color-gray-100);
5098
5173
  --color-surface-muted: var(--color-gray-100);
5099
5174
 
5100
- & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
5175
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger),
5101
5176
  & .btn-secondary {
5102
5177
  background-color: rgba(0, 0, 0, 0.06);
5103
5178
  color: var(--surface-inverse-text);
@@ -116,7 +116,7 @@ export const ontology = {
116
116
  id: "button",
117
117
  name: "Button",
118
118
  description: "Interactive button element with variants",
119
- selectors: ["button", ".btn-primary", ".btn-secondary", ".btn-outline", ".btn-sm", ".btn-xs", ".btn-lg", ".btn-working", ".icon-only"],
119
+ selectors: ["button", ".btn-primary", ".btn-secondary", ".btn-outline", ".btn-danger", ".btn-sm", ".btn-xs", ".btn-lg", ".btn-working", ".icon-only"],
120
120
  tags: ["interactive", "action", "cta", "form"],
121
121
  category: "action"
122
122
  },
@@ -582,7 +582,7 @@ export const ontology = {
582
582
  form: ["input", "field", "label", "button", "fieldset", "pds-form", "pds-upload", "pds-richtext", "pds-calendar", "required", "validation", "submit"],
583
583
  input: ["form", "field", "text", "label", "required", "validation"],
584
584
  field: ["form", "input", "label", "required"],
585
- button: ["btn", "interactive", "action", "submit", "form", "btn-primary", "btn-secondary", "btn-working", "pds-fab", "floating"],
585
+ button: ["btn", "interactive", "action", "submit", "form", "btn-primary", "btn-secondary", "btn-danger", "btn-working", "pds-fab", "floating"],
586
586
  btn: ["button", "interactive", "action", "pds-fab"],
587
587
  fab: ["pds-fab", "floating", "button", "action", "menu"],
588
588
  floating: ["fab", "pds-fab", "button", "action"],