@f-ewald/components 1.2.1 → 1.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.
Files changed (62) hide show
  1. package/README.md +16 -2
  2. package/custom-elements.json +1071 -79
  3. package/dist/action-bar.d.ts +24 -0
  4. package/dist/action-bar.d.ts.map +1 -0
  5. package/dist/action-bar.js +67 -0
  6. package/dist/action-bar.js.map +1 -0
  7. package/dist/app-shell.d.ts +86 -0
  8. package/dist/app-shell.d.ts.map +1 -0
  9. package/dist/app-shell.js +460 -0
  10. package/dist/app-shell.js.map +1 -0
  11. package/dist/app-sidebar.d.ts +44 -0
  12. package/dist/app-sidebar.d.ts.map +1 -0
  13. package/dist/app-sidebar.js +211 -0
  14. package/dist/app-sidebar.js.map +1 -0
  15. package/dist/content-divider.d.ts +23 -0
  16. package/dist/content-divider.d.ts.map +1 -0
  17. package/dist/content-divider.js +86 -0
  18. package/dist/content-divider.js.map +1 -0
  19. package/dist/form-actions.d.ts +27 -0
  20. package/dist/form-actions.d.ts.map +1 -0
  21. package/dist/form-actions.js +65 -0
  22. package/dist/form-actions.js.map +1 -0
  23. package/dist/index.d.ts +9 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/mcp-server.js +82 -5
  28. package/dist/mcp-server.js.map +1 -1
  29. package/dist/page-header.d.ts +27 -0
  30. package/dist/page-header.d.ts.map +1 -0
  31. package/dist/page-header.js +106 -0
  32. package/dist/page-header.js.map +1 -0
  33. package/dist/pagination-nav.d.ts +34 -0
  34. package/dist/pagination-nav.d.ts.map +1 -0
  35. package/dist/pagination-nav.js +144 -0
  36. package/dist/pagination-nav.js.map +1 -0
  37. package/dist/timeline-container.d.ts +22 -0
  38. package/dist/timeline-container.d.ts.map +1 -0
  39. package/dist/timeline-container.js +42 -0
  40. package/dist/timeline-container.js.map +1 -0
  41. package/dist/timeline-entry.d.ts +31 -0
  42. package/dist/timeline-entry.d.ts.map +1 -0
  43. package/dist/timeline-entry.js +170 -0
  44. package/dist/timeline-entry.js.map +1 -0
  45. package/docs/action-bar.md +41 -0
  46. package/docs/app-shell.md +85 -0
  47. package/docs/app-sidebar.md +69 -0
  48. package/docs/content-divider.md +47 -0
  49. package/docs/design-language.md +74 -1
  50. package/docs/form-actions.md +43 -0
  51. package/docs/layouts/detail-only.md +52 -0
  52. package/docs/layouts/form-page.md +52 -0
  53. package/docs/layouts/list-detail.md +52 -0
  54. package/docs/layouts/list-only.md +50 -0
  55. package/docs/layouts/record-detail.md +88 -0
  56. package/docs/mcp-evaluation.md +21 -0
  57. package/docs/page-header.md +47 -0
  58. package/docs/pagination-nav.md +54 -0
  59. package/docs/timeline-container.md +44 -0
  60. package/docs/timeline-entry.md +52 -0
  61. package/llms.txt +251 -0
  62. package/package.json +1 -1
@@ -2,6 +2,52 @@
2
2
  "schemaVersion": "1.0.0",
3
3
  "readme": "",
4
4
  "modules": [
5
+ {
6
+ "kind": "javascript-module",
7
+ "path": "src/action-bar.ts",
8
+ "declarations": [
9
+ {
10
+ "kind": "class",
11
+ "description": "Toolbar that sits directly above a list or table: a left cluster for\nsearch and filters and a right cluster for record actions (create, delete,\nbulk actions). It's a presentational layout container only — drop any\ncontrols (`autocomplete-input`, `multi-select`, `ui-button`, …) into the\n`start` and `end` slots; the bar owns none of their behavior and adds no\nsearch field of its own. The two clusters wrap onto separate rows when the\nbar is too narrow.",
12
+ "name": "ActionBar",
13
+ "slots": [
14
+ {
15
+ "description": "Left cluster: search and filter controls.",
16
+ "name": "start"
17
+ },
18
+ {
19
+ "description": "Right cluster: record actions (create, delete, …).",
20
+ "name": "end"
21
+ }
22
+ ],
23
+ "members": [],
24
+ "superclass": {
25
+ "name": "LitElement",
26
+ "package": "lit"
27
+ },
28
+ "tagName": "action-bar",
29
+ "customElement": true
30
+ }
31
+ ],
32
+ "exports": [
33
+ {
34
+ "kind": "js",
35
+ "name": "ActionBar",
36
+ "declaration": {
37
+ "name": "ActionBar",
38
+ "module": "src/action-bar.ts"
39
+ }
40
+ },
41
+ {
42
+ "kind": "custom-element-definition",
43
+ "name": "action-bar",
44
+ "declaration": {
45
+ "name": "ActionBar",
46
+ "module": "src/action-bar.ts"
47
+ }
48
+ }
49
+ ]
50
+ },
5
51
  {
6
52
  "kind": "javascript-module",
7
53
  "path": "src/address-autocomplete.ts",
@@ -860,6 +906,415 @@
860
906
  }
861
907
  ]
862
908
  },
