@swiftwc/ui 0.0.0-dev.114 → 0.0.0-dev.117

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 (120) hide show
  1. package/generated/client/index.js +3 -3
  2. package/generated/components/content-unavailable.d.ts +1 -1
  3. package/generated/components/content-unavailable.js +1 -1
  4. package/generated/components/{body-view.d.ts → content-view.d.ts} +2 -2
  5. package/generated/components/{body-view.js → content-view.js} +3 -3
  6. package/generated/components/index.d.ts +1 -1
  7. package/generated/components/index.js +1 -1
  8. package/generated/components/labeled-content.d.ts +1 -1
  9. package/generated/components/labeled-content.js +1 -1
  10. package/generated/components/menu-view.d.ts +1 -1
  11. package/generated/components/menu-view.js +1 -1
  12. package/generated/components/picker-view.d.ts +1 -1
  13. package/generated/components/picker-view.js +12 -12
  14. package/generated/components/progress-view.d.ts +1 -1
  15. package/generated/components/progress-view.js +1 -1
  16. package/generated/components/scroll-view.d.ts +1 -1
  17. package/generated/components/scroll-view.js +1 -1
  18. package/generated/components/section-view.d.ts +1 -1
  19. package/generated/components/section-view.js +1 -1
  20. package/generated/components/tab-view.js +6 -1
  21. package/generated/components/table-view.d.ts +1 -1
  22. package/generated/components/table-view.js +1 -1
  23. package/generated/css/index.css +230 -228
  24. package/generated/internal/class/navigation-path.js +2 -2
  25. package/generated/internal/privateNamespace.d.ts +1 -1
  26. package/generated/internal/privateNamespace.js +3 -3
  27. package/generated/internal/utils/debug.js +2 -2
  28. package/html-data/en.json +18 -18
  29. package/package.json +4 -6
  30. package/scss/_components.scss +1 -1
  31. package/scss/_vars.scss +1 -0
  32. package/scss/base/_layout.scss +8 -8
  33. package/scss/base/_reboot.scss +4 -2
  34. package/scss/base/_root.scss +1 -1
  35. package/scss/colors/_index.scss +2 -2
  36. package/scss/components/_alert-dialog.scss +3 -3
  37. package/scss/components/_bordered-button.scss +2 -2
  38. package/scss/components/_bordered-prominent-button.scss +3 -3
  39. package/scss/components/_borderless-button.scss +2 -2
  40. package/scss/components/_confirmation-dialog.scss +1 -1
  41. package/scss/components/_content-unavailable.scss +1 -1
  42. package/scss/components/{_body-view.scss → _content-view.scss} +2 -2
  43. package/scss/components/_date-picker.scss +1 -1
  44. package/scss/components/_detail-placeholder.scss +5 -5
  45. package/scss/components/_disclosure-group.scss +2 -2
  46. package/scss/components/_fine-tooltip.scss +1 -1
  47. package/scss/components/_form-view.scss +3 -3
  48. package/scss/components/_full-screen.scss +1 -1
  49. package/scss/components/_glass-button.scss +2 -2
  50. package/scss/components/_glass-prominent-button.scss +3 -3
  51. package/scss/components/_group-box.scss +1 -1
  52. package/scss/components/_h-divider.scss +1 -1
  53. package/scss/components/_h-flex-stack.scss +1 -1
  54. package/scss/components/_h-stack.scss +1 -1
  55. package/scss/components/_image-view.scss +1 -1
  56. package/scss/components/_index.scss +4 -4
  57. package/scss/components/_label-view.scss +1 -1
  58. package/scss/components/_labeled-content.scss +1 -1
  59. package/scss/components/_list-view.scss +3 -3
  60. package/scss/components/_menu-view.scss +3 -3
  61. package/scss/components/_navigation-large-title.scss +1 -1
  62. package/scss/components/_navigation-split-view.scss +18 -18
  63. package/scss/components/_navigation-stack.scss +1 -1
  64. package/scss/components/_navigation-title.scss +1 -1
  65. package/scss/components/_picker-view.scss +2 -2
  66. package/scss/components/_plain-button.scss +2 -2
  67. package/scss/components/_progress-view.scss +1 -1
  68. package/scss/components/_scroll-view-proxy.scss +1 -1
  69. package/scss/components/_scroll-view-toolbars.scss +1 -1
  70. package/scss/components/_scroll-view.scss +2 -2
  71. package/scss/components/_search-view.scss +1 -1
  72. package/scss/components/_section-view.scss +1 -1
  73. package/scss/components/_sheet-view.scss +2 -2
  74. package/scss/components/_sidebar-toggle.scss +1 -1
  75. package/scss/components/_sidebar-view.scss +2 -2
  76. package/scss/components/_sticky-container.scss +1 -1
  77. package/scss/components/_tab-bar.scss +1 -1
  78. package/scss/components/_tab-item.scss +1 -1
  79. package/scss/components/_tab-view.scss +15 -15
  80. package/scss/components/_table-column.scss +1 -1
  81. package/scss/components/_table-row.scss +1 -1
  82. package/scss/components/_table-view.scss +1 -1
  83. package/scss/components/_text-field.scss +1 -1
  84. package/scss/components/_text-view.scss +1 -1
  85. package/scss/components/_toggle-view.scss +1 -1
  86. package/scss/components/_tool-bar-item-group.scss +1 -1
  87. package/scss/components/_tool-bar-item.scss +2 -2
  88. package/scss/components/_tool-bar.scss +2 -2
  89. package/scss/components/_v-divider.scss +1 -1
  90. package/scss/components/_v-flex-stack.scss +1 -1
  91. package/scss/components/_v-keyboard.scss +1 -1
  92. package/scss/components/_v-stack.scss +1 -1
  93. package/scss/final/_touch-glass.scss +1 -1
  94. package/scss/mixins/_index.scss +2 -2
  95. package/scss/placeholders/_buttons.scss +5 -5
  96. package/scss/placeholders/_lists.scss +3 -3
  97. package/scss/transitions/_alert-dialog.scss +1 -1
  98. package/scss/transitions/_bwd.navbar.scss +1 -1
  99. package/scss/transitions/_bwd.scss +3 -3
  100. package/scss/transitions/_confirmation-dialog.scss +1 -1
  101. package/scss/transitions/_disclosure-group.scss +1 -1
  102. package/scss/transitions/_fine-tooltip.scss +1 -1
  103. package/scss/transitions/_fwd.navbar.scss +1 -1
  104. package/scss/transitions/_fwd.scss +1 -1
  105. package/scss/transitions/_glass-button.scss +1 -1
  106. package/scss/transitions/_glass-prominent-button.scss +1 -1
  107. package/scss/transitions/_index.scss +1 -1
  108. package/scss/transitions/_menu-view.scss +1 -1
  109. package/scss/transitions/_navigation-split-view.scss +1 -1
  110. package/scss/transitions/_progress-view.scss +1 -1
  111. package/scss/transitions/_sheet-view.scss +1 -1
  112. package/scss/transitions/_sidebar-view.scss +1 -1
  113. package/scss/transitions/_tab-bar.scss +1 -1
  114. package/scss/utils/_background.scss +1 -1
  115. package/scss/utils/_frame.scss +2 -2
  116. package/scss/utils/_index.scss +1 -1
  117. package/scss/utils/_spacing.scss +1 -1
  118. package/scss/utils/_stacks.scss +2 -2
  119. /package/generated/internal/{flags.d.ts → dev-flags.d.ts} +0 -0
  120. /package/generated/internal/{flags.js → dev-flags.js} +0 -0
