@pure-ds/core 0.3.18 → 0.4.0
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.
- package/custom-elements.json +12 -9
- package/dist/types/pds.config.d.ts +4 -8
- package/dist/types/pds.config.d.ts.map +1 -1
- package/dist/types/public/assets/js/pds.d.ts +3 -3
- package/dist/types/public/assets/js/pds.d.ts.map +1 -1
- package/dist/types/public/assets/pds/components/pds-jsonform.d.ts +1 -0
- package/dist/types/public/assets/pds/components/pds-jsonform.d.ts.map +1 -1
- package/dist/types/public/assets/pds/components/pds-tabstrip.d.ts +36 -5
- package/dist/types/public/assets/pds/components/pds-tabstrip.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-generator.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-ontology.d.ts +186 -12
- package/dist/types/src/js/pds-core/pds-ontology.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-query.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/assets/js/app.js +304 -213
- package/public/assets/js/pds.js +172 -81
- package/public/assets/pds/components/pds-jsonform.js +406 -297
- package/public/assets/pds/components/pds-tabstrip.js +36 -5
- package/public/assets/pds/custom-elements.json +12 -9
- package/public/assets/pds/pds-css-complete.json +1 -1
- package/public/assets/pds/vscode-custom-data.json +4 -4
- package/src/js/pds-core/pds-generator.js +148 -57
- package/src/js/pds-core/pds-ontology.js +803 -256
- package/src/js/pds-core/pds-query.js +582 -571
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* A tab panel used as a child of `<pds-tabstrip>`. Each panel becomes a tab
|
|
3
|
+
* with its button label derived from the `label` attribute.
|
|
4
|
+
*
|
|
2
5
|
* @element pds-tabpanel
|
|
3
6
|
*
|
|
4
|
-
* @attr {string} label - Label
|
|
7
|
+
* @attr {string} label - Label text displayed on the tab button
|
|
5
8
|
* @attr {string} id - Unique identifier for the panel (auto-generated if not provided)
|
|
6
9
|
*
|
|
7
|
-
* @slot - Content
|
|
10
|
+
* @slot - Content displayed when this tab is active
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```html
|
|
14
|
+
* <pds-tabpanel label="Settings">
|
|
15
|
+
* <p>Settings content here.</p>
|
|
16
|
+
* </pds-tabpanel>
|
|
17
|
+
* ```
|
|
8
18
|
*/
|
|
9
19
|
class TabPanel extends HTMLElement {
|
|
10
20
|
connectedCallback() {
|
|
@@ -36,18 +46,39 @@ class TabPanel extends HTMLElement {
|
|
|
36
46
|
customElements.define("pds-tabpanel", TabPanel);
|
|
37
47
|
|
|
38
48
|
/**
|
|
39
|
-
* Tab navigation component that
|
|
49
|
+
* Tab navigation component that displays content in switchable panels.
|
|
50
|
+
*
|
|
51
|
+
* Use `<pds-tabpanel>` children with a `label` attribute to define each tab.
|
|
52
|
+
* The component auto-generates navigation buttons and handles URL hash synchronization.
|
|
40
53
|
*
|
|
41
54
|
* @element pds-tabstrip
|
|
55
|
+
*
|
|
42
56
|
* @fires tabchange - Fired when the active tab changes. Detail: `{ oldTab: string|null, newTab: string }`
|
|
43
57
|
*
|
|
44
|
-
* @attr {string} label - Accessible label announced for the tablist
|
|
58
|
+
* @attr {string} label - Accessible label announced for the tablist (default: "Tabs")
|
|
45
59
|
* @attr {string} selected - Identifier of the currently active panel (synced with the location hash)
|
|
46
60
|
*
|
|
47
|
-
* @slot -
|
|
61
|
+
* @slot - One or more `<pds-tabpanel>` elements, each with a `label` attribute
|
|
48
62
|
*
|
|
49
63
|
* @csspart tabs - Navigation container comprising the clickable tab buttons
|
|
50
64
|
* @cssprop --color-accent-400 - Color of the active tab indicator underline
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```html
|
|
68
|
+
* <pds-tabstrip label="Account settings">
|
|
69
|
+
* <pds-tabpanel label="General">
|
|
70
|
+
* <p>General settings content here.</p>
|
|
71
|
+
* </pds-tabpanel>
|
|
72
|
+
*
|
|
73
|
+
* <pds-tabpanel label="Security">
|
|
74
|
+
* <p>Security settings content here.</p>
|
|
75
|
+
* </pds-tabpanel>
|
|
76
|
+
*
|
|
77
|
+
* <pds-tabpanel label="Notifications">
|
|
78
|
+
* <p>Notification preferences here.</p>
|
|
79
|
+
* </pds-tabpanel>
|
|
80
|
+
* </pds-tabstrip>
|
|
81
|
+
* ```
|
|
51
82
|
*/
|
|
52
83
|
class TabStrip extends HTMLElement {
|
|
53
84
|
#shadow = this.attachShadow({ mode: "open" });
|
|
@@ -1306,7 +1306,8 @@
|
|
|
1306
1306
|
},
|
|
1307
1307
|
{
|
|
1308
1308
|
"kind": "method",
|
|
1309
|
-
"name": "updateLayout"
|
|
1309
|
+
"name": "updateLayout",
|
|
1310
|
+
"description": "Updates the layout based on the current viewport width and breakpoint.\nToggles mobile mode and adjusts panel styles."
|
|
1310
1311
|
},
|
|
1311
1312
|
{
|
|
1312
1313
|
"kind": "method",
|
|
@@ -1332,11 +1333,13 @@
|
|
|
1332
1333
|
},
|
|
1333
1334
|
{
|
|
1334
1335
|
"kind": "method",
|
|
1335
|
-
"name": "toggleMobileView"
|
|
1336
|
+
"name": "toggleMobileView",
|
|
1337
|
+
"description": "Toggles the visibility of the primary panel in mobile view."
|
|
1336
1338
|
},
|
|
1337
1339
|
{
|
|
1338
1340
|
"kind": "method",
|
|
1339
|
-
"name": "closeMobileView"
|
|
1341
|
+
"name": "closeMobileView",
|
|
1342
|
+
"description": "Closes the primary panel in mobile view."
|
|
1340
1343
|
},
|
|
1341
1344
|
{
|
|
1342
1345
|
"kind": "method",
|
|
@@ -1429,11 +1432,11 @@
|
|
|
1429
1432
|
"declarations": [
|
|
1430
1433
|
{
|
|
1431
1434
|
"kind": "class",
|
|
1432
|
-
"description": "",
|
|
1435
|
+
"description": "A tab panel used as a child of `<pds-tabstrip>`. Each panel becomes a tab\nwith its button label derived from the `label` attribute.",
|
|
1433
1436
|
"name": "TabPanel",
|
|
1434
1437
|
"slots": [
|
|
1435
1438
|
{
|
|
1436
|
-
"description": "Content
|
|
1439
|
+
"description": "Content displayed when this tab is active",
|
|
1437
1440
|
"name": ""
|
|
1438
1441
|
}
|
|
1439
1442
|
],
|
|
@@ -1455,7 +1458,7 @@
|
|
|
1455
1458
|
"type": {
|
|
1456
1459
|
"text": "string"
|
|
1457
1460
|
},
|
|
1458
|
-
"description": "Label
|
|
1461
|
+
"description": "Label text displayed on the tab button",
|
|
1459
1462
|
"name": "label"
|
|
1460
1463
|
},
|
|
1461
1464
|
{
|
|
@@ -1474,7 +1477,7 @@
|
|
|
1474
1477
|
},
|
|
1475
1478
|
{
|
|
1476
1479
|
"kind": "class",
|
|
1477
|
-
"description": "Tab navigation component that
|
|
1480
|
+
"description": "Tab navigation component that displays content in switchable panels.\n\nUse `<pds-tabpanel>` children with a `label` attribute to define each tab.\nThe component auto-generates navigation buttons and handles URL hash synchronization.",
|
|
1478
1481
|
"name": "TabStrip",
|
|
1479
1482
|
"cssProperties": [
|
|
1480
1483
|
{
|
|
@@ -1490,7 +1493,7 @@
|
|
|
1490
1493
|
],
|
|
1491
1494
|
"slots": [
|
|
1492
1495
|
{
|
|
1493
|
-
"description": "
|
|
1496
|
+
"description": "One or more `<pds-tabpanel>` elements, each with a `label` attribute",
|
|
1494
1497
|
"name": ""
|
|
1495
1498
|
}
|
|
1496
1499
|
],
|
|
@@ -1515,7 +1518,7 @@
|
|
|
1515
1518
|
"type": {
|
|
1516
1519
|
"text": "string"
|
|
1517
1520
|
},
|
|
1518
|
-
"description": "Accessible label announced for the tablist",
|
|
1521
|
+
"description": "Accessible label announced for the tablist (default: \"Tabs\")",
|
|
1519
1522
|
"name": "label"
|
|
1520
1523
|
},
|
|
1521
1524
|
{
|
|
@@ -1853,7 +1853,7 @@
|
|
|
1853
1853
|
"dataAttributes": [],
|
|
1854
1854
|
"metadata": {
|
|
1855
1855
|
"generator": "PDS CSS Data Generator",
|
|
1856
|
-
"generatedAt": "2025-12-
|
|
1856
|
+
"generatedAt": "2025-12-19T15:38:18.395Z",
|
|
1857
1857
|
"totalProperties": 165,
|
|
1858
1858
|
"totalClasses": 91,
|
|
1859
1859
|
"totalAttributes": 0
|
|
@@ -749,11 +749,11 @@
|
|
|
749
749
|
},
|
|
750
750
|
{
|
|
751
751
|
"name": "pds-tabpanel",
|
|
752
|
-
"description": "
|
|
752
|
+
"description": "A tab panel used as a child of `<pds-tabstrip>`. Each panel becomes a tab\nwith its button label derived from the `label` attribute.",
|
|
753
753
|
"attributes": [
|
|
754
754
|
{
|
|
755
755
|
"name": "label",
|
|
756
|
-
"description": "Label
|
|
756
|
+
"description": "Label text displayed on the tab button"
|
|
757
757
|
},
|
|
758
758
|
{
|
|
759
759
|
"name": "id",
|
|
@@ -763,11 +763,11 @@
|
|
|
763
763
|
},
|
|
764
764
|
{
|
|
765
765
|
"name": "pds-tabstrip",
|
|
766
|
-
"description": "Tab navigation component that
|
|
766
|
+
"description": "Tab navigation component that displays content in switchable panels.\n\nUse `<pds-tabpanel>` children with a `label` attribute to define each tab.\nThe component auto-generates navigation buttons and handles URL hash synchronization.",
|
|
767
767
|
"attributes": [
|
|
768
768
|
{
|
|
769
769
|
"name": "label",
|
|
770
|
-
"description": "Accessible label announced for the tablist"
|
|
770
|
+
"description": "Accessible label announced for the tablist (default: \"Tabs\")"
|
|
771
771
|
},
|
|
772
772
|
{
|
|
773
773
|
"name": "selected",
|
|
@@ -1645,6 +1645,36 @@ html[data-theme="dark"] .liquid-glass {
|
|
|
1645
1645
|
height: 0;
|
|
1646
1646
|
}
|
|
1647
1647
|
|
|
1648
|
+
/* Labeled horizontal rule: <hr data-content="OR"> */
|
|
1649
|
+
:where(hr[data-content]) {
|
|
1650
|
+
position: relative;
|
|
1651
|
+
border: none;
|
|
1652
|
+
text-align: center;
|
|
1653
|
+
height: auto;
|
|
1654
|
+
overflow: visible;
|
|
1655
|
+
|
|
1656
|
+
&::before {
|
|
1657
|
+
content: "";
|
|
1658
|
+
position: absolute;
|
|
1659
|
+
left: 0;
|
|
1660
|
+
top: 50%;
|
|
1661
|
+
width: 100%;
|
|
1662
|
+
height: 1px;
|
|
1663
|
+
background: linear-gradient(to right, transparent, var(--color-border), transparent);
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
&::after {
|
|
1667
|
+
content: attr(data-content);
|
|
1668
|
+
position: relative;
|
|
1669
|
+
display: inline-block;
|
|
1670
|
+
padding: 0 var(--spacing-3);
|
|
1671
|
+
background-color: var(--color-surface-base);
|
|
1672
|
+
color: var(--color-text-muted);
|
|
1673
|
+
font-size: var(--font-size-sm);
|
|
1674
|
+
line-height: var(--font-line-height-normal);
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1648
1678
|
:where(dl) {
|
|
1649
1679
|
margin: 0 0 var(--spacing-4) 0;
|
|
1650
1680
|
}
|
|
@@ -3365,40 +3395,40 @@ pds-tabstrip {
|
|
|
3365
3395
|
::-webkit-scrollbar {
|
|
3366
3396
|
width: 12px;
|
|
3367
3397
|
height: 12px;
|
|
3398
|
+
}
|
|
3399
|
+
|
|
3400
|
+
::-webkit-scrollbar-track {
|
|
3401
|
+
background: transparent;
|
|
3402
|
+
}
|
|
3403
|
+
|
|
3404
|
+
::-webkit-scrollbar-thumb {
|
|
3405
|
+
background: var(--color-secondary-300);
|
|
3406
|
+
border-radius: var(--radius-full);
|
|
3407
|
+
border: 3px solid transparent;
|
|
3408
|
+
background-clip: padding-box;
|
|
3409
|
+
transition: background-color var(--transition-fast);
|
|
3368
3410
|
|
|
3369
|
-
|
|
3370
|
-
background:
|
|
3411
|
+
&:hover {
|
|
3412
|
+
background: var(--color-secondary-400);
|
|
3413
|
+
border: 2px solid transparent;
|
|
3414
|
+
background-clip: padding-box;
|
|
3371
3415
|
}
|
|
3372
3416
|
|
|
3373
|
-
|
|
3374
|
-
background: var(--color-secondary-
|
|
3375
|
-
border
|
|
3376
|
-
border: 3px solid transparent;
|
|
3417
|
+
&:active {
|
|
3418
|
+
background: var(--color-secondary-500);
|
|
3419
|
+
border: 2px solid transparent;
|
|
3377
3420
|
background-clip: padding-box;
|
|
3378
|
-
|
|
3421
|
+
}
|
|
3422
|
+
|
|
3423
|
+
@media (prefers-color-scheme: dark) {
|
|
3424
|
+
background: var(--color-secondary-600);
|
|
3379
3425
|
|
|
3380
3426
|
&:hover {
|
|
3381
|
-
background: var(--color-secondary-400);
|
|
3382
|
-
border: 2px solid transparent;
|
|
3383
|
-
background-clip: padding-box;
|
|
3384
|
-
}
|
|
3385
|
-
|
|
3386
|
-
&:active {
|
|
3387
3427
|
background: var(--color-secondary-500);
|
|
3388
|
-
border: 2px solid transparent;
|
|
3389
|
-
background-clip: padding-box;
|
|
3390
3428
|
}
|
|
3391
3429
|
|
|
3392
|
-
|
|
3393
|
-
background: var(--color-secondary-
|
|
3394
|
-
|
|
3395
|
-
&:hover {
|
|
3396
|
-
background: var(--color-secondary-500);
|
|
3397
|
-
}
|
|
3398
|
-
|
|
3399
|
-
&:active {
|
|
3400
|
-
background: var(--color-secondary-400);
|
|
3401
|
-
}
|
|
3430
|
+
&:active {
|
|
3431
|
+
background: var(--color-secondary-400);
|
|
3402
3432
|
}
|
|
3403
3433
|
}
|
|
3404
3434
|
}
|
|
@@ -3843,6 +3873,11 @@ nav[data-dropdown] {
|
|
|
3843
3873
|
flex-direction: row;
|
|
3844
3874
|
}
|
|
3845
3875
|
|
|
3876
|
+
/* Flex grow - fill remaining space */
|
|
3877
|
+
.grow {
|
|
3878
|
+
flex: 1 1 0%;
|
|
3879
|
+
}
|
|
3880
|
+
|
|
3846
3881
|
/* Flex alignment */
|
|
3847
3882
|
.items-start { align-items: flex-start; }
|
|
3848
3883
|
.items-center { align-items: center; }
|
|
@@ -3857,6 +3892,34 @@ nav[data-dropdown] {
|
|
|
3857
3892
|
.justify-around { justify-content: space-around; }
|
|
3858
3893
|
.justify-evenly { justify-content: space-evenly; }
|
|
3859
3894
|
|
|
3895
|
+
/* Text alignment utilities */
|
|
3896
|
+
.text-left { text-align: left; }
|
|
3897
|
+
.text-center { text-align: center; }
|
|
3898
|
+
.text-right { text-align: right; }
|
|
3899
|
+
|
|
3900
|
+
/* Text overflow utility */
|
|
3901
|
+
.truncate {
|
|
3902
|
+
overflow: hidden;
|
|
3903
|
+
text-overflow: ellipsis;
|
|
3904
|
+
white-space: nowrap;
|
|
3905
|
+
}
|
|
3906
|
+
|
|
3907
|
+
/* Max-width utilities (semantic breakpoints) */
|
|
3908
|
+
.max-w-sm { max-width: 400px; }
|
|
3909
|
+
.max-w-md { max-width: 600px; }
|
|
3910
|
+
.max-w-lg { max-width: 800px; }
|
|
3911
|
+
.max-w-xl { max-width: 1200px; }
|
|
3912
|
+
|
|
3913
|
+
/* Stack utilities - vertical rhythm for stacked elements */
|
|
3914
|
+
.stack-sm { display: flex; flex-direction: column; gap: var(--spacing-2); }
|
|
3915
|
+
.stack-md { display: flex; flex-direction: column; gap: var(--spacing-4); }
|
|
3916
|
+
.stack-lg { display: flex; flex-direction: column; gap: var(--spacing-6); }
|
|
3917
|
+
.stack-xl { display: flex; flex-direction: column; gap: var(--spacing-8); }
|
|
3918
|
+
|
|
3919
|
+
/* Section spacing - for major content blocks */
|
|
3920
|
+
.section { padding-block: var(--spacing-8); }
|
|
3921
|
+
.section-lg { padding-block: var(--spacing-12); }
|
|
3922
|
+
|
|
3860
3923
|
/* Responsive helpers */
|
|
3861
3924
|
@media (max-width: ${breakpoints.md - 1}px) {
|
|
3862
3925
|
.mobile-stack { flex-direction: column; }
|
|
@@ -3883,29 +3946,29 @@ nav[data-dropdown] {
|
|
|
3883
3946
|
opacity: var(--backdrop-opacity, 1);
|
|
3884
3947
|
pointer-events: auto;
|
|
3885
3948
|
}
|
|
3949
|
+
}
|
|
3886
3950
|
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3951
|
+
/* Backdrop variants */
|
|
3952
|
+
.backdrop-light {
|
|
3953
|
+
--backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2));
|
|
3954
|
+
--backdrop-brightness: 1.1;
|
|
3955
|
+
}
|
|
3892
3956
|
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3957
|
+
.backdrop-dark {
|
|
3958
|
+
--backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5));
|
|
3959
|
+
--backdrop-brightness: 0.6;
|
|
3960
|
+
}
|
|
3897
3961
|
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3962
|
+
.backdrop-blur-sm {
|
|
3963
|
+
--backdrop-blur: 5px;
|
|
3964
|
+
}
|
|
3901
3965
|
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3966
|
+
.backdrop-blur-md {
|
|
3967
|
+
--backdrop-blur: 10px;
|
|
3968
|
+
}
|
|
3905
3969
|
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
}
|
|
3970
|
+
.backdrop-blur-lg {
|
|
3971
|
+
--backdrop-blur: 20px;
|
|
3909
3972
|
}
|
|
3910
3973
|
`
|
|
3911
3974
|
);
|
|
@@ -4640,23 +4703,23 @@ ${this.#generateTableStyles()}
|
|
|
4640
4703
|
background: var(--color-surface-base);
|
|
4641
4704
|
border-radius: var(--radius-md);
|
|
4642
4705
|
padding: var(--spacing-4);
|
|
4706
|
+
}
|
|
4643
4707
|
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4708
|
+
.card-elevated {
|
|
4709
|
+
background: var(--color-surface-elevated);
|
|
4710
|
+
box-shadow: var(--shadow-md);
|
|
4711
|
+
}
|
|
4648
4712
|
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4713
|
+
.card-outlined,
|
|
4714
|
+
.card-basic {
|
|
4715
|
+
background: var(--color-surface-base);
|
|
4716
|
+
border: 1px solid var(--color-border);
|
|
4717
|
+
}
|
|
4654
4718
|
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
}
|
|
4719
|
+
.card-interactive:hover {
|
|
4720
|
+
transform: translateY(-2px);
|
|
4721
|
+
box-shadow: var(--shadow-lg);
|
|
4722
|
+
transition: transform var(--transition-fast), box-shadow var(--transition-fast);
|
|
4660
4723
|
}
|
|
4661
4724
|
|
|
4662
4725
|
${this.#generateScrollbarStyles()}
|
|
@@ -4744,6 +4807,34 @@ ${this.#generateBorderGradientUtilities()}
|
|
|
4744
4807
|
pds-icon {
|
|
4745
4808
|
color: var(--surface-inverse-icon);
|
|
4746
4809
|
}
|
|
4810
|
+
|
|
4811
|
+
/* Default and secondary buttons on inverse - semi-transparent glass effect */
|
|
4812
|
+
& button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
|
|
4813
|
+
& .btn-secondary {
|
|
4814
|
+
background-color: rgba(255, 255, 255, 0.12);
|
|
4815
|
+
color: var(--surface-inverse-text);
|
|
4816
|
+
border-color: rgba(255, 255, 255, 0.25);
|
|
4817
|
+
|
|
4818
|
+
&:hover {
|
|
4819
|
+
background-color: rgba(255, 255, 255, 0.2);
|
|
4820
|
+
}
|
|
4821
|
+
|
|
4822
|
+
&:active {
|
|
4823
|
+
background-color: rgba(255, 255, 255, 0.28);
|
|
4824
|
+
}
|
|
4825
|
+
}
|
|
4826
|
+
|
|
4827
|
+
/* Ensure btn-primary stays vibrant on inverse */
|
|
4828
|
+
& .btn-primary {
|
|
4829
|
+
background-color: var(--color-primary-500);
|
|
4830
|
+
border-color: var(--color-primary-500);
|
|
4831
|
+
color: var(--color-primary-contrast, #ffffff);
|
|
4832
|
+
|
|
4833
|
+
&:hover {
|
|
4834
|
+
background-color: var(--color-primary-400);
|
|
4835
|
+
border-color: var(--color-primary-400);
|
|
4836
|
+
}
|
|
4837
|
+
}
|
|
4747
4838
|
}
|
|
4748
4839
|
|
|
4749
4840
|
/* Shadow utilities */
|