@swiftwc/ui 0.0.0-dev.66 → 0.0.0-dev.68

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 (40) hide show
  1. package/generated/client/index.d.ts +4 -1
  2. package/generated/client/index.js +50 -35
  3. package/generated/components/h-stack.d.ts +4 -0
  4. package/generated/components/h-stack.js +4 -0
  5. package/generated/components/index.d.ts +1 -0
  6. package/generated/components/index.js +1 -0
  7. package/generated/components/label-view.d.ts +5 -0
  8. package/generated/components/label-view.js +5 -0
  9. package/generated/components/toggle-view.d.ts +28 -0
  10. package/generated/components/toggle-view.js +222 -0
  11. package/generated/components/v-stack.d.ts +4 -0
  12. package/generated/components/v-stack.js +4 -0
  13. package/generated/css/index.css +110 -31
  14. package/generated/events/index.d.ts +1 -0
  15. package/generated/events/index.js +1 -0
  16. package/generated/events/toggle-view.d.ts +9 -0
  17. package/generated/events/toggle-view.js +1 -0
  18. package/generated/tpl/html.d.ts +5 -0
  19. package/generated/tpl/html.js +3 -0
  20. package/generated/tpl/index.d.ts +4 -0
  21. package/generated/tpl/index.js +4 -0
  22. package/generated/tpl/render.d.ts +2 -0
  23. package/generated/tpl/render.js +135 -0
  24. package/package.json +3 -2
  25. package/scss/_components.scss +2 -0
  26. package/scss/components/_date-picker.scss +15 -15
  27. package/scss/components/_h-stack.scss +17 -1
  28. package/scss/components/_index.scss +4 -0
  29. package/scss/components/_menu-view.scss +53 -49
  30. package/scss/components/_picker-view.scss +38 -39
  31. package/scss/components/_scroll-view-proxy.scss +4 -2
  32. package/scss/components/_section-view.scss +23 -22
  33. package/scss/components/_table-view.scss +6 -6
  34. package/scss/components/_text-field.scss +26 -26
  35. package/scss/components/_toggle-view.scss +79 -0
  36. package/scss/components/_tool-bar.scss +52 -52
  37. package/scss/mixins/_index.scss +9 -2
  38. package/scss/placeholders/_lists.scss +14 -12
  39. package/scss/transitions/_menu-view.scss +17 -15
  40. package/web-components.html-data/en.json +175 -0
@@ -1134,6 +1134,10 @@
1134
1134
  :where(table-view)::part(table-footer-leading-stack),
1135
1135
  :where(table-view)::part(table-footer-principal-stack),
1136
1136
  :where(table-view)::part(table-footer-trailing-stack),
1137
+ :where(toggle-view)::part(toggle-stack),
1138
+ :where(toggle-view)::part(toggle-label-stack),
1139
+ :where(toggle-view)::part(toggle-input-stack),
1140
+ :where(toggle-view)::part(text-field-form-input),
1137
1141
  :where(text-field)::part(text-field-stack),
1138
1142
  :where(text-field)::part(text-field-label-stack),
1139
1143
  :where(text-field)::part(text-field-input-stack),
@@ -1421,8 +1425,8 @@
1421
1425
  :where(detail-placeholder > scroll-view) {
1422
1426
  overflow: clip auto;
1423
1427
  pointer-events: all;
1424
- overscroll-behavior: contain;
1425
1428
  -webkit-overflow-scrolling: touch;
1429
+ overscroll-behavior: contain;
1426
1430
  container: scroll-view/size;
1427
1431
  padding-block: var(--safe-area-inset-top) var(--safe-area-inset-bottom);
1428
1432
  padding-inline: var(--safe-area-inset-left) var(--safe-area-inset-right);
@@ -1911,8 +1915,8 @@
1911
1915
  }
