@threadlabs/looma 0.23.7 → 0.23.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadlabs/looma",
3
- "version": "0.23.7",
3
+ "version": "0.23.8",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -43,8 +43,7 @@
43
43
  }
44
44
 
45
45
  .trigger {
46
- display: grid;
47
- grid-template-columns: minmax(0, 1fr) auto;
46
+ display: flex;
48
47
  gap: var(--ui-space-3);
49
48
  align-items: center;
50
49
  inline-size: 100%;
@@ -74,19 +73,40 @@
74
73
  cursor: not-allowed;
75
74
  }
76
75
 
76
+ .summary {
77
+ flex: 1;
78
+ min-inline-size: 0;
79
+ }
80
+
81
+ .leading,
82
+ .indicator {
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ flex: none;
87
+ }
88
+ .leading:empty {
89
+ display: none;
90
+ }
91
+ .indicator {
92
+ transition: transform var(--ui-motion-feedback) var(--ui-motion-feedback-ease);
93
+ }
94
+ :scope[data-ui-disclosure-state~="internalOpen"] .indicator {
95
+ transform: rotate(180deg);
96
+ }
97
+
77
98
  .chevron {
78
99
  inline-size: 0.5rem;
79
100
  block-size: 0.5rem;
80
101
  border-inline-end: 2px solid currentColor;
81
102
  border-block-end: 2px solid currentColor;
82
103
  transform: rotate(45deg) translate(-1px, -1px);
83
- transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
84
104
  }
85
105
 
86
106
  .panel {
87
107
  display: grid;
88
108
  grid-template-rows: 0fr;
89
- transition: grid-template-rows var(--ui-motion-fast) var(--ui-motion-ease-out, var(--ui-motion-ease));
109
+ transition: grid-template-rows var(--ui-motion-reveal) var(--ui-motion-reveal-ease), content-visibility var(--ui-motion-reveal) allow-discrete;
90
110
  }
91
111
 