@@ -2,7 +2,7 @@
2
2
  * Gets current host (closest)
3
3
  */
4
4
  function closestHost(any) {
5
- return any?.closest('body-view,[is=sheet-view],navigation-stack,navigation-split-view') ?? undefined;
5
+ return any?.closest('content-view,[is=sheet-view],navigation-stack,navigation-split-view') ?? undefined;
6
6
  }
7
7
  export class NavigationPath {
8
8
  #component;
@@ -49,7 +49,7 @@ export class NavigationPath {
49
49
  }
50
50
  #querySlot() {
51
51
  this.#slot =
52
- this.#component?.querySelector(':scope>body-view:not([hidden]),:scope>[is=sheet-view]:not([hidden]),:scope>navigation-stack:not([hidden]),:scope>navigation-split-view:not([hidden])') ?? null;
52
+ this.#component?.querySelector(':scope>content-view:not([hidden]),:scope>[is=sheet-view]:not([hidden]),:scope>navigation-stack:not([hidden]),:scope>navigation-split-view:not([hidden])') ?? null;
53
53
  }
54
54
  hydrate() {
55
55
  this.#queryBody();
@@ -1,7 +1,7 @@
1
1
  import type * as Components from '../components';
2
2
  import { NavigationPath } from '../internal/class/navigation-path';
3
3
  type TransitionType = 'forwards' | 'backwards' | 'reload';
4
- export type NavigationHost = Components.BodyView | Components.SheetView | Components.NavigationStack | Components.NavigationSplitView;
4
+ export type NavigationHost = Components.ContentView | Components.SheetView | Components.NavigationStack | Components.NavigationSplitView;
5
5
  export type NavigationToolbarConfiguration = Components.ToolBarItem | Components.ToolBarItemGroup;
6
6
  export type NavigationPage = Components.SidebarView | Components.ScrollView;
7
7
  export declare function queryInsertPosition(frame?: NavigationHost): "afterend" | "beforebegin";
@@ -4,7 +4,7 @@ import { Snapshot } from '../snapshot';
4
4
  export function queryInsertPosition(frame) {
5
5
  if ('NAVIGATION-SPLIT-VIEW' === frame?.tagName)
6
6
  return 'beforebegin'; // lookFor = 'previousElementSibling'
7
- else if ('NAVIGATION-SPLIT-VIEW' === frame?.parentElement?.tagName && frame?.parentElement.querySelector(':scope>[is=sidebar-view]') && 'BODY-VIEW' === frame?.tagName)
7
+ else if ('NAVIGATION-SPLIT-VIEW' === frame?.parentElement?.tagName && frame?.parentElement.querySelector(':scope>[is=sidebar-view]') && 'CONTENT-VIEW' === frame?.tagName)
8
8
  return 'beforebegin'; // lookFor = 'previousElementSibling'
9
9
  return 'afterend'; // lookFor = 'nextElementSibling'
10
10
  }
@@ -71,8 +71,8 @@ export const startViewTransition = async (target, type = 'forwards', updateCallb
71
71
  oldToolbar.classList.add('fwn'); // prepare navbs
72
72
  // prepare new
73
73
  const toolbarExclusion = 0 < modalViews.length
74
- ? (value, index, array) => value.parentElement?.matches('tool-bar:not(dialog tool-bar,body-view ~ tool-bar)')
75
- : (value, index, array) => value.parentElement?.matches('tool-bar:not(body-view ~ tool-bar)'), bodyExclusion = 0 < modalViews.length ? (item) => item.body?.matches('scroll-view:not(dialog scroll-view)') : (value, index, array) => value;
74
+ ? (value, index, array) => value.parentElement?.matches('tool-bar:not(dialog tool-bar,content-view ~ tool-bar)')
75
+ : (value, index, array) => value.parentElement?.matches('tool-bar:not(content-view ~ tool-bar)'), bodyExclusion = 0 < modalViews.length ? (item) => item.body?.matches('scroll-view:not(dialog scroll-view)') : (value, index, array) => value;
76
76
  for (const bti of newToolbars?.filter?.(toolbarExclusion) ?? [])
77
77
  bti.classList.add('fwnn'); // for (const ti of newToolbars ?? []) ti.classList.add('fwnn') //
78
78
  for (const bt of tos?.filter?.(bodyExclusion) ?? []) {
@@ -1,4 +1,4 @@
1
- import flags from '../flags';
1
+ import devFlags from '../dev-flags';
2
2
  export default function (...args) {
3
- flags.DEBUG && self.console.debug(...args);
3
+ devFlags.DEBUG && self.console.debug(...args);
4
4
  }
package/html-data/en.json CHANGED
@@ -11,16 +11,6 @@
11
11
  ],
12
12
  "description": "A dialog that shows a message. Use it from the client module like `void alert('Save failed.')`.\n---\n\n```ts\ninterface AlertDialogSignature {}\n\nclass AlertDialog extends HTMLDialogElement<AlertDialogSignature> {}\n\ndeclare global {\n interface HTMLDialogElement {\n is: 'alert-dialog' // <dialog is=\"alert-dialog\"></dialog>\n }\n}\n\n```\n"
13
13
  },
14
- {
15
- "name": "body-view",
16
- "references": [
17
- {
18
- "name": "Documentation",
19
- "url": "https://swiftwc.github.io/ui/web-components/body-view"
20
- }
21
- ],
22
- "description": "A container view that wraps a scroll view, marking it as a screen your app can navigate to.\n---\n\n```ts\ninterface BodyViewSignature {}\n\nclass BodyView extends HTMLElement<BodyViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'body-view': BodyView // <body-view></body-view>\n }\n}\n\n```\n"
23
- },
24
14
  {
25
15
  "name": "bordered-button",
26
16
  "references": [
@@ -139,7 +129,17 @@
139
129
  "name": "search"
140
130
  }
141
131
  ],
142
- "description": "A message with a title and extra information that you show when part of your app can’t be used.\n---\n\n```ts\ninterface ContentUnavailableSignature {\n Attributes: {\n search?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n description: HTMLElement[]\n actions: HTMLElement[]\n }\n}\n\nclass ContentUnavailable extends HTMLElement<ContentUnavailableSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'content-unavailable': ContentUnavailable // <content-unavailable></content-unavailable>\n }\n}\n\n```\n\n### **Examples:**\n**Example:**\n```html\n<content-unavailable search></content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable search=\"foo\"></content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable padding>\n <label-view title=\"No Mail\">\n <i class=\"ph ph-tray\" slot=\"icon\" foreground=\"secondary\"></i>\n </label-view>\n <label-view\n title=\"New mails you receive will appear here.\"\n foreground=\"secondary\"\n slot=\"description\"\n ></label-view>\n <button is=\"borderless-button\" type=\"button\" tabindex=\"0\" slot=\"actions\">\n <label-view title=\"Switch Account\"></label-view>\n </button>\n</content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable padding>\n <label-view title=\"No Mail\">\n <svg slot=\"icon\" foreground=\"secondary\" ...>...</svg>\n </label-view>\n <label-view\n title=\"New mails you receive will appear here.\"\n foreground=\"secondary\"\n slot=\"description\"\n ></label-view>\n <button is=\"borderless-button\" type=\"button\" tabindex=\"0\" slot=\"actions\">\n <label-view title=\"Switch Account\"></label-view>\n </button>\n</content-unavailable>\n\n```\n"
132
+ "description": "A message with a title and extra information that you show when part of your app can’t be used.\n---\n\n```ts\ninterface ContentUnavailableSignature {\n Attributes: {\n search?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n description: HTMLElement[]\n actions: HTMLElement[]\n }\n}\n\nclass ContentUnavailable extends HTMLElement<ContentUnavailableSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'content-unavailable': ContentUnavailable // <content-unavailable></content-unavailable>\n }\n}\n\n```\n\n### **Examples:**\n**Example:**\n```html\n<content-unavailable search></content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable search=\"foo\"></content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable padding>\n <label-view title=\"No Mail\">\n <i class=\"ph ph-tray\" slot=\"icon\" foreground=\"secondary\"></i>\n </label-view>\n <label-view\n title=\"New mails you receive will appear here.\"\n foreground=\"secondary\"\n slot=\"description\"\n ></label-view>\n <button is=\"borderless-button\" type=\"button\" tabindex=\"0\" slot=\"actions\">\n <label-view title=\"Switch Account\"></label-view>\n </button>\n</content-unavailable>\n\n```\n**Example:**\n```html\n<content-unavailable padding>\n <label-view title=\"No Mail\">\n <svg slot=\"icon\" foreground=\"secondary\" ...>...</svg>\n </label-view>\n <label-view\n title=\"New mails you receive will appear here.\"\n foreground=\"secondary\"\n slot=\"description\"\n ></label-view>\n <button is=\"borderless-button\" type=\"button\" tabindex=\"0\" slot=\"actions\">\n <label-view title=\"Switch Account\"></label-view>\n </button>\n</content-unavailable>\n\n```\n"
133
+ },
134
+ {
135
+ "name": "content-view",
136
+ "references": [
137
+ {
138
+ "name": "Documentation",
139
+ "url": "https://swiftwc.github.io/ui/web-components/content-view"
140
+ }
141
+ ],
142
+ "description": "A container view that wraps a scroll view, marking it as a screen your app can navigate to.\n---\n\n```ts\ninterface ContentViewSignature {}\n\nclass ContentView extends HTMLElement<ContentViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'content-view': ContentView // <content-view></content-view>\n }\n}\n\n```\n"
143
143
  },