1912
1916
  :where(navigation-stack > scroll-view, navigation-split-view > scroll-view, [is=sidebar-view] > scroll-view, body-view > scroll-view, [is=full-screen] > scroll-view, [is=sheet-view] > scroll-view) {
1913
1917
  overflow: clip auto;
1914
- overscroll-behavior: contain;
1915
1918
  -webkit-overflow-scrolling: touch;
1919
+ overscroll-behavior: contain;
1916
1920
  padding-block: var(--safe-area-inset-top) var(--safe-area-inset-bottom);
1917
1921
  padding-inline: var(--safe-area-inset-left) var(--safe-area-inset-right);
1918
1922
  container: scroll-view/size;
@@ -1993,8 +1997,6 @@
1993
1997
  :where(scroll-view-proxy:has(> v-stack, > h-stack) > v-stack,
1994
1998
  scroll-view-proxy:has(> v-stack, > h-stack) > h-stack) {
1995
1999
  position: relative;
1996
- overscroll-behavior: contain;
1997
- -webkit-overflow-scrolling: touch;
1998
2000
  scrollbar-width: thin;
1999
2001
  container: scroll-view-proxy/inline-size;
2000
2002
  }
@@ -2010,10 +2012,14 @@
2010
2012
  :where(scroll-view-proxy:has(> v-stack, > h-stack) > v-stack) {
2011
2013
  overflow: clip auto;
2012
2014
  scroll-snap-type: block mandatory;
2015
+ -webkit-overflow-scrolling: touch;
2016
+ overscroll-behavior-block: contain;
2013
2017
  }
2014
2018
  :where(scroll-view-proxy:has(> v-stack, > h-stack) > h-stack) {
2015
2019
  overflow: auto clip;
2016
2020
  scroll-snap-type: inline mandatory;
2021
+ -webkit-overflow-scrolling: touch;
2022
+ overscroll-behavior-inline: contain;
2017
2023
  }
2018
2024
  :where(scroll-view-proxy:has(> v-stack, > h-stack) > h-stack[padding]) {
2019
2025
  scroll-padding-inline: 1rem;
@@ -2039,9 +2045,36 @@
2039
2045
  :where(h-stack[template="auto spacer auto"]) {
2040
2046
  grid-template-columns: auto minmax(0, 1fr) auto;
2041
2047
  }
2048
+ :where(h-stack[template="repeat(1,spacer)"]) {
2049
+ grid-template-columns: repeat(1, minmax(0, 1fr));
2050
+ }
2051
+ :where(h-stack[template="repeat(2,spacer)"]) {
2052
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2053
+ }
2054
+ :where(h-stack[template="repeat(3,spacer)"]) {
2055
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2056
+ }
2042
2057
  :where(h-stack[template="repeat(4,spacer)"]) {
2043
2058
  grid-template-columns: repeat(4, minmax(0, 1fr));
2044
2059
  }
2060
+ :where(h-stack[template="repeat(5,spacer)"]) {
2061
+ grid-template-columns: repeat(5, minmax(0, 1fr));
2062
+ }
2063
+ :where(h-stack[template="repeat(6,spacer)"]) {
2064
+ grid-template-columns: repeat(6, minmax(0, 1fr));
2065
+ }
2066
+ :where(h-stack[template="repeat(7,spacer)"]) {
2067
+ grid-template-columns: repeat(7, minmax(0, 1fr));
2068
+ }
2069
+ :where(h-stack[template="repeat(8,spacer)"]) {
2070
+ grid-template-columns: repeat(8, minmax(0, 1fr));
2071
+ }
2072
+ :where(h-stack[template="repeat(9,spacer)"]) {
2073
+ grid-template-columns: repeat(9, minmax(0, 1fr));
2074
+ }
2075
+ :where(h-stack[template="repeat(10,spacer)"]) {
2076
+ grid-template-columns: repeat(10, minmax(0, 1fr));
2077
+ }
2045
2078
  :where(h-stack[template="repeat(2,spacer) auto"]) {
2046
2079
  grid-template-columns: repeat(2, minmax(0, 1fr)) auto;
2047
2080
  }
@@ -2575,14 +2608,6 @@
2575
2608
  grid-template-rows: auto 1fr auto;
2576
2609
  grid-template-areas: "top-bar" "spacer" "bottom-bar";
2577
2610
  }
2578
- :where(tool-bar > *:not(sidebar-toggle), tool-bar > sidebar-toggle > tool-bar-item, tab-view > sidebar-toggle > tool-bar-item, navigation-split-view > sidebar-toggle > tool-bar-item) {
2579
- backdrop-filter: var(--liquid-glass-backdrop-filter);
2580
- box-shadow: var(--toolbar-cell-box-shadow);
2581
- min-inline-size: var(--toolbar-cell-min-size);
2582
- transform: var(--toolbar-cell-scale, );
2583
- filter: var(--toolbar-cell-filter, );
2584
- opacity: var(--toolbar-cell-opacity, );
2585
- }
2586
2611
  :where(tool-bar)::part(top-bar), :where(tool-bar)::part(bottom-bar) {
2587
2612
  position: relative;
2588
2613
  padding-inline: var(--safe-area-inset-left, 0px) var(--safe-area-inset-right, 0px);
@@ -2609,6 +2634,14 @@
2609
2634
  column-gap: var(--toolbar-col-gap);
2610
2635
  padding-inline: var(--toolbar-col-gap) var(--toolbar-col-gap);
2611
2636
  }
2637
+ :where(tool-bar > *:not(sidebar-toggle), tool-bar > sidebar-toggle > tool-bar-item, tab-view > sidebar-toggle > tool-bar-item, navigation-split-view > sidebar-toggle > tool-bar-item) {
2638
+ backdrop-filter: var(--liquid-glass-backdrop-filter);
2639
+ box-shadow: var(--toolbar-cell-box-shadow);
2640
+ min-inline-size: var(--toolbar-cell-min-size);
2641
+ transform: var(--toolbar-cell-scale, );
2642
+ filter: var(--toolbar-cell-filter, );
2643
+ opacity: var(--toolbar-cell-opacity, );
2644
+ }
2612
2645
  @media (min-width: 37rem) and (min-height: 27.75rem) {
2613
2646
  :where([is=sheet-view] tool-bar)::part(top-bar), :where([is=sheet-view] tool-bar)::part(bottom-bar) {
2614
2647
  --safe-area-inset-left: 0px;
@@ -3088,6 +3121,52 @@
3088
3121
  }
3089
3122
  }
3090
3123
  }