92
112
  .panel-inner {
@@ -101,22 +121,20 @@
101
121
  :scope[data-ui-disclosure-state~="internalOpen"] .panel-inner {
102
122
  padding-block: 0 var(--ui-space-3);
103
123
  }
104
- :scope[data-ui-disclosure-state~="internalOpen"] .chevron {
105
- transform: rotate(225deg) translate(-1px, -1px);
106
- }
107
124
 
108
125
  /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
109
126
  * normal content-sized layout and its animation remain unchanged when fill is omitted. */
110
127
  :scope[data-ui-disclosure-state~="fill"] {
111
128
  display: flex;
112
129
  flex-direction: column;
113
- flex: none;
114
- min-block-size: 0;
130
+ flex: 0 0 var(--_ui-disclosure-heading-size, var(--_trigger-min-block-size));
131
+ min-block-size: calc(var(--_ui-disclosure-heading-size, var(--_trigger-min-block-size)) + var(--ui-border-width));
132
+ transition: flex-grow var(--ui-motion-layout) var(--ui-motion-layout-ease);
115
133
  border-block-end: 0;
116
134
  border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
117
135
  }
118
136
  :scope[data-ui-disclosure-state~="fill"][data-ui-disclosure-state~="internalOpen"] {
119
- flex: 1;
137
+ flex-grow: 1;
120
138
  }
121
139
  :scope[data-ui-disclosure-state~="fill"] .heading {
122
140
  flex: none;
@@ -125,14 +143,8 @@
125
143
  border-radius: 0;
126
144
  }
127
145
  :scope[data-ui-disclosure-state~="fill"] .panel {
128
- display: flex;
129
146
  flex: 1;
130
147
  min-block-size: 0;
131
- transition: none;
132
- }
133
- :scope[data-ui-disclosure-state~="fill"] .panel[hidden] {
134
- flex: none;
135
- block-size: 0;
136
148
  }
137
149
  :scope[data-ui-disclosure-state~="fill"] .panel-inner {
138
150
  display: flex;
@@ -142,9 +154,43 @@
142
154
  padding: 0;
143
155
  }
144
156
 
157
+ :scope[data-ui-disclosure-state~="variant=navigation"] .trigger {
158
+ gap: var(--ui-nav-gap);
159
+ padding-inline: var(--ui-nav-padding-inline);
160
+ min-block-size: var(--ui-nav-min-block-size);
161
+ padding-block: var(--ui-nav-padding-block);
162
+ border-radius: var(--ui-selection-radius);
163
+ font-size: var(--ui-font-size-md);
164
+ font-weight: var(--ui-font-normal);
165
+ color: var(--ui-text-secondary);
166
+ }
167
+ :scope[data-ui-disclosure-state~="variant=navigation"][data-ui-disclosure-state~="density=compact"] .trigger {
168
+ padding-inline: var(--ui-nav-compact-padding-inline);
169
+ padding-block: var(--ui-nav-compact-padding-block);
170
+ min-block-size: var(--ui-nav-compact-min-block-size);
171
+ font-size: var(--ui-font-size-sm);
172
+ }
173
+ :scope[data-ui-disclosure-state~="variant=navigation"] .trigger:hover:not(:disabled) {
174
+ background: var(--ui-nav-hover-surface);
175
+ color: var(--ui-text-primary);
176
+ }
177
+ :scope[data-ui-disclosure-state~="variant=navigation"][data-ui-disclosure-state~="internalOpen"] .trigger {
178
+ color: var(--ui-selection-text);
179
+ }
180
+ :scope[data-ui-disclosure-state~="variant=navigation"] :is(.leading, .indicator) {
181
+ inline-size: var(--ui-nav-icon-size);
182
+ font-size: var(--ui-nav-icon-size);
183
+ }
184
+ @media (pointer: coarse) {
185
+ :scope[data-ui-disclosure-state~="variant=navigation"][data-ui-disclosure-state~="density=compact"] .trigger {
186
+ min-block-size: var(--ui-control-min-block-size);
187
+ }
188
+ }
189
+
145
190
  @media (prefers-reduced-motion: reduce) {
191
+ :scope[data-ui-disclosure-state~="fill"],
146
192
  .panel,
147
- .chevron {
193
+ .indicator {
148
194
  transition: none;
149
195
  }
150
196
  }
@@ -164,6 +210,8 @@
164
210
 
165
211
  /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
166
212
  * normal content-sized layout and its animation remain unchanged when fill is omitted. */
213
+ @media (pointer: coarse) {
214
+ }
167
215
 
168
216
  @media (prefers-reduced-motion: reduce) {
169
217
  }
@@ -29,13 +29,13 @@
29
29
  box-sizing: border-box;
30
30
  display: flex;
31
31
  align-items: center;
32
- gap: var(--ui-space-3);
32
+ gap: var(--ui-nav-gap);
33
33
  inline-size: var(--ui-nav-item-inline-size, 100%);
34
34
  min-inline-size: 0;
35
- min-block-size: var(--ui-control-size, 2.5rem);
35
+ min-block-size: var(--ui-nav-min-block-size);
36
36
  margin: 0;
37
- padding-block: var(--ui-space-2);
38
- padding-inline: var(--ui-space-3);
37
+ padding-block: var(--ui-nav-padding-block);
38
+ padding-inline: var(--ui-nav-padding-inline);
39
39
  border: 0;
40
40
  border-radius: var(--ui-selection-radius);
41
41
  background: transparent;
@@ -50,7 +50,7 @@
50
50
  }
51
51
 
52
52
  :scope:hover:not([aria-current]) {
53
- background: var(--ui-surface-hover);
53
+ background: var(--ui-nav-hover-surface);
54
54
  color: var(--ui-text-primary);
55
55
  }
56
56
 
@@ -99,12 +99,15 @@
99
99
  }
100
100
  }
101
101
 
102
- .leading {
102
+ .leading,
103
+ .trailing {
103
104
  display: inline-flex;
104
105
  flex: none;
105
106
  align-items: center;
107
+ justify-content: center;
108
+ inline-size: var(--ui-nav-icon-size);
106
109
  color: inherit;
107
- font-size: var(--ui-font-size-lg);
110
+ font-size: var(--ui-nav-icon-size);
108
111
  }
109
112
 
110
113
  .content {
@@ -137,11 +140,10 @@
137
140
  }
138
141
 
139
142
  :scope[data-ui-nav-item-state~="density=compact"] {
140
- min-block-size: var(--ui-control-size-sm);
141
- padding-block: var(--ui-space-1);
142
- padding-inline: var(--ui-space-2);
143
+ min-block-size: var(--ui-nav-compact-min-block-size);
144
+ padding-block: var(--ui-nav-compact-padding-block);
145
+ padding-inline: var(--ui-nav-compact-padding-inline);
143
146
  }
144
- :scope[data-ui-nav-item-state~="density=compact"] .leading,
145
147
  :scope[data-ui-nav-item-state~="density=compact"] .label {
146
148
  font-size: var(--ui-font-size-sm);
147
149
  }
@@ -154,6 +156,7 @@
154
156
 
155
157
  /* An unused region takes no space. */
156
158
  .leading:empty,
159
+ .trailing:empty,
157
160
  .description:empty {
158
161
  display: none;
159
162
  }
@@ -15,12 +15,17 @@
15
15
  syntax: "*";
16
16
  inherits: false;
17
17
  }