144
144
  {
145
145
  "name": "date-picker",
@@ -449,7 +449,7 @@
449
449
  "description": "Value Type: \"<format-type>:<locale?>:<format-options?>\"\nDescription: Use this to format the text inside the value attribute. For example `format=\"currency::currency=USD\" value=\"1234.5\"` produces a value of `$1,234.50`."
450
450
  }
451
451
  ],
452
- "description": "A container view that pairs a label with a value.\n---\n\n```ts\ninterface LabeledContentSignature {\n Attributes: {\n value?: string\n label?: string\n header?: string\n footer?: string\n 'labeled-content-style'?: 'vertical' | 'horizontal' // Use this to force a specific style.\n format?: '<format-type>:<locale?>:<format-options?>' // Use this to format the text inside the value attribute. For example `format=\"currency::currency=USD\" value=\"1234.5\"` produces a value of `$1,234.50`.\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n label: HTMLElement[] // Use the `slot=\"label\"` attribute to place childen in the label block.\n header: HTMLElement[]\n footer: HTMLElement[]\n }\n\n Parts: {\n 'labeled-content-container': never\n 'labeled-content-stack': never\n 'labeled-content-label-stack': never\n 'labeled-content-value-stack': never\n }\n}\n\nclass LabeledContent extends HTMLElement<LabeledContentSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'labeled-content': LabeledContent // <labeled-content></labeled-content>\n }\n}\n\n```\n\n### **Examples:**\n**Creates a standard labeled element, with a view that conveys the value of the element and a label:**\n```html\n<labeled-content label=\"Label\" value=\"Content\"></labeled-content>\n\n```\n**Creates a labeled element from a formatted value:**\n```html\n<labeled-content\n label=\"Height\"\n value=\"6\"\n format=\"unit::unit=foot\"\n></labeled-content>\n\n```\n**Creates a labeled element that displays a custom label and a custom subtitle to the label:**\n```html\n<labeled-content value=\"Content\">\n <label-view slot=\"label\" title=\"Custom Value\"></label-view>\n <label-view slot=\"label\" title=\"Custom Subtitle Value\"></label-view>\n</labeled-content>\n\n```\n"
452
+ "description": "A container view that pairs a label with a value.\n---\n\n```ts\ninterface LabeledContentSignature {\n Attributes: {\n value?: string\n label?: string\n header?: string\n footer?: string\n 'labeled-content-style'?: 'vertical' | 'horizontal' // Use this to force a specific style.\n format?: '<format-type>:<locale?>:<format-options?>' // Use this to format the text inside the value attribute. For example `format=\"currency::currency=USD\" value=\"1234.5\"` produces a value of `$1,234.50`.\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n label: HTMLElement[] // Use the `slot=\"label\"` attribute to place childen in the label block.\n header: HTMLElement[]\n footer: HTMLElement[]\n }\n\n Parts: {\n 'labeled-content-container': never\n 'labeled-content-stack': never\n 'labeled-content-label-stack': never\n 'labeled-content-value-stack': never\n }\n}\n\nclass LabeledContent extends HTMLElement<LabeledContentSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'labeled-content': LabeledContent // <labeled-content></labeled-content>\n }\n}\n\n```\n\n### **Examples:**\n**Creates a standard labeled element, with a view that conveys the value of the element and a label:**\n```html\n<labeled-content label=\"Label\" value=\"Content\"></labeled-content>\n\n```\n**Creates a labeled element from a formatted value:**\n```html\n<labeled-content\n label=\"Height\"\n value=\"6\"\n format=\"unit::unit=foot\"\n></labeled-content>\n\n```\n**Creates a labeled element that displays a custom label and a custom subtitle to the label:**\n```html\n<labeled-content value=\"Content\">\n <label-view slot=\"label\" title=\"Custom Value\"></label-view>\n <label-view slot=\"label\" title=\"Custom Subtitle Value\"></label-view>\n</labeled-content>\n\n```\n"
453
453
  },