3124
+ @layer sw-components {
3125
+ :where(toggle-view) {
3126
+ grid-template-columns: minmax(0, 1fr);
3127
+ grid-template-rows: minmax(0, 1fr);
3128
+ --toggle--trigger-bg: lightgray;
3129
+ }
3130
+ :where(toggle-view)::part(toggle-stack) {
3131
+ grid-template-columns: auto minmax(0, 1fr);
3132
+ grid-template-rows: minmax(0, 1fr);
3133
+ column-gap: var(--labeled-content-column-gap);
3134
+ }
3135
+ :where(toggle-view)::part(toggle-label-stack) {
3136
+ color: var(--secondary);
3137
+ }
3138
+ :where(toggle-view)::part(toggle-input-stack) {
3139
+ place-items: stretch;
3140
+ place-content: stretch;
3141
+ }
3142
+ :where(toggle-view)::part(toggle-form-input):focus {
3143
+ outline: blue solid 5px;
3144
+ }
3145
+ :where(toggle-view)::part(toggle-form-input) {
3146
+ text-align: end;
3147
+ position: relative;
3148
+ display: grid;
3149
+ outline: red solid 3px;
3150
+ border-radius: 2rem;
3151
+ inline-size: 4rem;
3152
+ block-size: 1rem;
3153
+ background: var(--toggle--trigger-bg);
3154
+ }
3155
+ :where(toggle-view)::part(toggle-form-input)::before {
3156
+ content: "";
3157
+ display: grid;
3158
+ position: absolute;
3159
+ inset: 0 auto auto 0;
3160
+ inline-size: 1rem;
3161
+ block-size: 1rem;
3162
+ border-radius: 1rem;
3163
+ backdrop-filter: var(--liquid-glass-backdrop-filter);
3164
+ box-shadow: var(--liquid-glass-box-shadow);
3165
+ }
3166
+ toggle-view[aria-checked=true] {
3167
+ --toggle--trigger-bg: green;
3168
+ }
3169
+ }
3091
3170
  @layer sw-components {
3092
3171
  :where(labeled-content) {
3093
3172
  container: labeled-content/inline-size;
@@ -3250,8 +3329,8 @@
3250
3329
  pointer-events: none;
3251
3330
  }
3252
3331
  :where(menu-view)::part(menu-form) {
3253
- overscroll-behavior: contain;
3254
3332
  -webkit-overflow-scrolling: touch;
3333
+ overscroll-behavior: contain;
3255
3334
  --menu--dialog-max-inline-size: anchor-size();
3256
3335
  --menu--dialog-max-block-size: anchor-size();
3257
3336
  }
@@ -3302,7 +3381,7 @@
3302
3381
  --menu--dialog-max-inline-size: anchor-size();
3303
3382
  --menu--dialog-max-block-size: anchor-size();
3304
3383
  }