909
+ {
910
+ "kind": "javascript-module",
911
+ "path": "src/app-shell.ts",
912
+ "declarations": [
913
+ {
914
+ "kind": "class",
915
+ "description": "The dashboard page shell: a slot-based CSS-grid backbone that arranges a\nfull-height sidebar, a top bar, the main content, an optional right-hand\ndetail column, and an optional footer. It owns the responsive behavior so\nconsumers don't re-implement it — above the shared 48rem breakpoint the\nsidebar collapses to an icon rail and the detail region is an inline column;\nat or below it the sidebar becomes an off-canvas drawer and the detail region\nan overlay, both dismissed by a scrim or Escape.\n\nWidths are tunable per instance via `--component-sidebar-width` (16rem),\n`--component-sidebar-rail-width` (3.5rem), and `--component-topbar-height`\n(3rem); the detail column reuses the 20rem/25rem panel widths. The main\ncontent area is white by default — override it with\n`--component-main-background`. Give the shell a height (e.g. `height: 100vh`)\nso the sidebar and main can size and scroll.\n\nThe built-in top-bar button toggles the sidebar, and so does pressing `[`\nanywhere on the page (ignored while typing in a text field or with a\nmodifier held). Hovering or keyboard-focusing the toggle reveals a tooltip\nnaming the action and its `[` shortcut — the shortcut is not shown as\npermanent chrome.",
916
+ "name": "AppShell",
917
+ "slots": [
918
+ {
919
+ "description": "Main content area.",
920
+ "name": ""
921
+ },
922
+ {
923
+ "description": "Full-height navigation (typically `app-sidebar`).",
924
+ "name": "sidebar"
925
+ },
926
+ {
927
+ "description": "Top bar content, right of the built-in toggle.",
928
+ "name": "topbar"
929
+ },
930
+ {
931
+ "description": "Optional right-hand detail; shown when `detail-open` is set.",
932
+ "name": "detail"
933
+ },
934
+ {
935
+ "description": "Optional footer beneath the main content.",
936
+ "name": "footer"
937
+ }
938
+ ],
939
+ "members": [
940
+ {
941
+ "kind": "field",
942
+ "name": "sidebarCollapsed",
943
+ "type": {
944
+ "text": "boolean"
945
+ },
946
+ "default": "false",
947
+ "description": "Collapses the sidebar to an icon rail on desktop.",
948
+ "attribute": "sidebar-collapsed",
949
+ "reflects": true
950
+ },
951
+ {
952
+ "kind": "field",
953
+ "name": "detailOpen",
954
+ "type": {
955
+ "text": "boolean"
956
+ },
957
+ "default": "false",
958
+ "description": "Shows the right-hand detail region (inline column, or overlay on mobile).",
959
+ "attribute": "detail-open",
960
+ "reflects": true
961
+ },
962
+ {
963
+ "kind": "field",
964
+ "name": "detailWidth",
965
+ "type": {
966
+ "text": "\"compact\" | \"comfortable\""
967
+ },
968
+ "default": "\"compact\"",
969
+ "description": "Detail width: `compact` (20rem) or `comfortable` (25rem).",
970
+ "attribute": "detail-width"
971
+ },
972
+ {
973
+ "kind": "field",
974
+ "name": "_mobile",
975
+ "type": {
976
+ "text": "boolean"
977
+ },
978
+ "privacy": "private",
979
+ "default": "false",
980
+ "description": "Whether the viewport is at/below the 48rem breakpoint."
981
+ },
982
+ {
983
+ "kind": "field",
984
+ "name": "_mobileNavOpen",
985
+ "type": {
986
+ "text": "boolean"
987
+ },
988
+ "privacy": "private",
989
+ "default": "false",
990
+ "description": "Whether the mobile off-canvas nav drawer is open."
991
+ },
992
+ {
993
+ "kind": "field",
994
+ "name": "_hasFooter",
995
+ "type": {
996
+ "text": "boolean"
997
+ },
998
+ "privacy": "private",
999
+ "default": "false",
1000
+ "description": "Whether the footer slot has assigned content."
1001
+ },
1002
+ {
1003
+ "kind": "field",
1004
+ "name": "_mediaQuery",
1005
+ "type": {
1006
+ "text": "MediaQueryList | null"
1007
+ },
1008
+ "privacy": "private",
1009
+ "default": "null"
1010
+ },
1011
+ {
1012
+ "kind": "field",
1013
+ "name": "_previousFocus",
1014
+ "type": {
1015
+ "text": "HTMLElement | null"
1016
+ },
1017
+ "privacy": "private",
1018
+ "default": "null"
1019
+ },
1020
+ {
1021
+ "kind": "field",
1022
+ "name": "_onMediaChange",
1023
+ "privacy": "private",
1024
+ "description": "Tracks the breakpoint and closes the mobile drawer when returning to desktop."
1025
+ },
1026
+ {
1027
+ "kind": "field",
1028
+ "name": "_onKeydown",
1029
+ "privacy": "private",
1030
+ "description": "Handles the `[` sidebar shortcut and Escape dismissal of mobile overlays."
1031
+ },
1032
+ {
1033
+ "kind": "method",
1034
+ "name": "_isEditableTarget",
1035
+ "privacy": "private",
1036
+ "return": {
1037
+ "type": {
1038
+ "text": "boolean"
1039
+ }
1040
+ },
1041
+ "parameters": [
1042
+ {
1043
+ "name": "event",
1044
+ "type": {
1045
+ "text": "KeyboardEvent"
1046
+ }
1047
+ }
1048
+ ],
1049
+ "description": "Whether the keydown originated in a text field, so the shortcut defers to typing."
1050
+ },
1051
+ {
1052
+ "kind": "method",
1053
+ "name": "_toggleSidebar",
1054
+ "privacy": "private",
1055
+ "return": {
1056
+ "type": {
1057
+ "text": "void"
1058
+ }
1059
+ },
1060
+ "description": "Toggles the rail (desktop) or the off-canvas drawer (mobile) and announces it."
1061
+ },
1062
+ {
1063
+ "kind": "method",
1064
+ "name": "_closeDetail",
1065
+ "privacy": "private",
1066
+ "return": {
1067
+ "type": {
1068
+ "text": "void"
1069
+ }
1070
+ },
1071
+ "description": "Closes the detail overlay and notifies the consumer that owns `detail-open`."
1072
+ },
1073
+ {
1074
+ "kind": "method",
1075
+ "name": "_onScrim",
1076
+ "privacy": "private",
1077
+ "return": {
1078
+ "type": {
1079
+ "text": "void"
1080
+ }
1081
+ },
1082
+ "description": "Scrim click dismisses whichever overlay is open."
1083
+ },
1084
+ {
1085
+ "kind": "method",
1086
+ "name": "_syncSidebar",
1087
+ "privacy": "private",
1088
+ "return": {
1089
+ "type": {
1090
+ "text": "void"
1091
+ }
1092
+ },
1093
+ "description": "Mirrors the shell's rail state onto the slotted sidebar so it hides labels\nwhen collapsed on desktop, and always shows them in the mobile drawer."
1094
+ },
1095
+ {
1096
+ "kind": "method",
1097
+ "name": "_onFooterSlotChange",
1098
+ "privacy": "private",
1099
+ "return": {
1100
+ "type": {
1101
+ "text": "void"
1102
+ }
1103
+ },
1104
+ "parameters": [
1105
+ {
1106
+ "name": "event",
1107
+ "type": {
1108
+ "text": "Event"
1109
+ }
1110
+ }
1111
+ ],
1112
+ "description": "Collapses the footer row when nothing is slotted into it."
1113
+ }
1114
+ ],
1115
+ "events": [
1116
+ {
1117
+ "name": "sidebar-toggle",
1118
+ "type": {
1119
+ "text": "CustomEvent"
1120
+ },
1121
+ "description": "The built-in toggle changed the sidebar state."
1122
+ },
1123
+ {
1124
+ "name": "detail-close",
1125
+ "type": {
1126
+ "text": "CustomEvent"
1127
+ },
1128
+ "description": "The scrim or Escape dismissed the mobile detail overlay."
1129
+ }
1130
+ ],
1131
+ "attributes": [
1132
+ {
1133
+ "name": "sidebar-collapsed",
1134
+ "type": {
1135
+ "text": "boolean"
1136
+ },
1137
+ "default": "false",
1138
+ "description": "Collapses the sidebar to an icon rail on desktop.",
1139
+ "fieldName": "sidebarCollapsed"
1140
+ },
1141
+ {
1142
+ "name": "detail-open",
1143
+ "type": {
1144
+ "text": "boolean"
1145
+ },
1146
+ "default": "false",
1147
+ "description": "Shows the right-hand detail region (inline column, or overlay on mobile).",
1148
+ "fieldName": "detailOpen"
1149
+ },
1150
+ {
1151
+ "name": "detail-width",
1152
+ "type": {
1153
+ "text": "\"compact\" | \"comfortable\""
1154
+ },
1155
+ "default": "\"compact\"",
1156
+ "description": "Detail width: `compact` (20rem) or `comfortable` (25rem).",
1157
+ "fieldName": "detailWidth"
1158
+ }
1159
+ ],
1160
+ "superclass": {
1161
+ "name": "LitElement",
1162
+ "package": "lit"
1163
+ },
1164
+ "tagName": "app-shell",
1165
+ "customElement": true
1166
+ }
1167
+ ],
1168
+ "exports": [
1169
+ {
1170
+ "kind": "js",
1171
+ "name": "AppShell",
1172
+ "declaration": {
1173
+ "name": "AppShell",
1174
+ "module": "src/app-shell.ts"
1175
+ }
1176
+ },
1177
+ {
1178
+ "kind": "custom-element-definition",
1179
+ "name": "app-shell",
1180
+ "declaration": {
1181
+ "name": "AppShell",
1182
+ "module": "src/app-shell.ts"
1183
+ }
1184
+ }
1185
+ ]
1186
+ },
1187
+ {
1188
+ "kind": "javascript-module",
1189
+ "path": "src/app-sidebar.ts",
1190
+ "declarations": [
1191
+ {
1192
+ "kind": "class",
1193
+ "description": "Collapsible navigation sidebar for the `app-shell` sidebar slot. It is\ndeliberately presentational and router-agnostic: the consumer supplies the\nnav items as plain `<a>`/`<button>` elements (each an icon followed by a\nlabel), optional `<p>` group headings, and marks the active item with\n`aria-current=\"page\"`. The sidebar styles them, tracks hover/active/focus,\nand — in collapsed \"rail\" mode — centers the icons and hides the labels.\n\nRail mode is driven by the `collapsed` attribute (the parent `app-shell`\ntoggles it). Labels are hidden by the inherited `--app-sidebar-label` custom\nproperty, so each label element should read it, e.g.\n`<span style=\"display: var(--app-sidebar-label, inline)\">Reports</span>`;\nkeep an `aria-label` on the item so its accessible name survives collapse.\nThe sidebar fills the width and height of its container — `app-shell` owns\nthe actual rail/expanded width.",
1194
+ "name": "AppSidebar",
1195
+ "slots": [
1196
+ {
1197
+ "description": "Navigation items: `<a>`/`<button>` links and optional `<p>` headings.",
1198
+ "name": ""
1199
+ },
1200
+ {
1201
+ "description": "Optional brand pinned to the top: a small logo plus a name. Wrap the name in a `--app-sidebar-label` element so rail mode shows only the logo, centered in line with the nav icons.",
1202
+ "name": "header"
1203
+ },
1204
+ {
1205
+ "description": "Optional account/settings area pinned to the bottom.",
1206
+ "name": "footer"
1207
+ }
1208
+ ],
1209
+ "members": [
1210
+ {
1211
+ "kind": "field",
1212
+ "name": "collapsed",
1213
+ "type": {
1214
+ "text": "boolean"
1215
+ },
1216
+ "default": "false",
1217
+ "description": "Collapses the sidebar to an icon rail (centers icons, hides labels).",
1218
+ "attribute": "collapsed",
1219
+ "reflects": true
1220
+ },
1221
+ {
1222
+ "kind": "field",
1223
+ "name": "_hasHeader",
1224
+ "type": {
1225
+ "text": "boolean"
1226
+ },
1227
+ "privacy": "private",
1228
+ "default": "false",
1229
+ "description": "Whether the header slot has assigned content."
1230
+ },
1231
+ {
1232
+ "kind": "field",
1233
+ "name": "_hasFooter",
1234
+ "type": {
1235
+ "text": "boolean"
1236
+ },
1237
+ "privacy": "private",
1238
+ "default": "false",
1239
+ "description": "Whether the footer slot has assigned content."
1240
+ },
1241
+ {
1242
+ "kind": "method",
1243
+ "name": "_onHeaderSlotChange",
1244
+ "privacy": "private",
1245
+ "return": {
1246
+ "type": {
1247
+ "text": "void"
1248
+ }
1249
+ },
1250
+ "parameters": [
1251
+ {
1252
+ "name": "event",
1253
+ "type": {
1254
+ "text": "Event"
1255
+ }
1256
+ }
1257
+ ],
1258
+ "description": "Collapses the header row when nothing is slotted into it."
1259
+ },
1260
+ {
1261
+ "kind": "method",
1262
+ "name": "_onFooterSlotChange",
1263
+ "privacy": "private",
1264
+ "return": {
1265
+ "type": {
1266
+ "text": "void"
1267
+ }
1268
+ },
1269
+ "parameters": [
1270
+ {
1271
+ "name": "event",
1272
+ "type": {
1273
+ "text": "Event"
1274
+ }
1275
+ }
1276
+ ],
1277
+ "description": "Collapses the footer row when nothing is slotted into it."
1278
+ }
1279
+ ],
1280
+ "attributes": [
1281
+ {
1282
+ "name": "collapsed",
1283
+ "type": {
1284
+ "text": "boolean"
1285
+ },
1286
+ "default": "false",
1287
+ "description": "Collapses the sidebar to an icon rail (centers icons, hides labels).",
1288
+ "fieldName": "collapsed"
1289
+ }
1290
+ ],
1291
+ "superclass": {
1292
+ "name": "LitElement",
1293
+ "package": "lit"
1294
+ },
1295
+ "tagName": "app-sidebar",
1296
+ "customElement": true
1297
+ }
1298
+ ],
1299
+ "exports": [
1300
+ {
1301
+ "kind": "js",
1302
+ "name": "AppSidebar",
1303
+ "declaration": {
1304
+ "name": "AppSidebar",
1305
+ "module": "src/app-sidebar.ts"
1306
+ }
1307
+ },
1308
+ {
1309
+ "kind": "custom-element-definition",
1310
+ "name": "app-sidebar",
1311
+ "declaration": {
1312
+ "name": "AppSidebar",
1313
+ "module": "src/app-sidebar.ts"
1314
+ }
1315
+ }
1316
+ ]
1317
+ },
863
1318
  {
864
1319
  "kind": "javascript-module",
865
1320
  "path": "src/autocomplete-input.ts",
@@ -2458,47 +2913,105 @@
2458
2913
  "fieldName": "danger"
2459
2914
  },
