@pure-ds/core 0.4.15 → 0.4.17

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.
@@ -831,5 +831,5 @@ button.btn-xs {
831
831
  return html.toHTML();
832
832
  }
833
833
  }
834
- }
834
+
835
835
  customElements.define("pds-calendar", PdsCalendar);
@@ -39,12 +39,64 @@
39
39
  {
40
40
  "kind": "class",
41
41
  "description": "",
42
- "name": "anonymous_0",
42
+ "name": "PdsCalendar",
43
+ "cssProperties": [
44
+ {
45
+ "description": "Calendar background color",
46
+ "name": "--surface-bg"
47
+ },
48
+ {
49
+ "description": "Border color for calendar elements",
50
+ "name": "--surface-border"
51
+ },
52
+ {
53
+ "description": "Secondary text color",
54
+ "name": "--surface-text-secondary"
55
+ },
56
+ {
57
+ "description": "Primary color for events and highlights",
58
+ "name": "--color-primary-500"
59
+ },
60
+ {
61
+ "description": "Warning event color",
62
+ "name": "--color-warning-500"
63
+ },
64
+ {
65
+ "description": "Danger event color",
66
+ "name": "--color-danger-500"
67
+ },
68
+ {
69
+ "description": "Info event color",
70
+ "name": "--color-info-500"
71
+ }
72
+ ],
73
+ "cssParts": [
74
+ {
75
+ "description": "The main container for the calendar",
76
+ "name": "calendar-container"
77
+ },
78
+ {
79
+ "description": "The header containing month name and navigation",
80
+ "name": "calendar-header"
81
+ },
82
+ {
83
+ "description": "The grid container for the calendar days",
84
+ "name": "calendar"
85
+ },
86
+ {
87
+ "description": "Individual day cells",
88
+ "name": "day"
89
+ },
90
+ {
91
+ "description": "Event items within days",
92
+ "name": "task"
93
+ }
94
+ ],
43
95
  "members": [
44
96
  {
45
97
  "kind": "field",
46
98
  "name": "date",
47
- "description": "Gets the current date",
99
+ "description": "Gets or sets the current date being displayed",
48
100
  "parameters": [
49
101
  {
50
102
  "description": "Date string or Date object",
@@ -58,6 +110,9 @@
58
110
  "type": {
59
111
  "text": "Date"
60
112
  }
113
+ },
114
+ "type": {
115
+ "text": "Date"
61
116
  }
62
117
  },
63
118
  {
@@ -78,11 +133,19 @@
78
133
  "type": {
79
134
  "text": "CustomEvent"
80
135
  }
136
+ },
137
+ {
138
+ "description": "Dispatched after the calendar month is rendered with event fill capability",
139
+ "name": "pds-calendar#month-rendered"
81
140
  }
82
141
  ],
83
142
  "attributes": [
84
143
  {
85
- "name": "date"
144
+ "name": "date",
145
+ "type": {
146
+ "text": "String"
147
+ },
148
+ "description": "The date to display (defaults to current date). Accepts any valid date string"
86
149
  }
87
150
  ],
88
151
  "superclass": {
@@ -105,7 +168,7 @@
105
168
  "kind": "custom-element-definition",
106
169
  "name": "pds-calendar",
107
170
  "declaration": {
108
- "name": "anonymous_0",
171
+ "name": "PdsCalendar",
109
172
  "module": "public/assets/pds/components/pds-calendar.js"
110
173
  }
111
174
  }
@@ -118,7 +181,61 @@
118
181
  {
119
182
  "kind": "class",
120
183
  "description": "",
121
- "name": "anonymous_0",
184
+ "name": "PdsDrawer",
185
+ "cssProperties": [
186
+ {
187
+ "description": "Animation duration (default: var(--transition-normal))",
188
+ "name": "--drawer-duration"
189
+ },
190
+ {
191
+ "description": "Animation easing function (default: var(--easing-emphasized))",
192
+ "name": "--drawer-easing"
193
+ },
194
+ {
195
+ "description": "Maximum height when position is top/bottom (default: 70vh)",
196
+ "name": "--drawer-max-height"
197
+ },
198
+ {
199
+ "description": "Minimum height when position is top/bottom (default: auto)",
200
+ "name": "--drawer-min-height"
201
+ }
202
+ ],
203
+ "cssParts": [
204
+ {
205
+ "description": "The semi-transparent backdrop overlay",
206
+ "name": "backdrop"
207
+ },
208
+ {
209
+ "description": "The drawer panel container",
210
+ "name": "panel"
211
+ },
212
+ {
213
+ "description": "The drawer header section",
214
+ "name": "header"
215
+ },
216
+ {
217
+ "description": "The close button",
218
+ "name": "close-button"
219
+ },
220
+ {
221
+ "description": "The drag handle indicator",
222
+ "name": "grab-handle"
223
+ },
224
+ {
225
+ "description": "The drawer content section",
226
+ "name": "content"
227
+ }
228
+ ],
229
+ "slots": [
230
+ {
231
+ "description": "Header content for the drawer",
232
+ "name": "drawer-header"
233
+ },
234
+ {
235
+ "description": "Main content of the drawer",
236
+ "name": "drawer-content"
237
+ }
238
+ ],
122
239
  "members": [
123
240
  {
124
241
  "kind": "field",
@@ -310,6 +427,12 @@
310
427
  "default": "false"
311
428
  }
312
429
  ],
430
+ "events": [
431
+ {
432
+ "description": "Fired when the drawer opens or closes",
433
+ "name": "toggle"
434
+ }
435
+ ],
313
436
  "attributes": [
314
437
  {
315
438
  "name": "open",
@@ -368,7 +491,7 @@
368
491
  "superclass": {
369
492
  "name": "HTMLElement"
370
493
  },
371
- "tagName": "pds-calendar",
494
+ "tagName": "pds-drawer",
372
495
  "customElement": true
373
496
  }
374
497
  ],
@@ -377,7 +500,7 @@
377
500
  "kind": "custom-element-definition",
378
501
  "name": "pds-drawer",
379
502
  "declaration": {
380
- "name": "anonymous_0",
503
+ "name": "PdsDrawer",
381
504
  "module": "public/assets/pds/components/pds-drawer.js"
382
505
  }
383
506
  }
@@ -404,6 +527,18 @@
404
527
  "static": true,
405
528
  "default": "new Map()"
406
529
  },
530
+ {
531
+ "kind": "field",
532
+ "name": "externalIconCache",
533
+ "static": true,
534
+ "default": "new Map()"
535
+ },
536
+ {
537
+ "kind": "field",
538
+ "name": "externalIconPromises",
539
+ "static": true,
540
+ "default": "new Map()"
541
+ },
407
542
  {
408
543
  "kind": "field",
409
544
  "name": "instances",
@@ -421,6 +556,26 @@
421
556
  }
422
557
  }