3305
- menu-view[open]:not(tool-bar-item > menu-view) {
3384
+ :where(menu-view[open]:not(tool-bar-item > menu-view)) {
3306
3385
  --menu--summary-scale: scale(0.01);
3307
3386
  --menu--summary-filter: blur(10px);
3308
3387
  }
@@ -4209,6 +4288,21 @@
4209
4288
  grid-template-areas: "header" "main" "footer";
4210
4289
  gap: 0.5rem;
4211
4290
  }
4291
+ :where(section-view)::part(section-header-stack), :where(section-view)::part(section-footer-stack) {
4292
+ pointer-events: none;
4293
+ }
4294
+ :where(section-view)::part(section-header-stack) {
4295
+ grid-area: header;
4296
+ }
4297
+ :where(section-view)::part(section-main-stack) {
4298
+ grid-area: main;
4299
+ }
4300
+ :where(section-view)::part(section-footer-stack) {
4301
+ grid-area: footer;
4302
+ }
4303
+ :where(section-view)::part(section-header-stack) {
4304
+ order: -1;
4305
+ }
4212
4306
  :where(section-view:has(> [slot=header]):not(:has(> [slot=footer]))) {
4213
4307
  grid-template-rows: auto minmax(max-content, 1fr);
4214
4308
  grid-template-areas: "header" "main";
@@ -4227,21 +4321,6 @@
4227
4321
  :where(section-view:not(:has(> [slot=footer])))::part(section-footer-stack) {
4228
4322
  display: none;
4229
4323
  }
4230
- :where(section-view)::part(section-header-stack), :where(section-view)::part(section-footer-stack) {
4231
- pointer-events: none;
4232
- }
4233
- :where(section-view)::part(section-header-stack) {
4234
- grid-area: header;
4235
- }
4236
- :where(section-view)::part(section-main-stack) {
4237
- grid-area: main;
4238
- }
4239
- :where(section-view)::part(section-footer-stack) {
4240
- grid-area: footer;
4241
- }
4242
- :where(section-view)::part(section-header-stack) {
4243
- order: -1;
4244
- }
4245
4324
  section-view {
4246
4325
  /* :where(&:not(& &))::part(section-footer-stack),
4247
4326
  :where(&:not(& &))::part(section-header-stack) {
@@ -4302,7 +4381,7 @@
4302
4381
  border-radius: 0 0 var(--insetlist-item-border-radius) var(--insetlist-item-border-radius);
4303
4382
  border-top: 1px solid var(--separator);
4304
4383
  }
4305
- :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-header-leading-stack), :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-header-principal-stack), :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-header-trailing-stack), :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-footer-leading-stack), :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-footer-principal-stack), :where(:where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view)))::part(table-footer-trailing-stack) {
4384
+ :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-header-leading-stack), :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-header-principal-stack), :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-header-trailing-stack), :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-footer-leading-stack), :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-footer-principal-stack), :where(table-view:not(table-view table-view, list-view table-view, [is=form-view] table-view))::part(table-footer-trailing-stack) {
4306
4385
  grid-auto-flow: column;
4307
4386
  grid-template-columns: minmax(0, 1fr);
4308
4387
  column-gap: var(--toolbar-col-gap);
@@ -5317,8 +5396,8 @@
5317
5396
  z-index: -1;
5318
5397
  }
5319
5398
  :where([is=tab-bar] > [is=form-view]) {
5320
- overscroll-behavior: contain;
5321
5399
  -webkit-overflow-scrolling: touch;
5400
+ overscroll-behavior: contain;
5322
5401
  pointer-events: all;
5323
5402
  touch-action: none;
5324
5403
  grid-auto-flow: column;
@@ -6,3 +6,4 @@ export * from './picker-view';
6
6
  export * from './scroll-view';
7
7
  export * from './tab-view';
8
8
  export * from './text-field';
9
+ export * from './toggle-view';
@@ -6,3 +6,4 @@ export * from './picker-view';
6
6
  export * from './scroll-view';
7
7
  export * from './tab-view';
8
8
  export * from './text-field';
9
+ export * from './toggle-view';
@@ -0,0 +1,9 @@
1
+ export type ToggleChangeDetail = {
2
+ isOn: boolean;
3
+ value: string | null;
4
+ };
5
+ declare global {
6
+ interface HTMLElementEventMap {
7
+ change: CustomEvent<ToggleChangeDetail>;
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface TemplateResult {
2
+ strings: TemplateStringsArray;
3
+ values: unknown[];
4
+ }
5
+ export default function (strings: TemplateStringsArray, ...values: unknown[]): TemplateResult;
@@ -0,0 +1,3 @@
1
+ export default function (strings, ...values) {
2
+ return { strings, values };
3
+ }
@@ -0,0 +1,4 @@
1
+ export { default as html } from './html';
2
+ export * from './html';
3
+ export { default as render } from './render';
4
+ export * from './render';
@@ -0,0 +1,4 @@
1
+ export { default as html } from './html';
2
+ export * from './html';
3
+ export { default as render } from './render';
4
+ export * from './render';
@@ -0,0 +1,2 @@
1
+ import type { TemplateResult } from './html';
2
+ export default function (result: TemplateResult, container: Element | ShadowRoot): void;
@@ -0,0 +1,135 @@
1
+ // --- Template preparation (runs ONCE per unique template literal) -----
2
+ const MARKER = '\uD83D\uDD25PART\uD83D\uDD25'; // unlikely-collision sentinel
3
+ const templateCache = new WeakMap();
4
+ function prepare(strings) {
5
+ let cached = templateCache.get(strings);
6
+ if (cached)
7
+ return cached;
8
+ const partDescriptors = [];
9
+ let htmlStr = '';
10
+ strings.forEach((chunk, i) => {
11
+ htmlStr += chunk;
12
+ if (i < strings.length - 1) {
13
+ // Is this interpolation inside an attribute value?
14
+ // e.g. `...aria-checked="${...}"` — chunk ends with `attr="` or `attr='` or `attr=`
15
+ const attrMatch = /([a-zA-Z0-9_-]+)=(["']?)$/.exec(chunk);
16
+ if (attrMatch) {
17
+ partDescriptors.push({ type: 'attr', name: attrMatch[1] });
18
+ htmlStr += MARKER; // becomes the attribute's value
19
+ }
20
+ else {
21
+ partDescriptors.push({ type: 'child' });
22
+ // start/end comment pair — gives us a stable region to patch later,
23
+ // and room to grow into list/array rendering without a redesign
24
+ htmlStr += `<!--${MARKER}-->`;
25
+ }
26
+ }
27
+ });
28
+ const element = document.createElement('template');
29
+ element.innerHTML = htmlStr;
30
+ cached = { element, partDescriptors };
31
+ templateCache.set(strings, cached);
32
+ return cached;
33
+ }
34
+ const instanceCache = new WeakMap();
35
+ function createInstance(prepared) {
36
+ const fragment = prepared.element.content.cloneNode(true);
37
+ const parts = [];
38
+ // Walk the clone once, in the same order `prepare()` emitted markers,
39
+ // and bind each descriptor to a real node.
40
+ const walker = document.createTreeWalker(fragment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT);
41
+ let descriptorIndex = 0;
42
+ const descriptors = prepared.partDescriptors;
43
+ let node;
44
+ while ((node = walker.nextNode())) {
45
+ if (descriptorIndex >= descriptors.length)
46
+ break;
47
+ if (node.nodeType === Node.COMMENT_NODE && node.data === MARKER) {
48
+ const start = node;
49
+ const end = document.createComment(MARKER);
50
+ start.after(end);
51
+ parts.push({ type: 'child', start, end, committed: undefined });
52
+ descriptorIndex++;
53
+ }
54
+ else if (node.nodeType === Node.ELEMENT_NODE) {
55
+ const el = node;
56
+ for (const attr of Array.from(el.attributes)) {
57
+ if (attr.value === MARKER) {
58
+ const desc = descriptors[descriptorIndex];
59
+ if (desc.type === 'attr') {
60
+ parts.push({ type: 'attr', el, name: desc.name, committed: undefined });
61
+ descriptorIndex++;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return { fragment, parts };
68
+ }
69
+ // --- Committing values into parts (the only thing that runs per update) -
70
+ function isTemplateResult(v) {
71
+ return !!v && typeof v === 'object' && 'strings' in v && 'values' in v;
72
+ }
73
+ function toNode(value) {
74
+ if (value instanceof Node)
75
+ return value;
76
+ if (isTemplateResult(value)) {
77
+ const { fragment, parts } = createInstance(prepare(value.strings));
78
+ parts.forEach((part, i) => {
79
+ const v = value.values[i];
80
+ part.type === 'child' ? commitChild(part, v) : commitAttr(part, v);
81
+ });
82
+ return fragment;
83
+ }
84
+ return document.createTextNode(String(value));
85
+ }
86
+ function commitChild(part, value) {
87
+ if (value === part.committed)
88
+ return; // dirty-check, skip untouched parts
89
+ // clear everything between start/end
90
+ let n = part.start.nextSibling;
91
+ while (n && n !== part.end) {
92
+ const next = n.nextSibling;
93
+ n.remove();
94
+ n = next;
95
+ }
96
+ for (const item of Array.isArray(value) ? value : [value]) {
97
+ if (item === null || item === undefined || item === false)
98
+ continue;
99
+ part.end.before(toNode(item));
100
+ }
101
+ part.committed = value;
102
+ }
103
+ function commitAttr(part, value) {
104
+ if (value === part.committed)
105
+ return;
106
+ if (value === null || value === undefined || value === false) {
107
+ part.el.removeAttribute(part.name);
108
+ }
109
+ else {
110
+ part.el.setAttribute(part.name, String(value));
111
+ }
112
+ part.committed = value;
113
+ }
114
+ // --- Public render() ----------------------------------------------------
115
+ export default function (result, container) {
116
+ const prepared = prepare(result.strings);
117
+ let instance = instanceCache.get(container);
118
+ if (!instance || instance.strings !== result.strings) {
119
+ // first render, OR the template shape changed entirely — full (re)build
120
+ container.textContent = '';
121
+ const { fragment, parts } = createInstance(prepared);
122
+ container.append(fragment);
123
+ instance = { strings: result.strings, fragmentRoot: fragment, parts };
124
+ instanceCache.set(container, instance);
125
+ }
126
+ // same template shape as last time → patch existing DOM nodes only,
127
+ // no innerHTML, no re-clone, no focus/scroll loss
128
+ instance.parts.forEach((part, i) => {
129
+ const value = result.values[i];
130
+ if (part.type === 'child')
131
+ commitChild(part, value);
132
+ else
133
+ commitAttr(part, value);
134
+ });
135
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swiftwc/ui",
3
- "version": "0.0.0-dev.66",
3
+ "version": "0.0.0-dev.68",
4
4
  "description": "Elegant SwiftUI-inspired web components for standalone web apps and web extensions.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -63,11 +63,12 @@
63
63
  "build:ts": "tsc",
64
64
  "build:scss": "sass --style=expanded --no-source-map scss/index.scss generated/css/index.css",
65
65
  "build:manifest": "tsx scripts/make-manifest.ts",
66
- "build:barrels": "npm run build:barrels:components && npm run build:barrels:events && npm run build:barrels:buses && npm run build:barrels:i18n",
66
+ "build:barrels": "npm run build:barrels:components && npm run build:barrels:events && npm run build:barrels:buses && npm run build:barrels:tpl && npm run build:barrels:i18n",
67
67
  "build:barrels:components": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --directory ./js/components --exclude \".\\.test\\.ts\"",
68
68
  "build:barrels:events": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --directory ./js/events --exclude \".\\.test\\.ts\"",
69
69
  "build:barrels:buses": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --exportDefault --directory ./js/buses",
70
70
  "build:barrels:i18n": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --exportDefault --fullPathname --directory ./js/i18n/locales",
71
+ "build:barrels:tpl": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --exportDefault --directory ./js/tpl --exclude \".\\.test\\.ts\"",
71
72
  "build:barrels:decorators": "barrelsby --noHeader --delete --singleQuotes --noSemicolon --exportDefault --directory ./js/internal/decorators",
72
73
  "format:check": "prettier . --check",
73
74
  "format:write": "prettier . --write",
@@ -52,6 +52,8 @@
52
52
 
53
53
  @forward 'components/label-view';
54
54
 
55
+ @forward 'components/toggle-view';
56
+
55
57
  @forward 'components/labeled-content';
56
58
 
57
59
  // @forward 'components/button-view';
@@ -5,26 +5,26 @@
5
5
  :where(&) {
6
6
  grid-template-columns: minmax(0, 1fr);
7
7
  grid-template-rows: minmax(0, 1fr);
8
- }
9
8
 
10
- :where(&)::part(date-picker-stack) {
11
- grid-template-columns: auto minmax(0, 1fr);
12
- grid-template-rows: minmax(0, 1fr);
13
- }
9
+ &::part(date-picker-stack) {
10
+ grid-template-columns: auto minmax(0, 1fr);
11
+ grid-template-rows: minmax(0, 1fr);
12
+ }
14
13
 
15
- :where(&)::part(date-picker-label-stack) {
16
- // display: grid;
17
- }
14
+ &::part(date-picker-label-stack) {
15
+ // display: grid;
16
+ }
18
17
 
19
- :where(&)::part(date-picker-input-stack) {
20
- place-items: stretch;
21
- place-content: stretch;
18
+ &::part(date-picker-input-stack) {
19
+ place-items: stretch;
20
+ place-content: stretch;
22
21
 
23
- grid-auto-flow: column;
24
- }
22
+ grid-auto-flow: column;
23
+ }
25
24
 
26
- :where(&)::part(date-picker-form-input) {
27
- text-align: end;
25
+ &::part(date-picker-form-input) {
26
+ text-align: end;
27
+ }
28
28
  }
29
29
  }
30
30
  }
@@ -3,7 +3,23 @@
3
3
  @use 'sass:string';
4
4
  @use 'sass:list';
5
5
 
6
- $h-stack-templates: ((auto minmax(0, 1fr)), (minmax(0, 1fr) auto), (auto minmax(0, 1fr) auto auto), (auto minmax(0, 1fr) auto), (repeat(4, minmax(0, 1fr))), (repeat(2, minmax(0, 1fr)) auto));
6
+ $h-stack-templates: (
7
+ (auto minmax(0, 1fr)),
8
+ (minmax(0, 1fr) auto),
9
+ (auto minmax(0, 1fr) auto auto),
10
+ (auto minmax(0, 1fr) auto),
11
+ (repeat(1, minmax(0, 1fr))),
12
+ (repeat(2, minmax(0, 1fr))),
13
+ (repeat(3, minmax(0, 1fr))),
14
+ (repeat(4, minmax(0, 1fr))),
15
+ (repeat(5, minmax(0, 1fr))),
16
+ (repeat(6, minmax(0, 1fr))),
17
+ (repeat(7, minmax(0, 1fr))),
18
+ (repeat(8, minmax(0, 1fr))),
19
+ (repeat(9, minmax(0, 1fr))),
20
+ (repeat(10, minmax(0, 1fr))),
21
+ (repeat(2, minmax(0, 1fr)) auto)
22
+ );
7
23
 
8
24
  @layer #{vars.$components-layer} {
9
25
  h-stack {
@@ -70,6 +70,10 @@
70
70
  :where(table-view)::part(table-footer-leading-stack),
71
71
  :where(table-view)::part(table-footer-principal-stack),
72
72
  :where(table-view)::part(table-footer-trailing-stack),
73
+ :where(toggle-view)::part(toggle-stack),
74
+ :where(toggle-view)::part(toggle-label-stack),
75
+ :where(toggle-view)::part(toggle-input-stack),
76
+ :where(toggle-view)::part(text-field-form-input),
73
77
  :where(text-field)::part(text-field-stack),
74
78
  :where(text-field)::part(text-field-label-stack),
75
79
  :where(text-field)::part(text-field-input-stack),