2460
2915
  {
2461
- "name": "busy",
2916
+ "name": "busy",
2917
+ "type": {
2918
+ "text": "boolean"
2919
+ },
2920
+ "default": "false",
2921
+ "description": "Shows a spinner and disables both buttons while a request is in flight.",
2922
+ "fieldName": "busy"
2923
+ },
2924
+ {
2925
+ "name": "error",
2926
+ "type": {
2927
+ "text": "string | null"
2928
+ },
2929
+ "default": "null",
2930
+ "description": "Inline error line shown below the body, or null for none.",
2931
+ "fieldName": "error"
2932
+ }
2933
+ ],
2934
+ "superclass": {
2935
+ "name": "LitElement",
2936
+ "package": "lit"
2937
+ },
2938
+ "tagName": "confirm-dialog",
2939
+ "customElement": true
2940
+ }
2941
+ ],
2942
+ "exports": [
2943
+ {
2944
+ "kind": "js",
2945
+ "name": "ConfirmDialog",
2946
+ "declaration": {
2947
+ "name": "ConfirmDialog",
2948
+ "module": "src/confirm-dialog.ts"
2949
+ }
2950
+ },
2951
+ {
2952
+ "kind": "custom-element-definition",
2953
+ "name": "confirm-dialog",
2954
+ "declaration": {
2955
+ "name": "ConfirmDialog",
2956
+ "module": "src/confirm-dialog.ts"
2957
+ }
2958
+ }
2959
+ ]
2960
+ },
2961
+ {
2962
+ "kind": "javascript-module",
2963
+ "path": "src/content-divider.ts",
2964
+ "declarations": [
2965
+ {
2966
+ "kind": "class",
2967
+ "description": "A horizontal divider: a thin rule that visually separates two pieces of\ncontent that are not otherwise contained in a box or frame and would bleed\ninto each other. With a `label` it renders the common \"─── OR ───\"\npattern — text centered between two line segments; without one it is a\nsingle full-width rule. Exposed to assistive technology as a horizontal\nseparator, so it renders correctly with zero external CSS.",
2968
+ "name": "ContentDivider",
2969
+ "members": [
2970
+ {
2971
+ "kind": "field",
2972
+ "name": "label",
2462
2973
  "type": {
2463
- "text": "boolean"
2974
+ "text": "string"
2464
2975
  },
2465
- "default": "false",
2466
- "description": "Shows a spinner and disables both buttons while a request is in flight.",
2467
- "fieldName": "busy"
2468
- },
2976
+ "default": "\"\"",
2977
+ "description": "Optional centered label; empty renders a plain full-width rule.",
2978
+ "attribute": "label"
2979
+ }
2980
+ ],
2981
+ "attributes": [
2469
2982
  {
2470
- "name": "error",
2983
+ "name": "label",
2471
2984
  "type": {
2472
- "text": "string | null"
2985
+ "text": "string"
2473
2986
  },
2474
- "default": "null",
2475
- "description": "Inline error line shown below the body, or null for none.",
2476
- "fieldName": "error"
2987
+ "default": "\"\"",
2988
+ "description": "Optional centered label; empty renders a plain full-width rule.",
2989
+ "fieldName": "label"
2477
2990
  }
2478
2991
  ],
2479
2992
  "superclass": {
2480
2993
  "name": "LitElement",
2481
2994
  "package": "lit"
2482
2995
  },
2483
- "tagName": "confirm-dialog",
2996
+ "tagName": "content-divider",
2484
2997
  "customElement": true
2485
2998
  }
2486
2999
  ],