18
+ @property --ui-sidebar-collapsed-width {
19
+ syntax: "*";
20
+ inherits: false;
21
+ }
18
22
  @scope ([data-component~="ui-sidebar"]) to ([data-component], [data-slotted]) {
19
23
  /* This component's hooks style the element they are set on, and never a nested one. */
20
24
 
21
25
  :scope {
22
26
  /* Hooks do not inherit, so the parts below read them from the root. */
23
27
  --_ui-sidebar-backdrop: var(--ui-sidebar-backdrop);
28
+ --_ui-sidebar-expanded-width: var(--_sidebar-width, var(--ui-sidebar-width, 280px));
24
29
 
25
30
  position: relative;
26
31
  box-sizing: border-box;
@@ -32,6 +37,7 @@
32
37
  min-block-size: 0;
33
38
  background: var(--ui-sidebar-surface, var(--ui-surface-default));
34
39
  border-inline-end: var(--ui-border-width) solid var(--ui-sidebar-border, var(--ui-border-divider));
40
+ transition: inline-size var(--ui-motion-layout) var(--ui-motion-layout-ease), visibility var(--ui-motion-layout);
35
41
  }
36
42
 
37
43
  :scope[data-ui-sidebar-state~="side=end"] {
@@ -41,10 +47,17 @@
41
47
 
42
48
  /* The panel's content scrolls, and each edge that hides content fades: the scroll fade every
43
49
  Looma scroller uses (see ui-scroll-area). */
44
- .content {
50
+ .viewport {
45
51
  flex: 1;
46
52
  min-block-size: 0;
53
+ overflow: clip;
54
+ }
55
+ .content {
56
+ block-size: 100%;
57
+ inline-size: calc(var(--_ui-sidebar-expanded-width) - var(--ui-border-width));
58
+ min-block-size: 0;
47
59
  overflow: auto;
60
+ transition: transform var(--ui-motion-layout) var(--ui-motion-layout-ease);
48
61
  --_ui-scroll-fade-direction: to bottom;
49
62
  --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
50
63
  mask-image: linear-gradient(
@@ -65,7 +78,17 @@
65
78
 
66
79
  /* Collapsed while docked. */
67
80
  :scope[data-ui-sidebar-state~="internalCollapsed"]:not([popover]) {
68
- display: none;
81
+ inline-size: var(--ui-sidebar-collapsed-width, 0px);
82
+ visibility: hidden;
83
+ }
84
+ :scope[data-ui-sidebar-state~="resizing"] {
85
+ transition: none;
86
+ }
87
+ :scope[data-ui-sidebar-state~="internalCollapsed"]:not([popover]) .content {
88
+ transform: translateX(-100%);
89
+ }
90
+ :scope[data-ui-sidebar-state~="side=end"][data-ui-sidebar-state~="internalCollapsed"]:not([popover]) .content {
91
+ transform: translateX(100%);
69
92
  }
70
93
 
71
94
  .resizer {
@@ -144,9 +167,9 @@
144
167
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
145
168
  transform: translateX(0);
146
169
  transition:
147
- transform var(--ui-motion-base) var(--ui-motion-ease-out),
148
- display var(--ui-motion-base) allow-discrete,
149
- overlay var(--ui-motion-base) allow-discrete;
170
+ transform var(--ui-motion-reveal) var(--ui-motion-reveal-ease),
171
+ display var(--ui-motion-reveal) allow-discrete,
172
+ overlay var(--ui-motion-reveal) allow-discrete;
150
173
  }
151
174
 
152
175
  /* The author display above would otherwise override the UA rule that hides a closed popover. */
@@ -176,9 +199,14 @@
176
199
  :scope[popover]::backdrop {
177
200
  background: var(--_ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
178
201
  }
202
+ :scope[popover] .content {
203
+ inline-size: 100%;
204
+ }
179
205
 
180
206
  @media (prefers-reduced-motion: reduce) {
181
- :scope[popover] {
207
+ :scope,
208
+ :scope[popover],
209
+ .content {
182
210
  transition: none;
183
211
  }
184
212
  }
package/tokens.css CHANGED
@@ -128,6 +128,12 @@
128
128
  --ui-pressed: inset 0 1px 2px rgb(0 0 0 / 0.12);
129
129
 
130
130
  --ui-motion-base: calc(var(--ui-motion-fast) * 1.5);
131
+ --ui-motion-feedback: var(--ui-motion-fast);
132
+ --ui-motion-reveal: var(--ui-motion-base);
133
+ --ui-motion-layout: calc(var(--ui-motion-base) * 1.5);
134
+ --ui-motion-feedback-ease: var(--ui-motion-ease);
135
+ --ui-motion-reveal-ease: var(--ui-motion-ease-out);
136
+ --ui-motion-layout-ease: var(--ui-motion-ease-out);
131
137
  /* Fast start, gentle settle: for reveals that should feel immediate. */
132
138
  --ui-motion-ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
133
139
 
@@ -180,6 +186,15 @@
180
186
  --ui-selection-surface: color-mix(in oklab, var(--ui-accent) 6%, var(--ui-surface));
181
187
  --ui-selection-text: var(--ui-accent-subtle-text);
182
188
  --ui-selection-radius: var(--ui-radius-md);
189
+ --ui-nav-icon-size: var(--ui-font-size-md);
190
+ --ui-nav-gap: var(--ui-space-3);
191
+ --ui-nav-padding-inline: var(--ui-space-3);
192
+ --ui-nav-padding-block: var(--ui-space-2);
193
+ --ui-nav-min-block-size: var(--ui-control-size);
194
+ --ui-nav-compact-padding-inline: var(--ui-space-2);
195
+ --ui-nav-compact-padding-block: var(--ui-space-1);
196
+ --ui-nav-compact-min-block-size: var(--ui-control-size-sm);
197
+ --ui-nav-hover-surface: var(--ui-surface-hover);
183
198
 
184
199
  --ui-accent-soft: var(--ui-accent-subtle);
185
200
  --ui-accent-contrast: var(--ui-on-accent);
@@ -14,7 +14,9 @@ export interface UiDisclosureProps {
14
14
  headingLevel?: number | null;
15
15
  name?: string | null;
16
16
  open?: boolean | null;
17
+ requiredOpen?: boolean | null;
17
18
  summary?: string | null;
19
+ variant?: "plain" | "navigation" | null;
18
20
  attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
19
21
  children?: readonly (string | Node)[];
20
22
  slots?: Readonly<Record<string, readonly (string | Node)[]>>;
@@ -3,7 +3,7 @@ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
3
  import * as controller from "../components/ui-disclosure/ui-disclosure.js";
4
4
  import "../styles/ui-disclosure.css";
5
5
 
6
- const definition = {...{"contract":{"tag":"ui-disclosure","props":{"density":{"type":{"kind":"terminal","name":"keyword"},"values":["comfortable","compact"],"required":false,"target":{"attribute":"density"},"default":"comfortable"},"disabled":{"type":"boolean","required":false,"target":{"attribute":"disabled"},"default":false},"fill":{"type":"boolean","required":false,"target":{"attribute":"fill"},"default":false},"headingLevel":{"type":{"kind":"terminal","name":"integer"},"required":false,"target":{"attribute":"headinglevel"},"default":0},"name":{"type":"string","required":false,"target":{"attribute":"name"},"default":""},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"summary":{"type":"string","required":false,"target":{"attribute":"summary"},"default":"Details"}}},"template":{"kind":"element","name":"div","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"heading"},{"kind":"attribute","name":"role","expression":"headingRole","expressionPlan":{"source":"headingRole","ast":{"kind":"id","name":"headingRole"},"dependencies":["headingRole"]}},{"kind":"attribute","name":"aria-level","expression":"headingAriaLevel","expressionPlan":{"source":"headingAriaLevel","ast":{"kind":"id","name":"headingAriaLevel"},"dependencies":["headingAriaLevel"]}}],"children":[{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"class","value":"trigger"},{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"aria-controls","expression":"contentId","expressionPlan":{"source":"contentId","ast":{"kind":"id","name":"contentId"},"dependencies":["contentId"]}},{"kind":"attribute","name":"aria-expanded","expression":"internalOpen","expressionPlan":{"source":"internalOpen","ast":{"kind":"id","name":"internalOpen"},"dependencies":["internalOpen"]}},{"kind":"attribute","name":"disabled","expression":"disabled","expressionPlan":{"source":"disabled","ast":{"kind":"id","name":"disabled"},"dependencies":["disabled"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"summary"}],"children":[{"kind":"slot","fallback":[{"kind":"element","name":"template","attributes":[{"kind":"directive","name":"value","expression":"summary","expressionPlan":{"source":"summary","ast":{"kind":"id","name":"summary"},"dependencies":["summary"]}}],"children":[]}],"name":"summary"}]},{"kind":"slot","fallback":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"chevron"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[]}],"name":"indicator"}],"ref":"trigger"}]},{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"panel"},{"kind":"attribute","name":"id","expression":"contentId","expressionPlan":{"source":"contentId","ast":{"kind":"id","name":"contentId"},"dependencies":["contentId"]}}],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"panel-inner"}],"children":[{"kind":"slot"}]}],"ref":"panel"}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"state","name":"contentId","type":"string","value":"","expression":{"source":"\"\"","ast":{"kind":"literal","value":""},"dependencies":[]}},{"kind":"state","name":"headingRole","type":"keyword"},{"kind":"state","name":"headingAriaLevel","type":"integer"},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"div","choices":["div"]}},source:{file:import.meta.url},css:""};
6
+ const definition = {...{"contract":{"tag":"ui-disclosure","props":{"density":{"type":{"kind":"terminal","name":"keyword"},"values":["comfortable","compact"],"required":false,"target":{"attribute":"density"},"default":"comfortable"},"disabled":{"type":"boolean","required":false,"target":{"attribute":"disabled"},"default":false},"fill":{"type":"boolean","required":false,"target":{"attribute":"fill"},"default":false},"headingLevel":{"type":{"kind":"terminal","name":"integer"},"required":false,"target":{"attribute":"headinglevel"},"default":0},"name":{"type":"string","required":false,"target":{"attribute":"name"},"default":""},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"requiredOpen":{"type":"boolean","required":false,"target":{"attribute":"requiredopen"},"default":false},"summary":{"type":"string","required":false,"target":{"attribute":"summary"},"default":"Details"},"variant":{"type":{"kind":"terminal","name":"keyword"},"values":["plain","navigation"],"required":false,"target":{"attribute":"variant"},"default":"plain"}}},"template":{"kind":"element","name":"div","attributes":[],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"heading"},{"kind":"attribute","name":"role","expression":"headingRole","expressionPlan":{"source":"headingRole","ast":{"kind":"id","name":"headingRole"},"dependencies":["headingRole"]}},{"kind":"attribute","name":"aria-level","expression":"headingAriaLevel","expressionPlan":{"source":"headingAriaLevel","ast":{"kind":"id","name":"headingAriaLevel"},"dependencies":["headingAriaLevel"]}}],"children":[{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"class","value":"trigger"},{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"aria-controls","expression":"contentId","expressionPlan":{"source":"contentId","ast":{"kind":"id","name":"contentId"},"dependencies":["contentId"]}},{"kind":"attribute","name":"aria-expanded","expression":"internalOpen","expressionPlan":{"source":"internalOpen","ast":{"kind":"id","name":"internalOpen"},"dependencies":["internalOpen"]}},{"kind":"attribute","name":"disabled","expression":"disabled","expressionPlan":{"source":"disabled","ast":{"kind":"id","name":"disabled"},"dependencies":["disabled"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"summary"}],"children":[{"kind":"slot","fallback":[{"kind":"element","name":"template","attributes":[{"kind":"directive","name":"value","expression":"summary","expressionPlan":{"source":"summary","ast":{"kind":"id","name":"summary"},"dependencies":["summary"]}}],"children":[]}],"name":"summary"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"indicator"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[{"kind":"slot","fallback":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"chevron"}],"children":[]}],"name":"indicator"}]}],"ref":"trigger"}],"ref":"heading"},{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"panel"},{"kind":"attribute","name":"id","expression":"contentId","expressionPlan":{"source":"contentId","ast":{"kind":"id","name":"contentId"},"dependencies":["contentId"]}}],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"panel-inner"}],"children":[{"kind":"slot"}]}],"ref":"panel"}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"state","name":"contentId","type":"string","value":"","expression":{"source":"\"\"","ast":{"kind":"literal","value":""},"dependencies":[]}},{"kind":"state","name":"headingRole","type":"keyword"},{"kind":"state","name":"headingAriaLevel","type":"integer"},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"div","choices":["div"]}},source:{file:import.meta.url},css:""};
7
7
 