423
558
  },
559
+ {
560
+ "kind": "method",
561
+ "name": "fetchExternalIcon",
562
+ "static": true,
563
+ "parameters": [
564
+ {
565
+ "name": "iconName",
566
+ "description": "The icon name (without .svg extension)",
567
+ "type": {
568
+ "text": "string"
569
+ }
570
+ }
571
+ ],
572
+ "description": "Fetch an external SVG icon and cache it",
573
+ "return": {
574
+ "type": {
575
+ "text": "Promise<boolean>"
576
+ }
577
+ }
578
+ },
424
579
  {
425
580
  "kind": "method",
426
581
  "name": "ensureInlineSprite",
@@ -1174,6 +1329,14 @@
1174
1329
  {
1175
1330
  "description": "The scrollable container element",
1176
1331
  "name": "viewport"
1332
+ },
1333
+ {
1334
+ "description": "The previous/left scroll navigation button",
1335
+ "name": "prev"
1336
+ },
1337
+ {
1338
+ "description": "The next/right scroll navigation button",
1339
+ "name": "next"
1177
1340
  }
1178
1341
  ],
1179
1342
  "slots": [
@@ -1278,23 +1441,89 @@
1278
1441
  {
1279
1442
  "kind": "class",
1280
1443
  "description": "",
1281
- "name": "anonymous_0",
1444
+ "name": "PdsSplitpanel",
1445
+ "cssProperties": [
1446
+ {
1447
+ "description": "Width of the left panel in horizontal layout.",
1448
+ "name": "--left-width"
1449
+ },
1450
+ {
1451
+ "description": "Color of the splitter bar.",
1452
+ "name": "--color-border"
1453
+ },
1454
+ {
1455
+ "description": "Background color of the left panel in mobile view.",
1456
+ "name": "--color-surface-base"
1457
+ },
1458
+ {
1459
+ "description": "Transition duration for the mobile panel animation.",
1460
+ "name": "--transition-fast"
1461
+ },
1462
+ {
1463
+ "description": "Positioning spacing for the mobile toggle button.",
1464
+ "name": "--spacing-4"
1465
+ },
1466
+ {
1467
+ "description": "Padding for the mobile toggle button.",
1468
+ "name": "--spacing-1"
1469
+ },
1470
+ {
1471
+ "description": "Padding for the mobile toggle button.",
1472
+ "name": "--spacing-2"
1473
+ }
1474
+ ],
1475
+ "cssParts": [
1476
+ {
1477
+ "description": "The mobile toggle button.",
1478
+ "name": "toggle"
1479
+ },
1480
+ {
1481
+ "description": "The draggable splitter bar between panels.",
1482
+ "name": "splitter"
1483
+ }
1484
+ ],
1485
+ "slots": [
1486
+ {
1487
+ "description": "Content for the left (or top) panel.",
1488
+ "name": "left"
1489
+ },
1490
+ {
1491
+ "description": "Content for the right (or bottom) panel.",
1492
+ "name": "right"
1493
+ }
1494
+ ],
1282
1495
  "members": [
1283
1496
  {
1284
1497
  "kind": "field",
1285
- "name": "layout"
1498
+ "name": "layout",
1499
+ "type": {
1500
+ "text": "String"
1501
+ },
1502
+ "description": "Gets or sets the layout direction."
1286
1503
  },
1287
1504
  {
1288
1505
  "kind": "field",
1289
- "name": "defaultSplit"
1506
+ "name": "defaultSplit",
1507
+ "type": {
1508
+ "text": "String"
1509
+ },
1510
+ "description": "Gets or sets the default split size."
1290
1511
  },
1291
1512
  {
1292
1513
  "kind": "field",
1293
- "name": "breakpoint"
1514
+ "name": "breakpoint",
1515
+ "type": {
1516
+ "text": "Number"
1517
+ },
1518
+ "description": "Gets or sets the mobile breakpoint."
1294
1519
  },
1295
1520
  {
1296
1521
  "kind": "field",
1297
- "name": "open"
1522
+ "name": "open",
1523
+ "type": {
1524
+ "text": "Boolean"
1525
+ },
1526
+ "description": "Gets or sets the open state of the mobile panel."
1298
1527
  },
1299
1528
  {
1300
1529
  "kind": "method",
@@ -1396,22 +1625,38 @@
1396
1625
  ],
1397
1626
  "attributes": [
1398
1627
  {
1399
- "name": "layout"
1628
+ "name": "layout",
1629
+ "type": {
1630
+ "text": "String"
1631
+ },
1632
+ "description": "The layout direction of the panels. Can be \"horizontal\" or \"vertical\". Defaults to \"horizontal\"."
1400
1633
  },
1401
1634
  {
1402
- "name": "defaultsplit"
1635
+ "name": "defaultsplit",
1636
+ "type": {
1637
+ "text": "String"
1638
+ },
1639
+ "description": "The initial size of the primary (left/top) panel. Defaults to \"450px\"."
1403
1640
  },
1404
1641
  {
1405
- "name": "breakpoint"
1642
+ "name": "breakpoint",
1643
+ "type": {
1644
+ "text": "Number"
1645
+ },
1646
+ "description": "The viewport width in pixels below which the component switches to mobile view. Defaults to 1024."
1406
1647
  },
1407
1648
  {
1408
- "name": "open"
1649
+ "name": "open",
1650
+ "type": {
1651
+ "text": "Boolean"
1652
+ },
1653
+ "description": "Controls the visibility of the primary panel in mobile view."
1409
1654
  }
1410
1655
  ],
1411
1656
  "superclass": {
1412
1657
  "name": "HTMLElement"
1413
1658
  },
1414
- "tagName": "pds-calendar",
1659
+ "tagName": "pds-splitpanel",
1415
1660
  "customElement": true
1416
1661
  }
1417
1662
  ],
@@ -1420,7 +1665,7 @@
1420
1665
  "kind": "custom-element-definition",
1421
1666
  "name": "pds-splitpanel",
1422
1667
  "declaration": {
1423
- "name": "anonymous_0",
1668
+ "name": "PdsSplitpanel",
1424
1669
  "module": "public/assets/pds/components/pds-splitpanel.js"
1425
1670
  }
1426
1671
  }