2487
3000
  "exports": [
2488
3001
  {
2489
3002
  "kind": "js",
2490
- "name": "ConfirmDialog",
3003
+ "name": "ContentDivider",
2491
3004
  "declaration": {
2492
- "name": "ConfirmDialog",
2493
- "module": "src/confirm-dialog.ts"
3005
+ "name": "ContentDivider",
3006
+ "module": "src/content-divider.ts"
2494
3007
  }
2495
3008
  },
2496
3009
  {
2497
3010
  "kind": "custom-element-definition",
2498
- "name": "confirm-dialog",
3011
+ "name": "content-divider",
2499
3012
  "declaration": {
2500
- "name": "ConfirmDialog",
2501
- "module": "src/confirm-dialog.ts"
3013
+ "name": "ContentDivider",
3014
+ "module": "src/content-divider.ts"
2502
3015
  }
2503
3016
  }
2504
3017
  ]
@@ -3479,6 +3992,56 @@
3479
3992
  }
3480
3993
  ]
3481
3994
  },
3995
+ {
3996
+ "kind": "javascript-module",
3997
+ "path": "src/form-actions.ts",
3998
+ "declarations": [
3999
+ {
4000
+ "kind": "class",
4001
+ "description": "Form footer button bar with a fixed action order for internal apps: the\nprimary (submit) button is always rightmost, the secondary (cancel) button\nsits to its immediate left, and an optional tertiary/destructive action is\npinned to the far left. The order is enforced by the component regardless of\nthe source order the buttons are authored in, so every form in a product\nreads the same way.\n\nPurely presentational: it lays out whatever controls (usually `ui-button`)\nare slotted and never intercepts their clicks, `type=\"submit\"`, or events.",
4002
+ "name": "FormActions",
4003
+ "slots": [
4004
+ {
4005
+ "description": "Optional far-left action (e.g. a destructive \"Delete\").",
4006
+ "name": "start"
4007
+ },
4008
+ {
4009
+ "description": "The secondary/cancel action, placed left of primary.",
4010
+ "name": "secondary"
4011
+ },
4012
+ {
4013
+ "description": "The primary/submit action, always rightmost.",
4014
+ "name": "primary"
4015
+ }
4016
+ ],
4017
+ "members": [],
4018
+ "superclass": {
4019
+ "name": "LitElement",
4020
+ "package": "lit"
4021
+ },
4022
+ "tagName": "form-actions",
4023
+ "customElement": true
4024
+ }
4025
+ ],
4026
+ "exports": [
4027
+ {
4028
+ "kind": "js",
4029
+ "name": "FormActions",
4030
+ "declaration": {
4031
+ "name": "FormActions",
4032
+ "module": "src/form-actions.ts"
4033
+ }
4034
+ },
4035
+ {
4036
+ "kind": "custom-element-definition",
4037
+ "name": "form-actions",
4038
+ "declaration": {
4039
+ "name": "FormActions",
4040
+ "module": "src/form-actions.ts"
4041
+ }
4042
+ }
4043
+ ]
4044
+ },
3482
4045
  {
3483
4046
  "kind": "javascript-module",
3484
4047
  "path": "src/form-select.ts",
@@ -5255,6 +5818,14 @@
5255
5818
  "module": "./confirm-dialog.js"
5256
5819
  }