454
454
  {
455
455
  "name": "list-view",
@@ -500,7 +500,7 @@
500
500
  "name": "label"
501
501
  }
502
502
  ],
503
- "description": "A control that opens a menu of actions.\n---\n\n```ts\ninterface MenuViewSignature {\n Attributes: {\n open?: string\n closing?: string\n label?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n label: HTMLElement[]\n }\n}\n\nclass MenuView extends HTMLElement<MenuViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'menu-view': MenuView // <menu-view></menu-view>\n }\n}\n\n```\n"
503
+ "description": "A control that opens a menu of actions.\n---\n\n```ts\ninterface MenuViewSignature {\n Attributes: {\n open?: string\n closing?: string\n label?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n label: HTMLElement[]\n }\n}\n\nclass MenuView extends HTMLElement<MenuViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'menu-view': MenuView // <menu-view></menu-view>\n }\n}\n\n```\n"
504
504
  },
505
505
  {
506
506
  "name": "navigation-large-title",
@@ -657,7 +657,7 @@
657
657
  "description": "Value Type: boolean"
658
658
  }
659
659
  ],
660
- "description": "A control that selects one value from a set of options.\n---\n\n```ts\ninterface PickerViewSignature {\n Attributes: {\n 'label-value-placement'?: 'vertical' | 'horizontal' | 'auto'\n 'horizontal-radio-group-layout'?: boolean\n prompt?: string\n 'prompt-icon'?: string\n label?: string\n name?: string\n 'picker-style'?:\n | 'menu'\n | 'inline'\n | 'navigation-link'\n | 'sheet'\n | 'automatic'\n selection?: string\n searchable?: boolean\n 'current-value-label'?: string\n 'current-value-icon'?: string\n help?: string // Adds a help tooltip to the trigger of the picker, if style supports one\n dictionary?: Array<DictEntry> // Renders all options using this array\n required?: boolean\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n label: HTMLElement[]\n list: HTMLElement[]\n 'validity-options': HTMLOptionElement[]\n }\n}\n\nclass PickerView extends HTMLElement<PickerViewSignature> {\n static formAssociated = true\n\n selection: string\n readonly template: DocumentFragment\n readonly pickerStyle:\n | 'automatic'\n | 'menu'\n | 'inline'\n | 'navigation-link'\n | 'sheet'\n | 'radio-group'\n readonly name: string // Form participation property\n\n setValidity(): void\n setCustomValidity(): void\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'picker-view': PickerView // <picker-view></picker-view>\n }\n}\n\n```\n"
660
+ "description": "A control that selects one value from a set of options.\n---\n\n```ts\ninterface PickerViewSignature {\n Attributes: {\n 'label-value-placement'?: 'vertical' | 'horizontal' | 'auto'\n 'horizontal-radio-group-layout'?: boolean\n prompt?: string\n 'prompt-icon'?: string\n label?: string\n name?: string\n 'picker-style'?:\n | 'menu'\n | 'inline'\n | 'navigation-link'\n | 'sheet'\n | 'automatic'\n selection?: string\n searchable?: boolean\n 'current-value-label'?: string\n 'current-value-icon'?: string\n help?: string // Adds a help tooltip to the trigger of the picker, if style supports one\n dictionary?: Array<DictEntry> // Renders all options using this array\n required?: boolean\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n label: HTMLElement[]\n list: HTMLElement[]\n 'validity-options': HTMLOptionElement[]\n }\n}\n\nclass PickerView extends HTMLElement<PickerViewSignature> {\n static formAssociated = true\n\n selection: string\n readonly template: DocumentFragment\n readonly pickerStyle:\n | 'automatic'\n | 'menu'\n | 'inline'\n | 'navigation-link'\n | 'sheet'\n | 'radio-group'\n readonly name: string // Form participation property\n\n setValidity(): void\n setCustomValidity(): void\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'picker-view': PickerView // <picker-view></picker-view>\n }\n}\n\n```\n"
661
661
  },