@@ -1149,6 +1149,8 @@ export class Generator {
1149
1149
  mesh,
1150
1150
  ].join("");
1151
1151
 
1152
+ // Dark mode selector only - .surface-inverse is handled separately in utilities
1153
+ // to avoid inheriting the full dark palette (which would override --color-surface-inverse)
1152
1154
  return `html[data-theme="dark"] {\n${body}}\n`;
1153
1155
  }
1154
1156
 
@@ -1589,12 +1591,13 @@ html[data-theme="dark"] .liquid-glass {
1589
1591
 
1590
1592
  :where(blockquote) {
1591
1593
  margin: 0 0 var(--spacing-4) 0;
1592
- padding: var(--spacing-4) var(--spacing-6);
1594
+ padding: var(--spacing-6) var(--spacing-8);
1593
1595
  border-left: 4px solid var(--color-primary-500);
1594
- background-color: var(--color-surface-subtle);
1595
- border-radius: var(--radius-md);
1596
- font-style: italic;
1597
- color: var(--color-text-secondary);
1596
+ background-color: var(--color-surface-elevated);
1597
+ border-radius: var(--radius-none);
1598
+ font-size: var(--font-size-lg);
1599
+ line-height: var(--line-height-relaxed);
1600
+ color: var(--color-text-primary);
1598
1601
 
1599
1602
  :where(p):last-child {
1600
1603
  margin-bottom: 0;
@@ -1602,14 +1605,10 @@ html[data-theme="dark"] .liquid-glass {
1602
1605
 
1603
1606
  :where(cite) {
1604
1607
  display: block;
1605
- margin-top: var(--spacing-2);
1606
- font-size: var(--font-size-sm);
1608
+ margin-top: var(--spacing-4);
1609
+ font-size: var(--font-size-base);
1607
1610
  font-style: normal;
1608
- color: var(--color-text-tertiary);
1609
-
1610
- &::before {
1611
- content: "— ";
1612
- }
1611
+ color: var(--color-primary-500);
1613
1612
  }
1614
1613
  }
1615
1614
 
@@ -4447,40 +4446,27 @@ ${this.#generateBorderGradientUtilities()}
4447
4446
  }
4448
4447
 
4449
4448
 
4450
- /* Inverse surface (dark) using PDS tokens; text/icons inherit currentColor */
4449
+ /*
4450
+ * SURFACE-INVERSE: Local Theme Context Flip
4451
+ *
4452
+ * We can't simply add .surface-inverse to the dark mode selector because that would
4453
+ * also apply the dark color PALETTE (grays, surfaces, etc.), which would override
4454
+ * --color-surface-inverse itself. Instead, we duplicate only the SEMANTIC tokens.
4455
+ *
4456
+ * Light theme .surface-inverse → dark semantic tokens
4457
+ * Dark theme .surface-inverse → light semantic tokens (flip back)
4458
+ */
4459
+
4460
+ /* Surface-inverse visual properties (shared, uses smart surface tokens) */
4451
4461
  .surface-inverse {
4452
4462
  background-color: var(--color-surface-inverse);
4453
- /* Ensure foregrounds inside use the correct smart-surface tokens */
4454
4463
  color: var(--surface-inverse-text);
4455
- --color-text-primary: var(--surface-inverse-text);
4456
- --color-text-secondary: var(--surface-inverse-text-secondary);
4457
- --color-text-muted: var(--surface-inverse-text-muted);
4458
- /* Ensure code/pre and other muted surfaces have contrast on inverse */
4459
- --color-surface-muted: rgba(255, 255, 255, 0.08);
4460
- /* Optional: adjust borders/shadows if utilities/components read these */
4461
- --color-border: var(--surface-inverse-border);
4462
4464
 
4463
4465
  pds-icon {
4464
4466
  color: var(--surface-inverse-icon);
4465
4467
  }
4466
4468
 
4467
- /* Default and secondary buttons on inverse - semi-transparent glass effect */
4468
- & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4469
- & .btn-secondary {
4470
- background-color: rgba(255, 255, 255, 0.12);
4471
- color: var(--surface-inverse-text);
4472
- border-color: rgba(255, 255, 255, 0.25);
4473
-
4474
- &:hover {
4475
- background-color: rgba(255, 255, 255, 0.2);
4476
- }
4477
-
4478
- &:active {
4479
- background-color: rgba(255, 255, 255, 0.28);
4480
- }
4481
- }
4482
-
4483
- /* Ensure btn-primary stays vibrant on inverse */
4469
+ /* btn-primary stays vibrant in any context */
4484
4470
  & .btn-primary {
4485
4471
  background-color: var(--color-primary-500);
4486
4472
  border-color: var(--color-primary-500);
@@ -4493,6 +4479,70 @@ ${this.#generateBorderGradientUtilities()}
4493
4479
  }
4494
4480
  }
4495
4481
 
4482
+ /* Light-mode inverse: apply dark semantic tokens */
4483
+ html:not([data-theme="dark"]) .surface-inverse {
4484
+ --color-text-primary: var(--color-gray-100);
4485
+ --color-text-secondary: var(--color-gray-300);
4486
+ --color-text-muted: var(--color-gray-400);
4487
+ --color-border: var(--color-gray-700);
4488
+ --color-input-bg: var(--color-gray-800);
4489
+ --color-input-disabled-bg: var(--color-gray-900);
4490
+ --color-input-disabled-text: var(--color-gray-600);
4491
+ --color-code-bg: var(--color-gray-800);
4492
+ --color-surface-muted: rgba(255, 255, 255, 0.08);
4493
+
4494
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4495
+ & .btn-secondary {
4496
+ background-color: rgba(255, 255, 255, 0.12);
4497
+ color: var(--surface-inverse-text);
4498
+ border-color: rgba(255, 255, 255, 0.25);
4499
+
4500
+ &:hover { background-color: rgba(255, 255, 255, 0.2); }
4501
+ &:active { background-color: rgba(255, 255, 255, 0.28); }
4502
+ }
4503
+
4504
+ & select {
4505
+ background-color: rgba(255, 255, 255, 0.1);
4506
+ color: var(--surface-inverse-text);
4507
+ }
4508
+
4509
+ & a:not([class*="btn"]) {
4510
+ color: var(--color-primary-300, #7dd3fc);
4511
+ }
4512
+ }
4513
+
4514
+ /* Dark-mode inverse: flip back to light semantic tokens */
4515
+ html[data-theme="dark"] .surface-inverse {
4516
+ --color-text-primary: var(--color-gray-900);
4517
+ --color-text-secondary: var(--color-gray-600);
4518
+ --color-text-muted: var(--color-gray-600);
4519
+ --color-border: var(--color-gray-300);
4520
+ --color-input-bg: var(--color-surface-base);
4521
+ --color-input-disabled-bg: var(--color-gray-50);
4522
+ --color-input-disabled-text: var(--color-gray-500);
4523
+ --color-code-bg: var(--color-gray-100);
4524
+ --color-surface-muted: var(--color-gray-100);
4525
+
4526
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
4527
+ & .btn-secondary {
4528
+ background-color: rgba(0, 0, 0, 0.06);
4529
+ color: var(--surface-inverse-text);
4530
+ border-color: rgba(0, 0, 0, 0.15);
4531
+
4532
+ &:hover { background-color: rgba(0, 0, 0, 0.1); }
4533
+ &:active { background-color: rgba(0, 0, 0, 0.15); }
4534
+ }
4535
+
4536
+ & select {
4537
+ background-color: #ffffff;
4538
+ color: var(--surface-inverse-text);
4539
+ }
4540
+
4541
+ & a:not([class*="btn"]) {
4542
+ color: var(--color-primary-600, #0284c7);
4543
+ }
4544
+ }
4545
+
4496
4546
  /* Shadow utilities */
4497
4547
  .shadow-sm {
4498
4548
  box-shadow: var(--shadow-sm);
@@ -380,7 +380,7 @@ export const ontology = {
380
380
  utilities: {
381
381
  text: {
382
382
  alignment: [".text-left", ".text-center", ".text-right"],
383
- color: [".text-muted", ".text-primary", ".text-success", ".text-warning", ".text-danger", ".text-info"],
383
+ color: [".text-muted"],
384
384
  overflow: [".truncate"]
385
385
  },
386
386
  backdrop: {