5257
5820
  },
5821
+ {
5822
+ "kind": "js",
5823
+ "name": "ContentDivider",
5824
+ "declaration": {
5825
+ "name": "ContentDivider",
5826
+ "module": "./content-divider.js"
5827
+ }
5828
+ },
5258
5829
  {
5259
5830
  "kind": "js",
5260
5831
  "name": "ToastNotification",
@@ -5679,6 +6250,86 @@
5679
6250
  "module": "./frame-box.js"
5680
6251
  }
5681
6252
  },
6253
+ {
6254
+ "kind": "js",
6255
+ "name": "AppShell",
6256
+ "declaration": {
6257
+ "name": "AppShell",
6258
+ "module": "./app-shell.js"
6259
+ }
6260
+ },
6261
+ {
6262
+ "kind": "js",
6263
+ "name": "SidebarToggleDetail",
6264
+ "declaration": {
6265
+ "name": "SidebarToggleDetail",
6266
+ "module": "./app-shell.js"
6267
+ }
6268
+ },
6269
+ {
6270
+ "kind": "js",
6271
+ "name": "AppSidebar",
6272
+ "declaration": {
6273
+ "name": "AppSidebar",
6274
+ "module": "./app-sidebar.js"
6275
+ }
6276
+ },
6277
+ {
6278
+ "kind": "js",
6279
+ "name": "ActionBar",
6280
+ "declaration": {
6281
+ "name": "ActionBar",
6282
+ "module": "./action-bar.js"
6283
+ }
6284
+ },
6285
+ {
6286
+ "kind": "js",
6287
+ "name": "PageHeader",
6288
+ "declaration": {
6289
+ "name": "PageHeader",
6290
+ "module": "./page-header.js"
6291
+ }
6292
+ },
6293
+ {
6294
+ "kind": "js",
6295
+ "name": "PaginationNav",
6296
+ "declaration": {
6297
+ "name": "PaginationNav",
6298
+ "module": "./pagination-nav.js"
6299
+ }
6300
+ },
6301
+ {
6302
+ "kind": "js",
6303
+ "name": "PageChangeDetail",
6304
+ "declaration": {
6305
+ "name": "PageChangeDetail",
6306
+ "module": "./pagination-nav.js"
6307
+ }
6308
+ },
6309
+ {
6310
+ "kind": "js",
6311
+ "name": "FormActions",
6312
+ "declaration": {
6313
+ "name": "FormActions",
6314
+ "module": "./form-actions.js"
6315
+ }
6316
+ },
6317
+ {
6318
+ "kind": "js",
6319
+ "name": "TimelineContainer",
6320
+ "declaration": {
6321
+ "name": "TimelineContainer",
6322
+ "module": "./timeline-container.js"
6323
+ }
6324
+ },
6325
+ {
6326
+ "kind": "js",
6327
+ "name": "TimelineEntry",
6328
+ "declaration": {
6329
+ "name": "TimelineEntry",
6330
+ "module": "./timeline-entry.js"
6331
+ }
6332
+ },
5682
6333
  {
5683
6334
  "kind": "js",
5684
6335
  "name": "CalendarEntry",
@@ -8109,121 +8760,323 @@
8109
8760
  "description": "Fired with `{ values: string[] }` (a copied array) when a value is added or removed through the UI. Programmatic `values` assignments do not fire it."
8110
8761
  }
8111
8762
  ],