662
662
  {
663
663
  "name": "plain-button",
@@ -682,7 +682,7 @@
682
682
  "name": "value"
683
683
  }
684
684
  ],
685
- "description": "A view that shows how far along a task is.\n---\n\n```ts\ninterface ProgressViewSignature {\n Attributes: {\n label?: string\n 'current-value-label'?: string\n value?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n 'current-value': HTMLElement[]\n }\n}\n\nclass ProgressView extends HTMLElement<ProgressViewSignature> {\n readonly progressViewStyle: 'circular' | 'linear'\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'progress-view': ProgressView // <progress-view></progress-view>\n }\n}\n\n```\n"
685
+ "description": "A view that shows how far along a task is.\n---\n\n```ts\ninterface ProgressViewSignature {\n Attributes: {\n label?: string\n 'current-value-label'?: string\n value?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n 'current-value': HTMLElement[]\n }\n}\n\nclass ProgressView extends HTMLElement<ProgressViewSignature> {\n readonly progressViewStyle: 'circular' | 'linear'\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'progress-view': ProgressView // <progress-view></progress-view>\n }\n}\n\n```\n"
686
686
  },
687
687
  {
688
688
  "name": "screen-view",
@@ -724,7 +724,7 @@
724
724
  "name": "navigation-bar-title-display-mode"
725
725
  }
726
726
  ],
727
- "description": "A view that scrolls its content when it doesn’t fit the screen.\n---\n\n```ts\ninterface ScrollViewSignature {\n Attributes: {\n 'navigation-title'?: string // Configures the view’s title for purposes of navigation. Shorthand for `<v-stack spacing=\"0\" alignment=\"fill\" slot=\"top-bar-principal\"><label-view line-limit=\"1\" truncation-mode=\"tail\" font=\"headline\"><span>Navigation Title</span></label-view></v-stack>`\n 'navigation-inline-title'?: string\n 'navigation-inline-subtitle'?: string\n 'navigation-icon'?: string\n 'navigation-bar-title-display-mode'?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n 'top-bar-principal': HTMLElement[]\n 'bottom-bar-principal': HTMLElement[]\n }\n}\n\nclass ScrollView extends HTMLElement<ScrollViewSignature> {\n centerScrollToElement(): void\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'scroll-view': ScrollView // <scroll-view></scroll-view>\n }\n}\n\n```\n"
727
+ "description": "A view that scrolls its content when it doesn’t fit the screen.\n---\n\n```ts\ninterface ScrollViewSignature {\n Attributes: {\n 'navigation-title'?: string // Configures the view’s title for purposes of navigation. Shorthand for `<v-stack spacing=\"0\" alignment=\"fill\" slot=\"top-bar-principal\"><label-view line-limit=\"1\" truncation-mode=\"tail\" font=\"headline\"><span>Navigation Title</span></label-view></v-stack>`\n 'navigation-inline-title'?: string\n 'navigation-inline-subtitle'?: string\n 'navigation-icon'?: string\n 'navigation-bar-title-display-mode'?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n 'top-bar-principal': HTMLElement[]\n 'bottom-bar-principal': HTMLElement[]\n }\n}\n\nclass ScrollView extends HTMLElement<ScrollViewSignature> {\n centerScrollToElement(): void\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'scroll-view': ScrollView // <scroll-view></scroll-view>\n }\n}\n\n```\n"
728
728
  },
729
729
  {
730
730
  "name": "search-view",
@@ -746,7 +746,7 @@
746
746
  "name": "footer"
747
747
  }
748
748
  ],
749
- "description": "A container view that groups related content together.\n---\n\n```ts\ninterface SectionViewSignature {\n Attributes: {\n header?: string\n footer?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n header: HTMLElement[]\n footer: HTMLElement[]\n }\n}\n\nclass SectionView extends HTMLElement<SectionViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'section-view': SectionView // <section-view></section-view>\n }\n}\n\n```\n"
749
+ "description": "A container view that groups related content together.\n---\n\n```ts\ninterface SectionViewSignature {\n Attributes: {\n header?: string\n footer?: string\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n header: HTMLElement[]\n footer: HTMLElement[]\n }\n}\n\nclass SectionView extends HTMLElement<SectionViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'section-view': SectionView // <section-view></section-view>\n }\n}\n\n```\n"
750
750
  },
751
751
  {
752
752
  "name": "sheet-view",
@@ -840,7 +840,7 @@
840
840
  ]
841
841
  }
842
842
  ],