8
8
  export function createUiDisclosure(options = {}) {
9
9
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
@@ -23,49 +23,64 @@ export function createUiDisclosure(options = {}) {
23
23
  if (value0 === true) element1.setAttribute("disabled", "");
24
24
  else element1.removeAttribute("disabled");
25
25
  const element2 = document.createElement("span");
26
- element2.setAttribute("class", "summary");
26
+ element2.setAttribute("class", "leading");
27
+ if (slots["leading"] ?? [].length > 0) {
28
+ for (const child of slots["leading"] ?? []) {
29
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
30
+ if (node.nodeType === 1) node.setAttribute("data-slotted", "");
31
+ projected.push([node, "leading"]);
32
+ element2.append(node);
33
+ }
34
+ } else {
35
+ }
36
+ element1.append(element2);
37
+ const element3 = document.createElement("span");
38
+ element3.setAttribute("class", "summary");
27
39
  if (slots["summary"] ?? [].length > 0) {
28
40
  for (const child of slots["summary"] ?? []) {
29
41
  const node = typeof child === "string" ? document.createTextNode(child) : child;
30
42
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
31
43
  projected.push([node, "summary"]);
32
- element2.append(node);
44
+ element3.append(node);
33
45
  }
34
46
  } else {
35
- const element3 = document.createElement("template");
36
- element2.append(element3);
47
+ const element4 = document.createElement("template");
48
+ element3.append(element4);
37
49
  }
38
- element1.append(element2);
50
+ element1.append(element3);
51
+ const element5 = document.createElement("span");
52
+ element5.setAttribute("class", "indicator");
53
+ element5.setAttribute("aria-hidden", "true");
39
54
  if (slots["indicator"] ?? [].length > 0) {
40
55
  for (const child of slots["indicator"] ?? []) {
41
56
  const node = typeof child === "string" ? document.createTextNode(child) : child;
42
57
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
43
58
  projected.push([node, "indicator"]);
44
- element1.append(node);
59
+ element5.append(node);
45
60
  }
46
61
  } else {
47
- const element4 = document.createElement("span");
48
- element4.setAttribute("class", "chevron");
49
- element4.setAttribute("aria-hidden", "true");
50
- element1.append(element4);
62
+ const element6 = document.createElement("span");
63
+ element6.setAttribute("class", "chevron");
64
+ element5.append(element6);
51
65
  }
66
+ element1.append(element5);
52
67
  element0.append(element1);
53
68
  element.append(element0);
54
- const element5 = document.createElement("div");
55
- element5.setAttribute("class", "panel");
56
- const element6 = document.createElement("div");
57
- element6.setAttribute("class", "panel-inner");
69
+ const element7 = document.createElement("div");
70
+ element7.setAttribute("class", "panel");
71
+ const element8 = document.createElement("div");
72
+ element8.setAttribute("class", "panel-inner");
58
73
  if (children.length > 0) {
59
74
  for (const child of children) {
60
75
  const node = typeof child === "string" ? document.createTextNode(child) : child;
61
76
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
62
77
  projected.push([node, ""]);
63
- element6.append(node);
78
+ element8.append(node);
64
79
  }
65
80
  } else {
66
81
  }
67
- element5.append(element6);
68
- element.append(element5);
82
+ element7.append(element8);
83
+ element.append(element7);
69
84
  manageComponentLifecycle(element, definition, { props: componentProps, projected,
70
85
  controller,
71
86
  });
@@ -2,7 +2,7 @@
2
2
  import { componentRootIndex, manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
3
  import "../styles/ui-nav-item.css";
4
4
 
5
- const definition = {...{"contract":{"tag":"ui-nav-item","props":{"as":{"type":{"kind":"terminal","name":"keyword"},"values":["button","a"],"required":false,"target":{"attribute":"as"},"default":"button"},"current":{"type":{"kind":"terminal","name":"keyword"},"values":["true","false","page","step","location"],"required":false,"target":{"attribute":"current"},"default":"false"},"density":{"type":{"kind":"terminal","name":"keyword"},"values":["comfortable","compact"],"required":false,"target":{"attribute":"density"},"default":"comfortable"},"href":{"type":"string","required":false,"target":{"attribute":"href"}},"rel":{"type":"string","required":false,"target":{"attribute":"rel"}},"target":{"type":"string","required":false,"target":{"attribute":"target"}},"variant":{"type":{"kind":"terminal","name":"keyword"},"values":["surface","line"],"required":false,"target":{"attribute":"variant"},"default":"surface"}}},"template":{"kind":"element","name":"template","attributes":[],"children":[{"kind":"element","name":"a","attributes":[{"kind":"attribute","name":"href","expression":"href","expressionPlan":{"source":"href","ast":{"kind":"id","name":"href"},"dependencies":["href"]}},{"kind":"attribute","name":"target","expression":"target","expressionPlan":{"source":"target","ast":{"kind":"id","name":"target"},"dependencies":["target"]}},{"kind":"attribute","name":"rel","expression":"rel","expressionPlan":{"source":"rel","ast":{"kind":"id","name":"rel"},"dependencies":["rel"]}},{"kind":"attribute","name":"aria-current","expression":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","expressionPlan":{"source":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"page"}},{"key":"false","value":{"kind":"literal","value":null}},{"key":"page","value":{"kind":"literal","value":"page"}},{"key":"step","value":{"kind":"literal","value":"step"}},{"key":"location","value":{"kind":"literal","value":"location"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"id","name":"current"}]}},"dependencies":["current"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"indicator"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"label"}],"children":[{"kind":"slot"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"description"}],"children":[{"kind":"slot","fallback":[],"name":"description"}]}]}],"flow":{"kind":"when","test":"as = 'a'","testPlan":{"source":"as = 'a'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"a"}},"dependencies":["as"]}}},{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"aria-current","expression":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","expressionPlan":{"source":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"page"}},{"key":"false","value":{"kind":"literal","value":null}},{"key":"page","value":{"kind":"literal","value":"page"}},{"key":"step","value":{"kind":"literal","value":"step"}},{"key":"location","value":{"kind":"literal","value":"location"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"id","name":"current"}]}},"dependencies":["current"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"indicator"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"label"}],"children":[{"kind":"slot"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"description"}],"children":[{"kind":"slot","fallback":[],"name":"description"}]}]}],"flow":{"kind":"else"}}],"flow":{"kind":"match"}},"declarations":[],"root":{"kind":"native","element":"button","choices":["a","button"]}},source:{file:import.meta.url},css:""};
5
+ const definition = {...{"contract":{"tag":"ui-nav-item","props":{"as":{"type":{"kind":"terminal","name":"keyword"},"values":["button","a"],"required":false,"target":{"attribute":"as"},"default":"button"},"current":{"type":{"kind":"terminal","name":"keyword"},"values":["true","false","page","step","location"],"required":false,"target":{"attribute":"current"},"default":"false"},"density":{"type":{"kind":"terminal","name":"keyword"},"values":["comfortable","compact"],"required":false,"target":{"attribute":"density"},"default":"comfortable"},"href":{"type":"string","required":false,"target":{"attribute":"href"}},"rel":{"type":"string","required":false,"target":{"attribute":"rel"}},"target":{"type":"string","required":false,"target":{"attribute":"target"}},"variant":{"type":{"kind":"terminal","name":"keyword"},"values":["surface","line"],"required":false,"target":{"attribute":"variant"},"default":"surface"}}},"template":{"kind":"element","name":"template","attributes":[],"children":[{"kind":"element","name":"a","attributes":[{"kind":"attribute","name":"href","expression":"href","expressionPlan":{"source":"href","ast":{"kind":"id","name":"href"},"dependencies":["href"]}},{"kind":"attribute","name":"target","expression":"target","expressionPlan":{"source":"target","ast":{"kind":"id","name":"target"},"dependencies":["target"]}},{"kind":"attribute","name":"rel","expression":"rel","expressionPlan":{"source":"rel","ast":{"kind":"id","name":"rel"},"dependencies":["rel"]}},{"kind":"attribute","name":"aria-current","expression":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","expressionPlan":{"source":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"page"}},{"key":"false","value":{"kind":"literal","value":null}},{"key":"page","value":{"kind":"literal","value":"page"}},{"key":"step","value":{"kind":"literal","value":"step"}},{"key":"location","value":{"kind":"literal","value":"location"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"id","name":"current"}]}},"dependencies":["current"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"indicator"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"label"}],"children":[{"kind":"slot"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"description"}],"children":[{"kind":"slot","fallback":[],"name":"description"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"trailing"}],"children":[{"kind":"slot","fallback":[],"name":"trailing"}]}],"flow":{"kind":"when","test":"as = 'a'","testPlan":{"source":"as = 'a'","ast":{"kind":"binary","op":"=","left":{"kind":"id","name":"as"},"right":{"kind":"literal","value":"a"}},"dependencies":["as"]}}},{"kind":"element","name":"button","attributes":[{"kind":"literal","name":"type","value":"button"},{"kind":"attribute","name":"aria-current","expression":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","expressionPlan":{"source":"{ true: 'page', false: null, page: 'page', step: 'step', location: 'location' }[format('%s', current)]","ast":{"kind":"index","object":{"kind":"object","pairs":[{"key":"true","value":{"kind":"literal","value":"page"}},{"key":"false","value":{"kind":"literal","value":null}},{"key":"page","value":{"kind":"literal","value":"page"}},{"key":"step","value":{"kind":"literal","value":"step"}},{"key":"location","value":{"kind":"literal","value":"location"}}]},"index":{"kind":"call","fn":"format","args":[{"kind":"literal","value":"%s"},{"kind":"id","name":"current"}]}},"dependencies":["current"]}}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"indicator"},{"kind":"literal","name":"aria-hidden","value":"true"}],"children":[]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"leading"}],"children":[{"kind":"slot","fallback":[],"name":"leading"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"content"}],"children":[{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"label"}],"children":[{"kind":"slot"}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"description"}],"children":[{"kind":"slot","fallback":[],"name":"description"}]}]},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"trailing"}],"children":[{"kind":"slot","fallback":[],"name":"trailing"}]}],"flow":{"kind":"else"}}],"flow":{"kind":"match"}},"declarations":[],"root":{"kind":"native","element":"button","choices":["a","button"]}},source:{file:import.meta.url},css:""};
6
6
 