8112
- "attributes": [
8763
+ "attributes": [
8764
+ {
8765
+ "name": "name",
8766
+ "type": {
8767
+ "text": "string"
8768
+ },
8769
+ "default": "\"\"",
8770
+ "description": "Form control name; each selected value submits under it.",
8771
+ "fieldName": "name"
8772
+ },
8773
+ {
8774
+ "name": "label",
8775
+ "type": {
8776
+ "text": "string"
8777
+ },
8778
+ "default": "\"\"",
8779
+ "description": "Accessible label applied to the trigger.",
8780
+ "fieldName": "label"
8781
+ },
8782
+ {
8783
+ "name": "placeholder",
8784
+ "type": {
8785
+ "text": "string"
8786
+ },
8787
+ "default": "\"Select options\"",
8788
+ "description": "Text shown on the trigger when nothing is selected.",
8789
+ "fieldName": "placeholder"
8790
+ },
8791
+ {
8792
+ "name": "disabled",
8793
+ "type": {
8794
+ "text": "boolean"
8795
+ },
8796
+ "default": "false",
8797
+ "description": "Disables the whole control, preventing the popover from opening.",
8798
+ "fieldName": "disabled"
8799
+ },
8800
+ {
8801
+ "name": "required",
8802
+ "type": {
8803
+ "text": "boolean"
8804
+ },
8805
+ "default": "false",
8806
+ "description": "Marks the control as required for native form validation.",
8807
+ "fieldName": "required"
8808
+ },
8809
+ {
8810
+ "name": "searchable",
8811
+ "type": {
8812
+ "text": "boolean"
8813
+ },
8814
+ "default": "false",
8815
+ "description": "Enables editable, case-insensitive infix filtering by option label.\nTyped text never becomes a selected value.",
8816
+ "fieldName": "searchable"
8817
+ },
8818
+ {
8819
+ "name": "max",
8820
+ "type": {
8821
+ "text": "number"
8822
+ },
8823
+ "default": "0",
8824
+ "description": "Maximum number of selectable values; `0` (default) means unlimited.",
8825
+ "fieldName": "max"
8826
+ },
8827
+ {
8828
+ "name": "variant",
8829
+ "type": {
8830
+ "text": "MultiSelectVariant"
8831
+ },
8832
+ "default": "\"dropdown\"",
8833
+ "description": "Presentation variant. `\"dropdown\"` (default) opens a popover listbox;\n`\"list\"` renders a persistently visible, bordered list surface. Reflected\nso consumers can style by `[variant=\"list\"]`.",
8834
+ "fieldName": "variant"
8835
+ },
8836
+ {
8837
+ "name": "visible-rows",
8838
+ "type": {
8839
+ "text": "number"
8840
+ },
8841
+ "default": "5",
8842
+ "description": "Number of `2rem` rows the `list` variant's scroll viewport shows before it\nscrolls, mirroring a native `<select size>`. Normalized to an integer of at\nleast `1` (default `5`); ignored by the `dropdown` variant.",
8843
+ "fieldName": "visibleRows"
8844
+ },
8845
+ {
8846
+ "name": "show-chips",
8847
+ "type": {
8848
+ "text": "boolean"
8849
+ },
8850
+ "default": "false",
8851
+ "description": "When true, the selected values are also rendered as removable chips below\nthe trigger, each with an accessible `32px` remove control. Off by default:\nthe trigger already summarizes the selection, and values can be toggled off\nin the listbox. Applies to both variants.",
8852
+ "fieldName": "showChips"
8853
+ }
8854
+ ],
8855
+ "superclass": {
8856
+ "name": "LitElement",
8857
+ "package": "lit"
8858
+ },
8859
+ "tagName": "multi-select",
8860
+ "customElement": true
8861
+ }
8862
+ ],
8863
+ "exports": [
8864
+ {
8865
+ "kind": "js",
8866
+ "name": "MultiSelect",
8867
+ "declaration": {
8868
+ "name": "MultiSelect",
8869
+ "module": "src/multi-select.ts"
8870
+ }
8871
+ },
8872
+ {
8873
+ "kind": "custom-element-definition",
8874
+ "name": "multi-select",
8875
+ "declaration": {
8876
+ "name": "MultiSelect",
8877
+ "module": "src/multi-select.ts"
8878
+ }
8879
+ }
8880
+ ]
8881
+ },
8882
+ {
8883
+ "kind": "javascript-module",
8884
+ "path": "src/page-header.ts",
8885
+ "declarations": [
8886
+ {
8887
+ "kind": "class",
8888
+ "description": "Page title block for the top of a dashboard view: an optional breadcrumb\ntrail, the page heading, and a right-aligned cluster of page-level actions.\nIt only lays these out — the breadcrumb links and action buttons are entirely\nthe consumer's, so it stays framework- and router-agnostic.",
8889
+ "name": "PageHeader",
8890
+ "slots": [
8891
+ {
8892
+ "description": "Optional breadcrumb trail rendered above the heading.",
8893
+ "name": "breadcrumb"
8894
+ },
8895
+ {
8896
+ "description": "Optional right-aligned page actions (e.g. a primary button).",
8897
+ "name": "actions"
8898
+ }
8899
+ ],
8900
+ "members": [
8113
8901
  {
8114
- "name": "name",
8902
+ "kind": "field",
8903
+ "name": "heading",
8115
8904
  "type": {
8116
8905
  "text": "string"
8117
8906
  },
8118
8907
  "default": "\"\"",
8119
- "description": "Form control name; each selected value submits under it.",
8120
- "fieldName": "name"
8908
+ "description": "The page heading text.",
8909
+ "attribute": "heading"
8121
8910
  },
8122
8911
  {
8123
- "name": "label",
8912
+ "kind": "field",
8913
+ "name": "_hasBreadcrumb",
8124
8914
  "type": {
8125
- "text": "string"
8915
+ "text": "boolean"
8126
8916
  },
8127
- "default": "\"\"",
8128
- "description": "Accessible label applied to the trigger.",
8129
- "fieldName": "label"
8917
+ "privacy": "private",
8918
+ "default": "false",
8919
+ "description": "Whether the breadcrumb slot currently has assigned content."
8130
8920
  },
8131
8921
  {
8132
- "name": "placeholder",
8133
- "type": {
8134
- "text": "string"
8922
+ "kind": "method",
8923
+ "name": "_onBreadcrumbSlotChange",
8924
+ "privacy": "private",
8925
+ "return": {
8926
+ "type": {
8927
+ "text": "void"
8928
+ }
8135
8929
  },
8136
- "default": "\"Select options\"",
8137
- "description": "Text shown on the trigger when nothing is selected.",
8138
- "fieldName": "placeholder"
8139
- },
8930
+ "parameters": [
8931
+ {
8932
+ "name": "event",
8933
+ "type": {
8934
+ "text": "Event"
8935
+ }
8936
+ }
8937
+ ],
8938
+ "description": "Tracks whether the breadcrumb slot has content so its row can collapse when empty."
8939
+ }
8940
+ ],
8941
+ "attributes": [
8140
8942
  {
8141
- "name": "disabled",
8943
+ "name": "heading",
8142
8944
  "type": {
8143
- "text": "boolean"
8945
+ "text": "string"
8144
8946
  },
8145
- "default": "false",
8146
- "description": "Disables the whole control, preventing the popover from opening.",
8147
- "fieldName": "disabled"
8148
- },
8947
+ "default": "\"\"",
8948
+ "description": "The page heading text.",
8949
+ "fieldName": "heading"
8950
+ }
8951
+ ],
8952
+ "superclass": {
8953
+ "name": "LitElement",
8954
+ "package": "lit"
8955
+ },
8956
+ "tagName": "page-header",
8957
+ "customElement": true
8958
+ }
8959
+ ],
8960
+ "exports": [
8961
+ {
8962
+ "kind": "js",
8963
+ "name": "PageHeader",
8964
+ "declaration": {
8965
+ "name": "PageHeader",
8966
+ "module": "src/page-header.ts"
8967
+ }
8968
+ },
8969
+ {
8970
+ "kind": "custom-element-definition",
8971
+ "name": "page-header",
8972
+ "declaration": {
8973
+ "name": "PageHeader",
8974
+ "module": "src/page-header.ts"
8975
+ }
8976
+ }
8977
+ ]
8978
+ },
8979
+ {
8980
+ "kind": "javascript-module",
8981
+ "path": "src/pagination-nav.ts",
8982
+ "declarations": [
8983
+ {
8984
+ "kind": "class",
8985
+ "description": "Minimal, controlled pager for list/table views: a previous/next control pair\naround a \"Page N of M\" status. It owns no data — the consumer sets\n`current-page` / `total-pages` and moves the page in response to the\n`page-change` event (typically alongside its own data fetch), exactly like\n`data-table` leaves the row data to the caller.\n\nPrevious is disabled on the first page and next on the last; neither fires an\nevent when there is nowhere to go.",
8986
+ "name": "PaginationNav",
8987
+ "members": [
8149
8988
  {
8150
- "name": "required",
8989
+ "kind": "field",
8990
+ "name": "currentPage",
8151
8991
  "type": {
8152
- "text": "boolean"
8992
+ "text": "number"
8153
8993
  },
8154
- "default": "false",
8155
- "description": "Marks the control as required for native form validation.",
8156
- "fieldName": "required"
8994
+ "default": "1",
8995
+ "description": "The 1-based current page.",
8996
+ "attribute": "current-page"
8157
8997
  },
8158
8998
  {
8159
- "name": "searchable",
8999
+ "kind": "field",
9000
+ "name": "totalPages",
8160
9001
  "type": {
8161
- "text": "boolean"
9002
+ "text": "number"
8162
9003
  },
8163
- "default": "false",
8164
- "description": "Enables editable, case-insensitive infix filtering by option label.\nTyped text never becomes a selected value.",
8165
- "fieldName": "searchable"
9004
+ "default": "1",
9005
+ "description": "The total number of pages (minimum 1).",
9006
+ "attribute": "total-pages"
8166
9007
  },
8167
9008
  {
8168
- "name": "max",
8169
- "type": {
8170
- "text": "number"
9009
+ "kind": "method",
9010
+ "name": "_go",
9011
+ "privacy": "private",
9012
+ "return": {
9013
+ "type": {
9014
+ "text": "void"
9015
+ }
8171
9016
  },
8172
- "default": "0",
8173
- "description": "Maximum number of selectable values; `0` (default) means unlimited.",
8174
- "fieldName": "max"
8175
- },
9017
+ "parameters": [
9018
+ {
9019
+ "name": "page",
9020
+ "type": {
9021
+ "text": "number"
9022
+ }
9023
+ }
9024
+ ],
9025
+ "description": "Clamps `page` to the valid range and fires `page-change` when it actually moves."
9026
+ }
9027
+ ],
9028
+ "events": [
8176
9029
  {
8177
- "name": "variant",
9030
+ "name": "page-change",
8178
9031
  "type": {
8179
- "text": "MultiSelectVariant"
9032
+ "text": "CustomEvent"
8180
9033
  },
8181
- "default": "\"dropdown\"",
8182
- "description": "Presentation variant. `\"dropdown\"` (default) opens a popover listbox;\n`\"list\"` renders a persistently visible, bordered list surface. Reflected\nso consumers can style by `[variant=\"list\"]`.",
8183
- "fieldName": "variant"
8184
- },
9034
+ "description": "The user picked a new page (`detail: { page }`)."
9035
+ }
9036
+ ],
9037
+ "attributes": [
8185
9038
  {
8186
- "name": "visible-rows",
9039
+ "name": "current-page",
8187
9040
  "type": {
8188
9041
  "text": "number"
8189
9042
  },
8190
- "default": "5",
8191
- "description": "Number of `2rem` rows the `list` variant's scroll viewport shows before it\nscrolls, mirroring a native `<select size>`. Normalized to an integer of at\nleast `1` (default `5`); ignored by the `dropdown` variant.",
8192
- "fieldName": "visibleRows"
9043
+ "default": "1",
9044
+ "description": "The 1-based current page.",
9045
+ "fieldName": "currentPage"
8193
9046
  },
8194
9047
  {
8195
- "name": "show-chips",
9048
+ "name": "total-pages",
8196
9049
  "type": {
8197
- "text": "boolean"
9050
+ "text": "number"
8198
9051
  },
8199
- "default": "false",
8200
- "description": "When true, the selected values are also rendered as removable chips below\nthe trigger, each with an accessible `32px` remove control. Off by default:\nthe trigger already summarizes the selection, and values can be toggled off\nin the listbox. Applies to both variants.",
8201
- "fieldName": "showChips"
9052
+ "default": "1",
9053
+ "description": "The total number of pages (minimum 1).",
9054
+ "fieldName": "totalPages"
8202
9055
  }
8203
9056
  ],
8204
9057
  "superclass": {
8205
9058
  "name": "LitElement",
8206
9059
  "package": "lit"
8207
9060
  },
8208
- "tagName": "multi-select",
9061
+ "tagName": "pagination-nav",
8209
9062
  "customElement": true
8210
9063
  }
8211
9064
  ],