843
- "description": "A container view that arranges data in rows and columns, optionally letting the user select one or more of them.\n---\n\n```ts\ninterface TableViewSignature {\n Attributes: {\n 'preferred-compact-template'?:\n | 'title:trailing:subtitle'\n | 'trailing:title:subtitle'\n | 'title:subtitle:trailing'\n | '*' // Sets the template areas when the table is in compact mode\n }\n\n Slots: {\n default: HTMLElement[] // The default slot.\n 'header-leading': HTMLElement[]\n 'header-principal': HTMLElement[]\n 'header-trailing': HTMLElement[]\n column: HTMLElement[]\n 'footer-leading': HTMLElement[]\n 'footer-principal': HTMLElement[]\n 'footer-trailing': HTMLElement[]\n }\n}\n\nclass TableView extends HTMLElement<TableViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'table-view': TableView // <table-view></table-view>\n }\n}\n\n```\n"
843
+ "description": "A container view that arranges data in rows and columns, optionally letting the user select one or more of them.\n---\n\n```ts\ninterface TableViewSignature {\n Attributes: {\n 'preferred-compact-template'?:\n | 'title:trailing:subtitle'\n | 'trailing:title:subtitle'\n | 'title:subtitle:trailing'\n | '*' // Sets the template areas when the table is in compact mode\n }\n\n Slots: {\n default: HTMLElement[] // The default slot\n 'header-leading': HTMLElement[]\n 'header-principal': HTMLElement[]\n 'header-trailing': HTMLElement[]\n column: HTMLElement[]\n 'footer-leading': HTMLElement[]\n 'footer-principal': HTMLElement[]\n 'footer-trailing': HTMLElement[]\n }\n}\n\nclass TableView extends HTMLElement<TableViewSignature> {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'table-view': TableView // <table-view></table-view>\n }\n}\n\n```\n"
844
844
  },
845
845
  {
846
846
  "name": "text-field",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swiftwc/ui",
3
- "version": "0.0.0-dev.114",
3
+ "version": "0.0.0-dev.117",
4
4
  "description": "Elegant SwiftUI-inspired web components for standalone web apps and web extensions.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -79,11 +79,9 @@
79
79
  "format:write": "prettier . --write",
80
80
  "lint:scripts": "tsc -p tsconfig.scripts.json --noEmit",
81
81
  "test": "vitest --dom",
82
- "prepackage": "rm -rf generated && npm run debug:off",
83
- "package": "npm run build:ts && npm run build:scss ; npm run debug:reset",
84
- "postpublish": "git checkout dev",
85
- "debug:off": "node -e \"const fs=require('node:fs');const f='./js/internal/flags.ts';const s=fs.readFileSync(f,'utf8');fs.writeFileSync(f,s.replace(/DEBUG:\\s*(true|false)/, 'DEBUG: false'))\"",
86
- "debug:reset": "git checkout -- ./js/internal/flags.ts",
82
+ "prepackage": "rm -rf generated",
83
+ "package": "npm run build:ts && npm run build:scss && npm run debug:off",
84
+ "debug:off": "node -e \"const fs=require('node:fs');const f='./generated/internal/dev-flags.js';const s=fs.readFileSync(f,'utf8');fs.writeFileSync(f,s.replace(/DEBUG:\\s*(true|false)/, 'DEBUG: false'))\"",
87
85
  "version:pkg": "npm version $npm_config_bump --no-git-tag-version --preid=dev"
88
86
  },
89
87
  "devDependencies": {
@@ -60,7 +60,7 @@
60
60
 
61
61
  // @forward 'components/button-view';
62
62
 
63
- @forward 'components/body-view';
63
+ @forward 'components/content-view';
64
64
 
65
65
  @forward 'components/navigation-large-title';
66
66
  @forward 'components/navigation-title';
package/scss/_vars.scss CHANGED
@@ -1,6 +1,7 @@
1
1
  @use 'sass:math';
2
2
  @use 'functions';
3
3
 
4
+ $framework-layer: sw !default;
4
5
  $base-layer: sw-base !default;
5
6
  $components-layer: sw-components !default;
6
7
  $list-components-layer: sw-list-components !default;
@@ -2,8 +2,8 @@
2
2
  @use '../mixins';
3
3
  @use '../placeholders';
4
4
 
5
- @layer #{vars.$components-layer} {
6
- body-view,
5
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
6
+ content-view,
7
7
  navigation-stack,
8
8
  navigation-split-view,
9
9
  [is='full-screen'],
@@ -23,11 +23,11 @@
23
23
  }
24
24
 
25
25
  navigation-stack:has(> navigation-stack:not([hidden]),> navigation-split-view:not([hidden])),