7
7
  export function createUiNavItem(options = {}) {
8
8
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
@@ -68,6 +68,18 @@ export function createUiNavItem(options = {}) {
68
68
  }
69
69
  element2.append(element4);
70
70
  element.append(element2);
71
+ const element5 = document.createElement("span");
72
+ element5.setAttribute("class", "trailing");
73
+ if (slots["trailing"] ?? [].length > 0) {
74
+ for (const child of slots["trailing"] ?? []) {
75
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
76
+ if (node.nodeType === 1) node.setAttribute("data-slotted", "");
77
+ projected.push([node, "trailing"]);
78
+ element5.append(node);
79
+ }
80
+ } else {
81
+ }
82
+ element.append(element5);
71
83
  } else {
72
84
  element = document.createElement("button");
73
85
  for (const [name, value] of Object.entries(attributes)) {
@@ -76,49 +88,61 @@ export function createUiNavItem(options = {}) {
76
88
  }
77
89
  if (!element.hasAttribute("type")) element.setAttribute("type", "button");
78
90
  element.setAttribute("data-component", "ui-nav-item");
79
- const element5 = document.createElement("span");
80
- element5.setAttribute("class", "indicator");
81
- element5.setAttribute("aria-hidden", "true");
82
- element.append(element5);
83
91
  const element6 = document.createElement("span");
84
- element6.setAttribute("class", "leading");
92
+ element6.setAttribute("class", "indicator");
93
+ element6.setAttribute("aria-hidden", "true");
94
+ element.append(element6);
95
+ const element7 = document.createElement("span");
96
+ element7.setAttribute("class", "leading");
85
97
  if (slots["leading"] ?? [].length > 0) {
86
98
  for (const child of slots["leading"] ?? []) {
87
99
  const node = typeof child === "string" ? document.createTextNode(child) : child;
88
100
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
89
101
  projected.push([node, "leading"]);
90
- element6.append(node);
102
+ element7.append(node);
91
103
  }
92
104
  } else {
93
105
  }
94
- element.append(element6);
95
- const element7 = document.createElement("span");
96
- element7.setAttribute("class", "content");
106
+ element.append(element7);
97
107
  const element8 = document.createElement("span");
98
- element8.setAttribute("class", "label");
108
+ element8.setAttribute("class", "content");
109
+ const element9 = document.createElement("span");
110
+ element9.setAttribute("class", "label");
99
111
  if (children.length > 0) {
100
112
  for (const child of children) {
101
113
  const node = typeof child === "string" ? document.createTextNode(child) : child;
102
114
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
103
115
  projected.push([node, ""]);
104
- element8.append(node);
116
+ element9.append(node);
105
117
  }
106
118
  } else {
107
119
  }
108
- element7.append(element8);
109
- const element9 = document.createElement("span");
110
- element9.setAttribute("class", "description");
120
+ element8.append(element9);
121
+ const element10 = document.createElement("span");
122
+ element10.setAttribute("class", "description");
111
123
  if (slots["description"] ?? [].length > 0) {
112
124
  for (const child of slots["description"] ?? []) {
113
125
  const node = typeof child === "string" ? document.createTextNode(child) : child;
114
126
  if (node.nodeType === 1) node.setAttribute("data-slotted", "");
115
127
  projected.push([node, "description"]);
116
- element9.append(node);
128
+ element10.append(node);
117
129
  }
118
130
  } else {
119
131
  }
120
- element7.append(element9);
121
- element.append(element7);
132
+ element8.append(element10);
133
+ element.append(element8);
134
+ const element11 = document.createElement("span");
135
+ element11.setAttribute("class", "trailing");
136
+ if (slots["trailing"] ?? [].length > 0) {
137
+ for (const child of slots["trailing"] ?? []) {
138
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
139
+ if (node.nodeType === 1) node.setAttribute("data-slotted", "");
140
+ projected.push([node, "trailing"]);
141
+ element11.append(node);
142
+ }
143
+ } else {
144
+ }
145
+ element.append(element11);
122
146
  }
123
147
  manageComponentLifecycle(element, definition, { props: componentProps, projected,
124
148
  });