8212
9065
  "exports": [
8213
9066
  {
8214
9067
  "kind": "js",
8215
- "name": "MultiSelect",
9068
+ "name": "PaginationNav",
8216
9069
  "declaration": {
8217
- "name": "MultiSelect",
8218
- "module": "src/multi-select.ts"
9070
+ "name": "PaginationNav",
9071
+ "module": "src/pagination-nav.ts"
8219
9072
  }
8220
9073
  },
8221
9074
  {
8222
9075
  "kind": "custom-element-definition",
8223
- "name": "multi-select",
9076
+ "name": "pagination-nav",
8224
9077
  "declaration": {
8225
- "name": "MultiSelect",
8226
- "module": "src/multi-select.ts"
9078
+ "name": "PaginationNav",
9079
+ "module": "src/pagination-nav.ts"
8227
9080
  }
8228
9081
  }
8229
9082
  ]
@@ -10259,6 +11112,145 @@
10259
11112
  }
10260
11113
  ]
10261
11114
  },
11115
+ {
11116
+ "kind": "javascript-module",
11117
+ "path": "src/timeline-container.ts",
11118
+ "declarations": [
11119
+ {
11120
+ "kind": "class",
11121
+ "description": "Vertical timeline: a single connecting line runs down the left edge and each\nslotted `timeline-entry` places a dot on it. This is a thin layout and\nsemantics wrapper — the entries draw the line segments and dots themselves,\nso the container adds no gap between them (a gap would break the line).\nExposed to assistive technology as a list of events.",
11122
+ "name": "TimelineContainer",
11123
+ "slots": [
11124
+ {
11125
+ "description": "`timeline-entry` elements, in chronological order.",
11126
+ "name": ""
11127
+ }
11128
+ ],
11129
+ "members": [],
11130
+ "superclass": {
11131
+ "name": "LitElement",
11132
+ "package": "lit"
11133
+ },
11134
+ "tagName": "timeline-container",
11135
+ "customElement": true
11136
+ }
11137
+ ],
11138
+ "exports": [
11139
+ {
11140
+ "kind": "js",
11141
+ "name": "TimelineContainer",
11142
+ "declaration": {
11143
+ "name": "TimelineContainer",
11144
+ "module": "src/timeline-container.ts"
11145
+ }
11146
+ },
11147
+ {
11148
+ "kind": "custom-element-definition",
11149
+ "name": "timeline-container",
11150
+ "declaration": {
11151
+ "name": "TimelineContainer",
11152
+ "module": "src/timeline-container.ts"
11153
+ }
11154
+ }
11155
+ ]
11156
+ },
11157
+ {
11158
+ "kind": "javascript-module",
11159
+ "path": "src/timeline-entry.ts",
11160
+ "declarations": [
11161
+ {
11162
+ "kind": "class",
11163
+ "description": "One event on a `timeline-container`: a dot on the vertical line, an optional\nheadline, a relative timestamp (\"3 hours ago\"), and freely nested content.\nThe connecting line is drawn here — its segment above the dot is hidden on\nthe first entry and the segment below is hidden on the last, so the line caps\nexactly at the first and last dots. Only meaningful inside a\n`timeline-container`; demonstrated through it.",
11164
+ "name": "TimelineEntry",
11165
+ "slots": [
11166
+ {
11167
+ "description": "Optional headline/title for the event.",
11168
+ "name": "headline"
11169
+ },
11170
+ {
11171
+ "description": "The event content; nest any elements here.",
11172
+ "name": ""
11173
+ }
11174
+ ],
11175
+ "members": [
11176
+ {
11177
+ "kind": "field",
11178
+ "name": "datetime",
11179
+ "type": {
11180
+ "text": "string | null"
11181
+ },
11182
+ "default": "null",
11183
+ "description": "ISO 8601 or SQLite datetime string, rendered as a relative time.",
11184
+ "attribute": "datetime"
11185
+ },
11186
+ {
11187
+ "kind": "field",
11188
+ "name": "_hasHeadline",
11189
+ "type": {
11190
+ "text": "boolean"
11191
+ },
11192
+ "privacy": "private",
11193
+ "default": "false",
11194
+ "description": "Whether the headline slot currently has assigned content."
11195
+ },
11196
+ {
11197
+ "kind": "method",
11198
+ "name": "_onHeadlineSlotChange",
11199
+ "privacy": "private",
11200
+ "return": {
11201
+ "type": {
11202
+ "text": "void"
11203
+ }
11204
+ },
11205
+ "parameters": [
11206
+ {
11207
+ "name": "event",
11208
+ "type": {
11209
+ "text": "Event"
11210
+ }
11211
+ }
11212
+ ],
11213
+ "description": "Collapses the headline when nothing is slotted so the time sits alone."
11214
+ }
11215
+ ],
11216
+ "attributes": [
11217
+ {
11218
+ "name": "datetime",
11219
+ "type": {
11220
+ "text": "string | null"
11221
+ },
11222
+ "default": "null",
11223
+ "description": "ISO 8601 or SQLite datetime string, rendered as a relative time.",
11224
+ "fieldName": "datetime"
11225
+ }
11226
+ ],
11227
+ "superclass": {
11228
+ "name": "LitElement",
11229
+ "package": "lit"
11230
+ },
11231
+ "tagName": "timeline-entry",
11232
+ "customElement": true
11233
+ }
11234
+ ],
11235
+ "exports": [
11236
+ {
11237
+ "kind": "js",
11238
+ "name": "TimelineEntry",
11239
+ "declaration": {
11240
+ "name": "TimelineEntry",
11241
+ "module": "src/timeline-entry.ts"
11242
+ }
11243
+ },
11244
+ {
11245
+ "kind": "custom-element-definition",
11246
+ "name": "timeline-entry",
11247
+ "declaration": {
11248
+ "name": "TimelineEntry",
11249
+ "module": "src/timeline-entry.ts"
11250
+ }
11251
+ }
11252
+ ]
11253
+ },
10262
11254
  {
10263
11255
  "kind": "javascript-module",
10264
11256
  "path": "src/toast-notification.ts",