26
- navigation-stack:has(> body-view),
27
- navigation-split-view:has(> body-view),
28
- dialog:has(> body-view),
29
- // body-view:has(> dialog),
30
- body-view:has(> body-view) {
26
+ navigation-stack:has(> content-view),
27
+ navigation-split-view:has(> content-view),
28
+ dialog:has(> content-view),
29
+ // content-view:has(> dialog),
30
+ content-view:has(> content-view) {
31
31
  > scroll-view,
32
32
  > [is='sidebar-view'] > scroll-view {
33
33
  :where(&) {
@@ -55,7 +55,7 @@
55
55
 
56
56
  // NOTE: Going all the way back from deeply nested views forces an empty landing page.
57
57
  // NOTE: Refactor this to add a content-visibility:visible when bwd/fwd classes are present.
58
- // :is(navigation-stack, dialog, body-view):has(> body-view > body-view) {
58
+ // :is(navigation-stack, dialog, content-view):has(> content-view > content-view) {
59
59
  // > scroll-view,
60
60
  // > tool-bar {
61
61
  // :where(&) {
@@ -1,9 +1,11 @@
1
1
  @use '../vars';
2
2
  @use '../functions';
3
3
 
4
- @layer #{vars.$base-layer}, #{vars.$components-layer}, #{vars.$nav-components-layer}, #{vars.$list-components-layer}, #{vars.$tab-components-layer}, #{vars.$utils-layer}, #{vars.$colors-layer}, #{vars.$ui-layer}, #{vars.$transitions-layer}, #{vars.$final-layer};
4
+ @layer #{vars.$framework-layer} {
5
+ @layer #{vars.$base-layer}, #{vars.$components-layer}, #{vars.$nav-components-layer}, #{vars.$list-components-layer}, #{vars.$tab-components-layer}, #{vars.$utils-layer}, #{vars.$colors-layer}, #{vars.$ui-layer}, #{vars.$transitions-layer}, #{vars.$final-layer};
6
+ }
5
7
 
6
- @layer #{vars.$base-layer} {
8
+ @layer #{vars.$framework-layer}.#{vars.$base-layer} {
7
9
  // html,
8
10
  // body {
9
11
  // overflow: auto;
@@ -10,7 +10,7 @@
10
10
  initial-value: 16;
11
11
  }
12
12
 
13
- @layer #{vars.$components-layer} {
13
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
14
14
  :root {
15
15
  color-scheme: light dark;
16
16
 
@@ -599,7 +599,7 @@ $colors: map.merge(
599
599
  inherits: true;
600
600
  }
601
601
 
602
- @layer #{vars.$colors-layer} {
602
+ @layer #{vars.$framework-layer}.#{vars.$colors-layer} {
603
603
  :root {
604
604
  // --background: light-dark(oklch(1 0 0), oklch(0 0 0)); // ✅
605
605
 
@@ -639,7 +639,7 @@ $colors: map.merge(
639
639
  [is='full-screen'],
640
640
  [is='confirmation-dialog'],
641
641
  [is='alert-dialog'],
642
- body-view,
642
+ content-view,
643
643
  navigation-split-view,
644
644
  navigation-split-view > [is='sidebar-view'],
645
645
  navigation-stack {
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
5
  [is='alert-dialog'] {
6
6
  :where(&) {
7
7
  @include mixins.reset-dialog;
@@ -86,7 +86,7 @@
86
86
  }
87
87
  }
88
88
 
89
- // @layer #{vars.$colors-layer} {
89
+ // @layer #{vars.$framework-layer}.#{vars.$colors-layer} {
90
90
  // // SECTION: componentize
91
91
  // [is='alert-dialog'] {
92
92
  // > button {
@@ -98,7 +98,7 @@
98
98
  // }
99
99
  // }
100
100
 
101
- // @layer #{vars.$ui-layer} {
101
+ // @layer #{vars.$framework-layer}.#{vars.$ui-layer} {
102
102
  // // SECTION: componentize
103
103
  // [is='alert-dialog'] {
104
104
  // > button {
@@ -3,7 +3,7 @@
3
3
  @use '../mixins';
4
4
  @use '../placeholders';
5
5
 
6
- @layer #{vars.$components-layer} {
6
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
7
7
  [is='bordered-button'] {
8
8
  @extend %button;
9
9
 
@@ -50,7 +50,7 @@
50
50
  }
51
51
  }
52
52
 
53
- @layer #{vars.$utils-layer} {
53
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
54
54
  [is='bordered-button'] {
55
55
  :where(&) {
56
56
  text-align: center;
@@ -3,7 +3,7 @@
3
3
  @use '../mixins';
4
4
  @use '../placeholders';
5
5
 
6
- @layer #{vars.$components-layer} {
6
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
7
7
  [is='bordered-prominent-button'] {
8
8
  @extend %button;
9
9
 
@@ -46,7 +46,7 @@
46
46
  }
47
47
  }
48
48
 
49
- @layer #{vars.$colors-layer} {
49
+ @layer #{vars.$framework-layer}.#{vars.$colors-layer} {
50
50
  [is='bordered-prominent-button'] > * {
51
51
  :where(&) {
52
52
  @include mixins.takeover-color-vars(btn);
@@ -56,7 +56,7 @@
56
56
  }
57
57
  }
58
58
 
59
- @layer #{vars.$utils-layer} {
59
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
60
60
  [is='bordered-prominent-button'] {
61
61
  :where(&) {
62
62
  text-align: center;
@@ -2,7 +2,7 @@
2
2
  @use '../mixins';
3
3
  @use '../placeholders';
4
4
 
5
- @layer #{vars.$components-layer} {
5
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
6
6
  [is='borderless-button'] {
7
7
  @extend %button;
8
8
 
@@ -36,7 +36,7 @@
36
36
  }
37
37
  }
38
38
 
39
- @layer #{vars.$utils-layer} {
39
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
40
40
  [is='borderless-button'] {
41
41
  :where(&) {
42
42
  text-align: center;
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
5
  [is='confirmation-dialog'] {
6
6
  :where(&) {
7
7
  @include mixins.reset-dialog;
@@ -2,7 +2,7 @@
2
2
  @use '../mixins';
3
3
  @use '../placeholders';
4
4
 
5
- @layer #{vars.$components-layer} {
5
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
6
6
  content-unavailable {
7
7
  :where(&) {
8
8
  place-content: center;
@@ -1,8 +1,8 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
5
- // body-view {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
+ // content-view {
6
6
  // :where(&) {
7
7
  // }
8
8
  // }
@@ -1,6 +1,6 @@
1
1
  @use '../vars';
2
2
 
3
- @layer #{vars.$components-layer} {
3
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
4
4
  date-picker {
5
5
  :where(&) {
6
6
  grid-template-columns: minmax(0, 1fr);
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
5
  detail-placeholder {
6
6
  :where(&) {
7
7
  pointer-events: none;
@@ -105,7 +105,7 @@
105
105
  @include mixins.if-2col-split-view-fits {
106
106
  // also hide when in 2col mode with detail view
107
107
  &:not(:has(> [is='sidebar-view'])) {
108
- &:has(> body-view) {
108
+ &:has(> content-view) {
109
109
  detail-placeholder {
110
110
  :where(&) {
111
111
  --nav-split-view--detail-placeholder-visibility: collapse;
@@ -117,7 +117,7 @@
117
117
  &:not([column-visibility='double-column']) {
118
118
  // hide when no content view
119
119
  &[preferred-compact-column='content'] {
120
- &:not(:has(> body-view)) {
120
+ &:not(:has(> content-view)) {
121
121
  detail-placeholder {
122
122
  :where(&) {
123
123
  --nav-split-view--detail-placeholder-visibility: collapse;
@@ -127,7 +127,7 @@
127
127
  }
128
128
  // also hide when in 3col mode with detail view
129
129
  @include mixins.if-3col-split-view-fits {
130
- &:has(> body-view > body-view) {
130
+ &:has(> content-view > content-view) {
131
131
  detail-placeholder {
132
132
  :where(&) {
133
133
  --nav-split-view--detail-placeholder-visibility: collapse;
@@ -139,7 +139,7 @@
139
139
 
140
140
  // also hide when in 2col mode with detail view
141
141
  &[column-visibility='double-column'] {
142
- &:has(> body-view) {
142
+ &:has(> content-view) {
143
143
  detail-placeholder {
144
144
  :where(&) {
145
145
  --nav-split-view--detail-placeholder-visibility: collapse;
@@ -2,7 +2,7 @@
2
2
  @use '../vars';
3
3
  @use '../mixins';
4
4
 
5
- @layer #{vars.$components-layer} {
5
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
6
6
  [is='disclosure-group'] {
7
7
  :where(&) {
8
8
  overflow: clip;
@@ -135,7 +135,7 @@
135
135
  }
136
136
  }
137
137
 
138
- @layer #{vars.$utils-layer} {
138
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
139
139
  [is='disclosure-group'] {
140
140
  @supports (x: #{string.unquote('attr(x type(*))')}) {
141
141
  :where(&) {
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$tab-components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$tab-components-layer} {
5
5
  fine-tooltip {
6
6
  :where(&) {
7
7
  color: var(--text,);
@@ -107,7 +107,7 @@ $form-elses: (
107
107
  --list--accessories-display: grid,
108
108
  );
109
109
 
110
- @layer #{vars.$list-components-layer} {
110
+ @layer #{vars.$framework-layer}.#{vars.$list-components-layer} {
111
111
  [is='form-view'] {
112
112
  &:not(& &, list-view &, table-view &, [is='tab-bar'] > &) {
113
113
  @extend %list;
@@ -152,7 +152,7 @@ $form-elses: (
152
152
  :where(navigation-split-view [is='sidebar-view'] &[form-style]) {
153
153
  @include mixins.write-props(map.get($form-ifs, sidebar));
154
154
  }
155
- :where(navigation-split-view > scroll-view &[preferred-expanded-style], navigation-split-view > body-view > scroll-view &[preferred-expanded-style]) {
155
+ :where(navigation-split-view > scroll-view &[preferred-expanded-style], navigation-split-view > content-view > scroll-view &[preferred-expanded-style]) {
156
156
  @include mixins.write-props(map.get($form-ifs, inset));
157
157
  }
158
158
  }
@@ -167,7 +167,7 @@ $form-elses: (
167
167
  :where(navigation-split-view:has(> [is='sidebar-view']) > [is='sidebar-view'] &[list-style]) {
168
168
  --form-style: sidebar;
169
169
  }
170
- :where(navigation-split-view > scroll-view &[preferred-expanded-style], navigation-split-view > body-view > scroll-view &[preferred-expanded-style]) {
170
+ :where(navigation-split-view > scroll-view &[preferred-expanded-style], navigation-split-view > content-view > scroll-view &[preferred-expanded-style]) {
171
171
  --form-style: inset;
172
172
  }
173
173
  }
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
5
  [is='full-screen'] {
6
6
  :where(&) {
7
7
  @include mixins.reset-dialog;
@@ -3,7 +3,7 @@
3
3
  @use '../mixins';
4
4
  @use '../placeholders';
5
5
 
6
- @layer #{vars.$components-layer} {
6
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
7
7
  [is='glass-button'] {
8
8
  @extend %button;
9
9
 
@@ -52,7 +52,7 @@
52
52
  }
53
53
  }
54
54
 
55
- @layer #{vars.$utils-layer} {
55
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
56
56
  [is='glass-button'] {
57
57
  :where(&) {
58
58
  text-align: center;
@@ -3,7 +3,7 @@
3
3
  @use '../mixins';
4
4
  @use '../placeholders';
5
5
 
6
- @layer #{vars.$components-layer} {
6
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
7
7
  [is='glass-prominent-button'] {
8
8
  @extend %button;
9
9
 
@@ -52,7 +52,7 @@
52
52
  }
53
53
  }
54
54
 
55
- @layer #{vars.$colors-layer} {
55
+ @layer #{vars.$framework-layer}.#{vars.$colors-layer} {
56
56
  [is='glass-prominent-button'] > * {
57
57
  :where(&) {
58
58
  @include mixins.takeover-color-vars(btn);
@@ -62,7 +62,7 @@
62
62
  }
63
63
  }
64
64
 
65
- @layer #{vars.$utils-layer} {
65
+ @layer #{vars.$framework-layer}.#{vars.$utils-layer} {
66
66
  [is='glass-prominent-button'] {
67
67
  :where(&) {
68
68
  text-align: center;
@@ -1,7 +1,7 @@
1
1
  @use '../vars';
2
2
  @use '../mixins';
3
3
 
4
- @layer #{vars.$components-layer} {
4
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
5
5
  group-box {
6
6
  :where(&) {
7
7
  background: var(--groupbox--background);
@@ -1,6 +1,6 @@
1
1
  @use '../vars';
2
2
 
3
- @layer #{vars.$components-layer} {
3
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
4
4
  h-divider {
5
5
  :where(&) {
6
6
  inline-size: 100%;
@@ -1,6 +1,6 @@
1
1
  @use '../vars';
2
2
 
3
- @layer #{vars.$components-layer} {
3
+ @layer #{vars.$framework-layer}.#{vars.$components-layer} {
4
4
  h-flex-stack {
5
5
  :where(&) {
6
6
  display: flex;