@vonage/vivid 3.0.0-next.11 → 3.0.0-next.110

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 (209) hide show
  1. package/README.md +165 -4
  2. package/accordion/index.js +5 -14
  3. package/accordion-item/index.js +34 -41
  4. package/action-group/index.js +37 -0
  5. package/avatar/index.js +61 -0
  6. package/badge/index.js +23 -35
  7. package/banner/index.js +20 -115
  8. package/breadcrumb/index.js +22 -19
  9. package/breadcrumb-item/index.js +28 -25
  10. package/button/index.js +29 -690
  11. package/calendar/index.js +70 -69
  12. package/calendar-event/index.js +109 -0
  13. package/card/index.js +112 -0
  14. package/checkbox/index.js +178 -0
  15. package/custom-elements.json +3941 -0
  16. package/dialog/index.js +214 -0
  17. package/divider/index.js +27 -0
  18. package/elevation/index.js +10 -16
  19. package/fab/index.js +98 -0
  20. package/focus/index.js +18 -3
  21. package/header/index.js +63 -0
  22. package/icon/index.js +9 -12
  23. package/index.js +68 -22
  24. package/layout/index.js +6 -16
  25. package/lib/accordion-item/accordion-item.d.ts +2 -2
  26. package/lib/accordion-item/index.d.ts +0 -1
  27. package/lib/action-group/action-group.d.ts +10 -0
  28. package/lib/{sidenav-item/sidenav-item.template.d.ts → action-group/action-group.template.d.ts} +2 -2
  29. package/lib/{sidenav-item → action-group}/index.d.ts +1 -2
  30. package/lib/avatar/avatar.d.ts +15 -0
  31. package/lib/avatar/avatar.template.d.ts +4 -0
  32. package/lib/avatar/index.d.ts +2 -0
  33. package/lib/badge/badge.d.ts +3 -5
  34. package/lib/badge/index.d.ts +1 -2
  35. package/lib/banner/banner.d.ts +1 -1
  36. package/lib/banner/banner.template.d.ts +0 -2
  37. package/lib/breadcrumb/breadcrumb.template.d.ts +4 -0
  38. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  39. package/lib/breadcrumb-item/index.d.ts +0 -1
  40. package/lib/button/button.d.ts +4 -3
  41. package/lib/button/index.d.ts +1 -21
  42. package/lib/calendar/calendar.d.ts +3 -1
  43. package/lib/calendar/index.d.ts +0 -1
  44. package/lib/calendar-event/calendar-event.d.ts +14 -0
  45. package/lib/calendar-event/calendar-event.template.d.ts +4 -0
  46. package/lib/calendar-event/index.d.ts +2 -0
  47. package/lib/card/card.d.ts +10 -0
  48. package/lib/{text/text.template.d.ts → card/card.template.d.ts} +2 -2
  49. package/lib/{text → card}/index.d.ts +1 -1
  50. package/lib/checkbox/checkbox.d.ts +5 -0
  51. package/lib/checkbox/checkbox.template.d.ts +4 -0
  52. package/lib/checkbox/index.d.ts +2 -0
  53. package/lib/components.d.ts +32 -10
  54. package/lib/dialog/dialog.d.ts +20 -0
  55. package/lib/dialog/dialog.template.d.ts +4 -0
  56. package/lib/dialog/index.d.ts +2 -0
  57. package/lib/divider/divider.d.ts +3 -0
  58. package/lib/divider/divider.template.d.ts +4 -0
  59. package/lib/divider/index.d.ts +2 -0
  60. package/lib/elevation/elevation.d.ts +1 -0
  61. package/lib/elevation/index.d.ts +1 -1
  62. package/lib/enums.d.ts +19 -6
  63. package/lib/fab/fab.d.ts +13 -0
  64. package/lib/fab/fab.template.d.ts +4 -0
  65. package/lib/fab/index.d.ts +2 -0
  66. package/lib/focus/index.d.ts +1 -1
  67. package/lib/header/header.d.ts +5 -0
  68. package/lib/header/header.template.d.ts +4 -0
  69. package/lib/header/index.d.ts +2 -0
  70. package/lib/icon/icon.d.ts +5 -6
  71. package/lib/layout/index.d.ts +1 -1
  72. package/lib/layout/layout.d.ts +4 -4
  73. package/lib/listbox/index.d.ts +1 -0
  74. package/lib/listbox/listbox.d.ts +9 -0
  75. package/lib/listbox/listbox.template.d.ts +4 -0
  76. package/lib/menu/index.d.ts +10 -0
  77. package/lib/menu/menu.d.ts +10 -0
  78. package/lib/menu/menu.template.d.ts +3 -0
  79. package/lib/menu-item/index.d.ts +2 -0
  80. package/lib/menu-item/menu-item.d.ts +7 -0
  81. package/lib/menu-item/menu-item.template.d.ts +5 -0
  82. package/lib/nav/index.d.ts +2 -0
  83. package/lib/nav/nav.d.ts +3 -0
  84. package/lib/nav/nav.template.d.ts +4 -0
  85. package/lib/nav-disclosure/index.d.ts +2 -0
  86. package/lib/nav-disclosure/nav-disclosure.d.ts +10 -0
  87. package/lib/nav-disclosure/nav-disclosure.template.d.ts +4 -0
  88. package/lib/nav-item/index.d.ts +2 -0
  89. package/lib/{sidenav-item/sidenav-item.d.ts → nav-item/nav-item.d.ts} +2 -2
  90. package/lib/nav-item/nav-item.template.d.ts +4 -0
  91. package/lib/note/index.d.ts +2 -0
  92. package/lib/note/note.d.ts +10 -0
  93. package/lib/note/note.template.d.ts +4 -0
  94. package/lib/number-field/index.d.ts +2 -0
  95. package/lib/number-field/number-field.d.ts +14 -0
  96. package/lib/number-field/number-field.template.d.ts +4 -0
  97. package/lib/option/index.d.ts +2 -0
  98. package/lib/option/option.d.ts +9 -0
  99. package/lib/option/option.template.d.ts +4 -0
  100. package/lib/popup/index.d.ts +1 -3
  101. package/lib/popup/popup.d.ts +3 -2
  102. package/lib/progress/progress.d.ts +1 -1
  103. package/lib/progress-ring/progress-ring.d.ts +2 -1
  104. package/lib/radio/index.d.ts +2 -0
  105. package/lib/radio/radio.d.ts +4 -0
  106. package/lib/radio/radio.template.d.ts +4 -0
  107. package/lib/radio-group/index.d.ts +10 -0
  108. package/lib/radio-group/radio-group.d.ts +4 -0
  109. package/lib/radio-group/radio-group.template.d.ts +4 -0
  110. package/lib/side-drawer/index.d.ts +1 -1
  111. package/lib/side-drawer/side-drawer.d.ts +3 -2
  112. package/lib/slider/index.d.ts +2 -0
  113. package/lib/slider/slider.d.ts +4 -0
  114. package/lib/slider/slider.template.d.ts +4 -0
  115. package/lib/switch/index.d.ts +2 -0
  116. package/lib/switch/switch.d.ts +7 -0
  117. package/lib/switch/switch.template.d.ts +4 -0
  118. package/lib/text-anchor/text-anchor.d.ts +1 -1
  119. package/lib/text-area/index.d.ts +2 -0
  120. package/lib/text-area/text-area.d.ts +9 -0
  121. package/lib/text-area/text-area.template.d.ts +4 -0
  122. package/lib/text-field/index.d.ts +2 -0
  123. package/lib/text-field/text-field.d.ts +14 -0
  124. package/lib/text-field/text-field.template.d.ts +4 -0
  125. package/lib/tooltip/index.d.ts +0 -1
  126. package/lib/tooltip/tooltip.d.ts +7 -7
  127. package/listbox/index.js +1086 -0
  128. package/menu/index.js +357 -0
  129. package/menu-item/index.js +90 -0
  130. package/nav/index.js +17 -0
  131. package/nav-disclosure/index.js +80 -0
  132. package/nav-item/index.js +44 -0
  133. package/note/index.js +59 -0
  134. package/number-field/index.js +460 -0
  135. package/option/index.js +75 -0
  136. package/package.json +62 -10
  137. package/popup/index.js +35 -2036
  138. package/progress/index.js +33 -38
  139. package/progress-ring/index.js +13 -13
  140. package/radio/index.js +52 -0
  141. package/radio-group/index.js +435 -0
  142. package/shared/affix.js +2 -8
  143. package/shared/anchor.js +11 -3
  144. package/shared/apply-mixins.js +5 -4
  145. package/shared/aria-global.js +2 -86
  146. package/shared/aria.js +9 -0
  147. package/shared/base-progress.js +6 -1
  148. package/shared/breadcrumb-item.js +2 -2
  149. package/shared/button.js +23 -0
  150. package/shared/button2.js +200 -0
  151. package/shared/calendar-event.js +19 -0
  152. package/shared/design-system/index.d.ts +1 -1
  153. package/shared/dialog-polyfill.esm.js +858 -0
  154. package/shared/direction.js +20 -0
  155. package/shared/divider.js +55 -0
  156. package/shared/dom.js +8 -0
  157. package/shared/elevation.js +10 -0
  158. package/shared/enums.js +70 -0
  159. package/shared/es.object.assign.js +2 -59
  160. package/shared/es.promise.resolve.js +944 -0
  161. package/shared/es.regexp.to-string.js +58 -0
  162. package/shared/focus.js +11 -0
  163. package/shared/focus2.js +5 -0
  164. package/shared/form-associated.js +466 -0
  165. package/shared/form-elements.js +343 -0
  166. package/shared/icon.js +32 -1153
  167. package/shared/index.js +3780 -83
  168. package/shared/index2.js +7 -19
  169. package/shared/key-codes.js +97 -0
  170. package/shared/listbox-option.js +201 -0
  171. package/shared/menu-item.js +277 -0
  172. package/shared/numbers.js +25 -0
  173. package/shared/patterns/focus.d.ts +3 -0
  174. package/shared/patterns/form-elements/form-elements.d.ts +31 -0
  175. package/shared/patterns/form-elements/index.d.ts +1 -0
  176. package/shared/patterns/index.d.ts +2 -0
  177. package/shared/popup.js +1484 -0
  178. package/shared/radio.js +127 -0
  179. package/shared/ref.js +41 -0
  180. package/shared/slotted.js +1 -1
  181. package/shared/start-end.js +50 -0
  182. package/shared/string-trim.js +39 -0
  183. package/shared/text-anchor.js +2 -13
  184. package/shared/text-anchor.template.js +6 -5
  185. package/shared/utils/index.d.ts +1 -0
  186. package/side-drawer/index.js +38 -34
  187. package/slider/index.js +596 -0
  188. package/styles/core/all.css +86 -0
  189. package/styles/core/theme.css +11 -0
  190. package/styles/core/typography.css +80 -0
  191. package/styles/fonts/SpeziaCompleteVariableItalicWeb.woff2 +0 -0
  192. package/styles/fonts/SpeziaCompleteVariableUprightWeb.woff2 +0 -0
  193. package/styles/fonts/SpeziaMonoCompleteVariableWeb.woff2 +0 -0
  194. package/styles/fonts/spezia.css +9 -12
  195. package/styles/tokens/theme-dark.css +230 -0
  196. package/styles/tokens/theme-light.css +230 -0
  197. package/switch/index.js +153 -0
  198. package/text-anchor/index.js +8 -3
  199. package/text-area/index.js +288 -0
  200. package/text-field/index.js +129 -0
  201. package/tooltip/index.js +59 -43
  202. package/vivid.api.json +2979 -0
  203. package/lib/text/text.d.ts +0 -10
  204. package/shared/style-inject.es.js +0 -28
  205. package/shared/web.dom-collections.iterator.js +0 -1479
  206. package/sidenav-item/index.js +0 -38
  207. package/styles/themes/dark.css +0 -205
  208. package/styles/themes/light.css +0 -205
  209. package/text/index.js +0 -45
package/README.md CHANGED
@@ -1,7 +1,168 @@
1
- # components
2
1
 
3
- This library was generated with [Nx](https://nx.dev).
2
+ # Vivid UI
4
3
 
5
- ## Running unit tests
4
+ Essential UI **web components** for building modern web applications, bound to provide a **safe**, **simple** and **intuitive** interface.
6
5
 
7
- Run `nx test components` to execute the unit tests via [Jest](https://jestjs.io).
6
+ ![image](https://user-images.githubusercontent.com/10883919/189522882-968358df-ee7c-4256-b61b-550cf369a087.png)
7
+
8
+ ## Installation
9
+
10
+ To integrate Vivid components into your project, run:
11
+
12
+ ```bash
13
+ npm install @vonage/vivid # or yarn add @vonage/vivid
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ Import components in your project via [side effect imports](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#import_a_module_for_its_side_effects_only):
19
+
20
+ ```js
21
+ import '@vonage/vivid/button';
22
+ ```
23
+
24
+ And include in HTML:
25
+
26
+ ```html
27
+ <vwc-button label="Click me"></vwc-button>
28
+ ```
29
+
30
+ For a full list of components and API, explore the [components docs](https://vivid.deno.dev/components/accordion/) 📚.
31
+
32
+ ### Tokens (Prerequisite)
33
+
34
+ The Vivid components library rely on a set of **design tokens** (in the form of css custom properties).
35
+
36
+ Tokens should not affect the look of the application rather just provide a common set of identities (such as colors, typography, spacing etc') to be used by the components to look as intended.
37
+
38
+ As the task of loading css is not trivial, and may vary from project to project, this library does not provide any way to load the css. It is up to the author to load the css in the most appropriate manner for their project.
39
+
40
+ To **include the tokens**, its css files must be loaded into the project from the `node_modules/@vonage/vivid/styles/tokens` folder and *require a `vvd-root` class* selector to be present on a wrapping element (advisably the `:root`).
41
+
42
+ Tokens folder contains the following files:
43
+
44
+ - `theme-light.css` - Light theme
45
+
46
+ - `theme-dark.css` - Dark theme
47
+
48
+ Only one theme is required to be loaded.
49
+
50
+ ### Fonts (Prerequisite)
51
+
52
+ - `node_modules/@vonage/vivid/styles/fonts/spezia.css` - Loads the *Spezia* variable font and defines its font face values. *Spezia* is Vonage's branded font and is required by most Vivid components. folder also contains the font files.
53
+
54
+ Note that font files are not included within the css file, and must be copied to application assets separately (within the same parsed css folder). This is to allow the author to choose the most appropriate way to load the font files based on their project.
55
+
56
+ ### Core (Optional)
57
+
58
+ In Addition, this library provides a set of styles (combined with the tokens and fonts) that can be used to embody the Vivid design system into an application.
59
+
60
+ These styles are not required by vivid components directly. however, native HTML tags do.
61
+
62
+ These **core styles** rely on the tokens and fonts 👆 to be loaded.
63
+
64
+ To **include the core styles**, its css files must be loaded into the project from the `node_modules/@vonage/vivid/styles/core` folder and *require a `vvd-root` class* selector to be present on a wrapping element (advisably the `:root`. When set on the `:root` (html element), typeface sizes are able to descend from the root font-size, thus comply with the [WCAG 1.4.4](https://www.w3.org/WAI/WCAG21/Understanding/resize-text)).
65
+
66
+ - `theme.css` - Sets theme related styles
67
+
68
+ - `typography.css` - Sets typography related styles
69
+
70
+ - `all.css` - Sets all the above styles
71
+
72
+ Note: scss users can simply [forward](https://sass-lang.com/documentation/at-rules/forward) the styles to their scss project:
73
+
74
+ ```css
75
+ @forward 'node_modules/@vonage/vivid/styles/[path to file].css';
76
+ ```
77
+
78
+ ## Advanced Usage
79
+
80
+ ### Scoped Elements
81
+
82
+ Custom elements, by browsers limitations, are registered globally, and thus may conflict when multiple versions of the library are used in the same application as all custom elements register under the same namespace.
83
+
84
+ This burdens micro frontend architecture and updates to outdated versions of the Vivid, enforcing a single version of the library to be used. Meaning, any update to the library will require a full application update.
85
+
86
+ To avoid this bottleneck, Vivid provides a way for authors' to scope each custom element namespace by setting a `prefix` query parameter to their import call.
87
+
88
+ The following example will register *badge* custom element as `dashboard-badge`:
89
+
90
+ ```js
91
+ import '/node_modules/@vonage/vivid/badge/index.js?prefix=dashboard';
92
+ ```
93
+
94
+ then use it as:
95
+
96
+ ```html
97
+ <dashboard-badge text="I'm a custom prefixed badge"></dashboard-badge>
98
+ ```
99
+
100
+ Even though the custom elements are registered under different namespaces, [npm packages version range handling](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#dependencies) can still be used for multiple versions saving.
101
+
102
+ ## Support
103
+
104
+ This library is open source, developed and maintained by the [Vonage Vivid team](Vonage/vivid).
105
+
106
+ For any questions, please open a [bug report](https://github.com/Vonage/vivid-3/issues/new?assignees=&labels=&template=bug_report.md&title=) or [feature request](https://github.com/Vonage/vivid-3/issues/new?assignees=&labels=&template=feature_request.md&title=).
107
+
108
+ ## Roadmap
109
+
110
+ - View [components status](https://github.com/orgs/Vonage/projects/6)
111
+
112
+ - [What's on our plate](https://github.com/orgs/Vonage/projects/3/views/7)
113
+
114
+ - See the [open issues](https://github.com/vonage/vivid-3/issues) for a full list of proposed features (and known issues).
115
+
116
+ We publish a *next* release on every successful merge to main, so you never need to wait for a new stable version to make use of any updates.
117
+
118
+ ## Contributing
119
+
120
+ Please read [CONTRIBUTING.md](.github/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.
121
+
122
+ ## Versioning
123
+
124
+ We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [npm page](https://www.npmjs.com/package/@vonage/vivid).
125
+
126
+ ## Authors
127
+
128
+ See also the list of [contributors](https://github.com/your/project/contributors) who participated in this project.
129
+
130
+ ## License
131
+
132
+ This project is licensed under the Apache 2.0 License - see the [LICENSE.md](LICENSE.md) file for details
133
+
134
+ <!-- ## Acknowledgments
135
+
136
+ - Hat tip to anyone whose code was used
137
+ - Inspiration
138
+ - etc -->
139
+
140
+ ## Built With
141
+
142
+ - [Fast](https://www.fast.design) - to extend element classes and compile code to native web components
143
+ - [Typescript](https://www.typescriptlang.org) - for ergonomic and type-safe code
144
+ - [Sass](https://sass-lang.com) - for styles authoring extensibility and consistency
145
+
146
+ ## Quickstart
147
+
148
+ Global content delivery networks can help quickly integrate content within html pages, fetching content from an URL, skipping local builds entirely.
149
+ Such practice is often used when working on POCs or reproduction environments.
150
+ Tools like [UNPKG](https://unpkg.com), [jsDeliver](https://www.jsdelivr.com), [Skypack](https://www.skypack.dev) etc' are bound to deliver any content registered in the npm registry.
151
+
152
+ The following snippet fully renders a Vivid button component
153
+
154
+ ```html
155
+ <!-- import spezia font -->
156
+ <link rel="stylesheet" href="https://unpkg.com/@vonage/vivid@next/styles/fonts/spezia.css">
157
+
158
+ <!-- import light theme style tokens -->
159
+ <link rel="stylesheet" href="https://unpkg.com/@vonage/vivid@next/styles/tokens/theme-light.css">
160
+
161
+ <!-- import Vivid button component -->
162
+ <script type="module" src="https://unpkg.com/@vonage/vivid@next/button/index.js"></script>
163
+
164
+ <!-- Part of the app (or a whole app) that contains vivid components -->
165
+ <div class="vvd-root">
166
+ <vwc-button label="Click me" appearance="filled" connotation="cta"></vwc-button>
167
+ </div>
168
+ ```
@@ -1,9 +1,7 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem } from '../shared/index.js';
2
- import { s as styleInject } from '../shared/style-inject.es.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem, g as getPrefix } from '../shared/index.js';
3
2
  import { c as classNames } from '../shared/class-names.js';
4
3
 
5
- var css_248z = ".control {\n display: flex;\n flex-direction: column;\n}\n\n::slotted(vwc-accordion-item:not(:only-of-type)) {\n border-bottom: 1px solid var(--vvd-color-neutral-30);\n}";
6
- styleInject(css_248z);
4
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Sun, 04 Dec 2022 15:37:45 GMT\n */\n.base {\n display: flex;\n flex-direction: column;\n}\n\n::slotted(vwc-accordion-item:not(:only-of-type)) {\n border-bottom: 1px solid var(--vvd-color-neutral-200);\n}";
7
5
 
8
6
  class Accordion extends FoundationElement {
9
7
  constructor() {
@@ -12,12 +10,10 @@ class Accordion extends FoundationElement {
12
10
  this.multi = false;
13
11
  this.addEventListener('opened', this.handleOpened);
14
12
  }
15
-
16
13
  connectedCallback() {
17
14
  super.connectedCallback();
18
15
  this.accordionItems = this.children;
19
16
  }
20
-
21
17
  handleOpened(e) {
22
18
  if (!this.multi && this.accordionItems) {
23
19
  for (let i = 0; i < this.accordionItems.length; i++) {
@@ -27,7 +23,6 @@ class Accordion extends FoundationElement {
27
23
  }
28
24
  }
29
25
  }
30
-
31
26
  closeAll() {
32
27
  if (this.accordionItems) {
33
28
  for (let i = 0; i < this.accordionItems.length; i++) {
@@ -35,18 +30,14 @@ class Accordion extends FoundationElement {
35
30
  }
36
31
  }
37
32
  }
38
-
39
33
  }
40
-
41
34
  __decorate([attr({
42
35
  mode: 'boolean'
43
36
  }), __metadata("design:type", Object)], Accordion.prototype, "multi", void 0);
44
37
 
45
38
  let _2 = t => t,
46
- _t;
47
-
48
- const getClasses = _ => classNames('control');
49
-
39
+ _t;
40
+ const getClasses = _ => classNames('base');
50
41
  const AccordionTemplate = () => html(_t || (_t = _2`<div class="${0}">
51
42
  <slot></slot>
52
43
  </div>`), getClasses);
@@ -56,6 +47,6 @@ const vividAccordion = Accordion.compose({
56
47
  template: AccordionTemplate,
57
48
  styles: css_248z
58
49
  });
59
- designSystem.register(vividAccordion());
50
+ designSystem.withPrefix(getPrefix(import.meta.url)).register(vividAccordion());
60
51
 
61
52
  export { vividAccordion };
@@ -1,34 +1,30 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem } from '../shared/index.js';
2
- import { s as styleInject } from '../shared/style-inject.es.js';
3
- import '../shared/web.dom-collections.iterator.js';
1
+ import '../shared/es.promise.resolve.js';
2
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, g as getPrefix, d as designSystem } from '../shared/index.js';
3
+ import { l as loadComponentsModules } from '../shared/index2.js';
4
4
  import { A as AffixIconWithTrailing, a as affixIconTemplateFactory } from '../shared/affix.js';
5
5
  import { a as applyMixins } from '../shared/apply-mixins.js';
6
+ import { f as focusTemplateFactory } from '../shared/focus.js';
6
7
  import { w as when } from '../shared/when.js';
7
8
  import { c as classNames } from '../shared/class-names.js';
8
- import '../icon/index.js';
9
9
  import '../shared/icon.js';
10
+ import '../shared/string-trim.js';
10
11
  import '../shared/_has.js';
12
+ import '../shared/focus2.js';
11
13
 
12
- var css_248z = "/*\n Do not edit directly\n Generated on Wed, 27 Apr 2022 11:58:36 GMT\n*/\n.body {\n font: 400 ultra-condensed 14px / 20px SpeziaWebVariable;\n letter-spacing: 0px;\n text-decoration: none;\n text-transform: none;\n padding: 8px 32px 24px 16px;\n}\n.icon:not(.icon-trailing) .body {\n padding-left: 48px;\n}\n\n.control {\n display: flex;\n flex-direction: column;\n}\n.control:not(.open) .toggle-close,\n.control:not(.open) .body {\n display: none;\n}\n.control.open .toggle-open {\n display: none;\n}\n.control.open .toggle-close {\n display: initial;\n}\n\n.header {\n padding: 0;\n margin: 0;\n}\n\n.button {\n font: 500 condensed 20px / 28px SpeziaWebVariable;\n letter-spacing: 0px;\n text-decoration: none;\n text-transform: none;\n position: relative;\n display: flex;\n width: 100%;\n align-items: center;\n padding: 16px;\n border: 0 none;\n background: transparent;\n cursor: pointer;\n}\n.button:hover {\n background: var(--vvd-color-neutral-10);\n}\n.button .heading-text {\n flex-grow: 1;\n margin-inline-end: auto;\n text-align: left;\n}\n.button .meta {\n font: 600 ultra-condensed 14px / 20px SpeziaWebVariable;\n letter-spacing: 0px;\n text-decoration: none;\n text-transform: none;\n overflow: hidden;\n max-width: 20%;\n flex-shrink: 0;\n color: var(--vvd-color-neutral-70);\n margin-inline-start: 1rem;\n text-align: end;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.button .indicator {\n display: flex;\n}\n.button .indicator vwc-icon,\n.button .indicator slot[name=indicator i]::slotted(vwc-icon) {\n margin-inline-start: 16px;\n}\n.button .icon {\n margin-inline-end: 16px;\n}\n\n/* Icon */\n.icon-trailing .icon {\n order: 1;\n}";
13
- styleInject(css_248z);
14
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Sun, 04 Dec 2022 15:37:45 GMT\n */\n.body {\n padding: 8px 32px 24px 16px;\n font: var(--vvd-typography-base);\n}\n.icon:not(.icon-trailing) .body {\n padding-left: 48px;\n}\n\n.base {\n display: flex;\n flex-direction: column;\n}\n.base:not(.open) .body {\n display: none;\n}\n\n.header {\n padding: 0;\n margin: 0;\n}\n\n.button {\n position: relative;\n display: flex;\n width: 100%;\n align-items: center;\n padding: 16px;\n border: 0 none;\n margin: 0;\n background-color: var(--_appearance-color-fill);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n cursor: pointer;\n font: var(--vvd-typography-heading-4);\n}\n.button {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.button:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.button:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.button {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n@supports selector(:focus-visible) {\n .button:focus {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .button {\n user-select: none;\n }\n}\n.button .heading-text {\n flex-grow: 1;\n margin-inline-end: auto;\n text-align: left;\n}\n.button .meta {\n overflow: hidden;\n max-width: 20%;\n flex-shrink: 0;\n color: var(--vvd-color-neutral-600);\n font: var(--vvd-typography-base-bold);\n margin-inline-start: 16px;\n text-align: end;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.button .indicator {\n display: flex;\n}\n.button .indicator vwc-icon,\n.button .indicator slot[name=indicator i]::slotted(vwc-icon) {\n margin-inline-start: 16px;\n}\n.button .icon {\n color: var(--vvd-color-neutral-600);\n margin-inline-end: 16px;\n}\n\n/* Icon */\n.icon-trailing .icon {\n order: 1;\n}\n\n.button:not(:focus-visible) > .focus-indicator {\n display: none;\n}";
14
15
 
15
16
  class AccordionItem extends FoundationElement {
16
17
  constructor() {
17
18
  super(...arguments);
18
- this.heading = '';
19
19
  this.noIndicator = false;
20
- this.meta = '';
21
20
  this.open = false;
22
21
  }
23
-
24
22
  attributeChangedCallback(name, oldValue, newValue) {
25
23
  super.attributeChangedCallback(name, oldValue, newValue);
26
-
27
24
  if (name === 'open') {
28
25
  newValue === null ? this.emitEvent('closed') : this.emitEvent('opened');
29
26
  }
30
27
  }
31
-
32
28
  emitEvent(name) {
33
29
  const init = {
34
30
  bubbles: true,
@@ -37,47 +33,36 @@ class AccordionItem extends FoundationElement {
37
33
  const ev = new CustomEvent(name, init);
38
34
  this.dispatchEvent(ev);
39
35
  }
40
-
41
36
  }
42
-
43
- __decorate([attr({
44
- mode: 'fromView'
45
- }), __metadata("design:type", Object)], AccordionItem.prototype, "heading", void 0);
46
-
37
+ __decorate([attr, __metadata("design:type", String)], AccordionItem.prototype, "heading", void 0);
47
38
  __decorate([attr({
48
39
  attribute: 'heading-level'
49
40
  }), __metadata("design:type", Number)], AccordionItem.prototype, "headingLevel", void 0);
50
-
51
41
  __decorate([attr({
52
42
  mode: 'boolean',
53
43
  attribute: 'no-indicator'
54
44
  }), __metadata("design:type", Object)], AccordionItem.prototype, "noIndicator", void 0);
55
-
56
- __decorate([attr({
57
- mode: 'fromView'
58
- }), __metadata("design:type", Object)], AccordionItem.prototype, "meta", void 0);
59
-
45
+ __decorate([attr, __metadata("design:type", String)], AccordionItem.prototype, "meta", void 0);
60
46
  __decorate([attr({
61
47
  mode: 'boolean'
62
48
  }), __metadata("design:type", Object)], AccordionItem.prototype, "open", void 0);
63
-
64
49
  applyMixins(AccordionItem, AffixIconWithTrailing);
65
50
 
66
51
  let _ = t => t,
67
- _t,
68
- _t2,
69
- _t3,
70
- _t4,
71
- _t5;
52
+ _t,
53
+ _t2,
54
+ _t3,
55
+ _t4,
56
+ _t5,
57
+ _t6,
58
+ _t7;
72
59
  const PANEL = 'panel';
73
-
74
60
  const getClasses = ({
75
61
  open,
76
62
  iconTrailing,
77
63
  icon,
78
64
  noIndicator
79
- }) => classNames('control', ['open', open], ['icon', Boolean(icon)], ['icon-trailing', iconTrailing], ['no-indicator', noIndicator]);
80
-
65
+ }) => classNames('base', ['open', open], ['icon', Boolean(icon)], ['icon-trailing', iconTrailing], ['no-indicator', noIndicator]);
81
66
  const AccordionItemTemplate = context => html(_t || (_t = _`
82
67
  <div class="${0}">
83
68
  ${0}
@@ -86,7 +71,6 @@ const AccordionItemTemplate = context => html(_t || (_t = _`
86
71
  </div>
87
72
  </div>
88
73
  `), getClasses, x => renderPanelHeader(context, x.headingLevel), PANEL);
89
-
90
74
  const renderPanelHeader = (context, headingLevel) => {
91
75
  const header = headingLevel ? 'h' + headingLevel : 'h3';
92
76
  return html(_t2 || (_t2 = _`
@@ -95,13 +79,14 @@ const renderPanelHeader = (context, headingLevel) => {
95
79
  </${0}>
96
80
  `), header, renderHeaderButton(context), header);
97
81
  };
98
-
99
82
  const renderHeaderButton = context => {
100
83
  const affixIconTemplate = affixIconTemplateFactory(context);
84
+ const focusTemplate = focusTemplateFactory(context);
101
85
  return html(_t3 || (_t3 = _`
102
86
  <button class="button" id="header" @click=${0}
103
- ?aria-expanded=${0}
87
+ aria-expanded=${0}
104
88
  aria-controls="${0}">
89
+ ${0}
105
90
  ${0}
106
91
  <span class="heading-text">${0}</span>
107
92
  ${0}
@@ -109,17 +94,25 @@ const renderHeaderButton = context => {
109
94
  ${0}
110
95
  </span>
111
96
  </button>
112
- `), x => x.open = !x.open, x => x.open, PANEL, x => affixIconTemplate(x.icon), x => x.heading, when(x => x.meta, html(_t4 || (_t4 = _`<span class="meta">${0}</span>`), x => x.meta)), when(x => !x.noIndicator && !x.iconTrailing, html(_t5 || (_t5 = _`
113
- <vwc-icon class="toggle-open" type='chevron-down-solid'></vwc-icon>
114
- <vwc-icon class="toggle-close" type='chevron-up-solid'></vwc-icon>
115
- `))));
97
+ `), x => x.open = !x.open, x => x.open, PANEL, () => focusTemplate, x => affixIconTemplate(x.icon), x => x.heading, when(x => x.meta, html(_t4 || (_t4 = _`<span class="meta">${0}</span>`), x => x.meta)), when(x => !x.noIndicator && !x.iconTrailing, html(_t5 || (_t5 = _`
98
+ ${0}
99
+ ${0}
100
+ `), when(x => !x.open, html(_t6 || (_t6 = _`<vwc-icon name='chevron-down-solid'></vwc-icon>`))), when(x => x.open, html(_t7 || (_t7 = _`<vwc-icon name='chevron-up-solid'></vwc-icon>`))))));
116
101
  };
117
102
 
103
+ const prefix = getPrefix(import.meta.url);
104
+ const dependencies = ['icon', 'focus'];
118
105
  const vividAccordionItem = AccordionItem.compose({
119
106
  baseName: 'accordion-item',
120
107
  template: AccordionItemTemplate,
121
- styles: css_248z
108
+ styles: css_248z,
109
+ shadowOptions: {
110
+ delegatesFocus: true
111
+ }
122
112
  });
123
- designSystem.register(vividAccordionItem());
113
+ (async () => {
114
+ await loadComponentsModules(dependencies, prefix);
115
+ designSystem.withPrefix(prefix).register(vividAccordionItem());
116
+ })();
124
117
 
125
118
  export { vividAccordionItem };
@@ -0,0 +1,37 @@
1
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem, g as getPrefix } from '../shared/index.js';
2
+ import { c as classNames } from '../shared/class-names.js';
3
+
4
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Sun, 04 Dec 2022 15:37:45 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n position: relative;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n inline-size: inherit;\n vertical-align: middle;\n}\n.base {\n --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n}\n.base {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base::before {\n position: absolute;\n z-index: 1;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n content: \"\";\n inset: 0;\n pointer-events: none;\n}\n.base:not(.tight) {\n padding: 4px;\n column-gap: 4px;\n}\n\n/* Shape */\n.base:not(.shape-pill) {\n border-radius: 6px;\n}\n\n.base.shape-pill {\n border-radius: 24px;\n}\n\n/* Separator */\n::slotted(vwc-divider) {\n align-self: stretch;\n margin-block: 4px;\n}";
5
+
6
+ class ActionGroup extends FoundationElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.tight = false;
10
+ }
11
+ }
12
+ __decorate([attr, __metadata("design:type", String)], ActionGroup.prototype, "shape", void 0);
13
+ __decorate([attr, __metadata("design:type", String)], ActionGroup.prototype, "appearance", void 0);
14
+ __decorate([attr({
15
+ mode: 'boolean'
16
+ }), __metadata("design:type", Object)], ActionGroup.prototype, "tight", void 0);
17
+
18
+ let _ = t => t,
19
+ _t;
20
+ const getClasses = ({
21
+ appearance,
22
+ shape,
23
+ tight
24
+ }) => classNames('base', [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], ['tight', tight]);
25
+ const ActionGroupTemplate = () => html(_t || (_t = _`
26
+ <div class="${0}">
27
+ <slot></slot>
28
+ </div>`), getClasses);
29
+
30
+ const vividActionGroup = ActionGroup.compose({
31
+ baseName: 'action-group',
32
+ template: ActionGroupTemplate,
33
+ styles: css_248z
34
+ });
35
+ designSystem.withPrefix(getPrefix(import.meta.url)).register(vividActionGroup());
36
+
37
+ export { vividActionGroup };
@@ -0,0 +1,61 @@
1
+ import '../shared/es.promise.resolve.js';
2
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, g as getPrefix, d as designSystem } from '../shared/index.js';
3
+ import { l as loadComponentsModules } from '../shared/index2.js';
4
+ import { w as when } from '../shared/when.js';
5
+ import { c as classNames } from '../shared/class-names.js';
6
+
7
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Sun, 04 Dec 2022 15:37:45 GMT\n */\n.base {\n display: inline-flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--_size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n inline-size: var(--_size);\n vertical-align: middle;\n}\n.base.connotation-cta {\n --_connotation-color-primary: var(--vvd-color-cta-500);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-firm: var(--vvd-color-cta-600);\n}\n.base:not(.connotation-cta) {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.size-condensed {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.base.size-condensed .initials {\n font: var(--vvd-typography-base-condensed-bold);\n}\n.base.size-condensed .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) / 2);\n}\n.base.size-expanded {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8));\n}\n.base.size-expanded .initials {\n font: var(--vvd-typography-heading-4);\n}\n.base.size-expanded .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8)) / 2);\n}\n.base:not(.size-condensed, .size-expanded) {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.base:not(.size-condensed, .size-expanded) .initials {\n font: var(--vvd-typography-base-extended-bold);\n}\n.base:not(.size-condensed, .size-expanded) .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n}\n.base:not(.shape-pill) {\n border-radius: 6px;\n}\n.base.shape-pill {\n border-radius: 50%;\n}\n.base .initials {\n text-transform: uppercase;\n}\n.base ::slotted(*) {\n block-size: 100%;\n inline-size: 100%;\n object-fit: cover;\n}";
8
+
9
+ class Avatar extends FoundationElement {}
10
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "connotation", void 0);
11
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "shape", void 0);
12
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "appearance", void 0);
13
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "size", void 0);
14
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "icon", void 0);
15
+ __decorate([attr, __metadata("design:type", String)], Avatar.prototype, "name", void 0);
16
+
17
+ let _ = t => t,
18
+ _t,
19
+ _t2,
20
+ _t3;
21
+ const getClasses = ({
22
+ appearance,
23
+ connotation,
24
+ shape,
25
+ size
26
+ }) => classNames('base', [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], [`size-${size}`, Boolean(size)]);
27
+ function renderIcon() {
28
+ return html(_t || (_t = _`
29
+ <span class="icon">
30
+ <vwc-icon name="${0}"></vwc-icon>
31
+ </span>
32
+ `), x => x.icon ? `${x.icon}` : 'user-line');
33
+ }
34
+ function renderInitials() {
35
+ return html(_t2 || (_t2 = _`
36
+ <span class="initials">${0}</span>
37
+ `), ({
38
+ name
39
+ }) => name.substring(0, 2));
40
+ }
41
+ const AvatarTemplate = () => html(_t3 || (_t3 = _`
42
+ <span class="${0}">
43
+ <slot>
44
+ ${0}
45
+ ${0}
46
+ </slot>
47
+ </span>`), getClasses, when(x => x.name, renderInitials()), when(x => !x.name, renderIcon()));
48
+
49
+ const prefix = getPrefix(import.meta.url);
50
+ const dependencies = ['icon'];
51
+ const vividAvatar = Avatar.compose({
52
+ baseName: 'avatar',
53
+ template: AvatarTemplate,
54
+ styles: css_248z
55
+ });
56
+ (async () => {
57
+ await loadComponentsModules(dependencies, prefix);
58
+ designSystem.withPrefix(prefix).register(vividAvatar());
59
+ })();
60
+
61
+ export { vividAvatar };
package/badge/index.js CHANGED
@@ -1,64 +1,52 @@
1
- import '../icon/index.js';
2
- import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem } from '../shared/index.js';
3
- import '../shared/web.dom-collections.iterator.js';
1
+ import '../shared/es.promise.resolve.js';
2
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, g as getPrefix, d as designSystem } from '../shared/index.js';
3
+ import { l as loadComponentsModules } from '../shared/index2.js';
4
4
  import { A as AffixIconWithTrailing, a as affixIconTemplateFactory } from '../shared/affix.js';
5
5
  import { a as applyMixins } from '../shared/apply-mixins.js';
6
- import { s as styleInject } from '../shared/style-inject.es.js';
6
+ import { w as when } from '../shared/when.js';
7
7
  import { c as classNames } from '../shared/class-names.js';
8
8
  import '../shared/icon.js';
9
+ import '../shared/string-trim.js';
9
10
  import '../shared/_has.js';
10
- import '../shared/when.js';
11
-
12
- class Badge extends FoundationElement {
13
- constructor() {
14
- super(...arguments);
15
- this.text = '';
16
- }
17
-
18
- }
19
11
 
12
+ class Badge extends FoundationElement {}
20
13
  __decorate([attr, __metadata("design:type", String)], Badge.prototype, "connotation", void 0);
21
-
22
14
  __decorate([attr, __metadata("design:type", String)], Badge.prototype, "shape", void 0);
23
-
24
15
  __decorate([attr, __metadata("design:type", String)], Badge.prototype, "appearance", void 0);
25
-
26
- __decorate([attr, __metadata("design:type", String)], Badge.prototype, "size", void 0);
27
-
28
- __decorate([attr({
29
- mode: 'fromView'
30
- }), __metadata("design:type", Object)], Badge.prototype, "text", void 0);
31
-
16
+ __decorate([attr, __metadata("design:type", String)], Badge.prototype, "text", void 0);
32
17
  applyMixins(Badge, AffixIconWithTrailing);
33
18
 
34
- var css_248z = "/*\n Do not edit directly\n Generated on Wed, 27 Apr 2022 11:58:36 GMT\n*/\n.control {\n font: 600 ultra-condensed 12px / 16px SpeziaWebVariable;\n letter-spacing: 0px;\n text-decoration: none;\n text-transform: none;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n column-gap: 8px;\n vertical-align: middle;\n}\n.control:not(.connotation-cta):not(.connotation-success):not(.connotation-alert):not(.connotation-warning):not(.connotation-info) {\n --connotation: var(--vvd-color-primary);\n --on-connotation: var(--vvd-color-on-primary);\n --connotation-basis: var(--vvd-color-neutral);\n --connotation-soft: var(--vvd-color-neutral-20);\n --connotation-contrast: var(--vvd-color-neutral-90);\n}\n\n.control.connotation-cta {\n --connotation: var(--vvd-color-cta);\n --on-connotation: var(--vvd-color-on-cta);\n --connotation-basis: var(--vvd-color-cta);\n --connotation-soft: var(--vvd-color-cta-20);\n --connotation-contrast: var(--vvd-color-cta-90);\n}\n\n.control.connotation-success {\n --connotation: var(--vvd-color-success);\n --on-connotation: var(--vvd-color-on-success);\n --connotation-basis: var(--vvd-color-success);\n --connotation-soft: var(--vvd-color-success-20);\n --connotation-contrast: var(--vvd-color-success-90);\n}\n\n.control.connotation-alert {\n --connotation: var(--vvd-color-alert);\n --on-connotation: var(--vvd-color-on-alert);\n --connotation-basis: var(--vvd-color-alert);\n --connotation-soft: var(--vvd-color-alert-20);\n --connotation-contrast: var(--vvd-color-alert-90);\n}\n\n.control.connotation-warning {\n --connotation: var(--vvd-color-warning);\n --on-connotation: var(--vvd-color-on-warning);\n --connotation-basis: var(--vvd-color-warning);\n --connotation-soft: var(--vvd-color-warning-20);\n --connotation-contrast: var(--vvd-color-warning-90);\n}\n\n.control.connotation-info {\n --connotation: var(--vvd-color-info);\n --on-connotation: var(--vvd-color-on-info);\n --connotation-basis: var(--vvd-color-info);\n --connotation-soft: var(--vvd-color-info-20);\n --connotation-contrast: var(--vvd-color-info-90);\n}\n\n.control {\n --_appearance-color-text: var(--on-connotation);\n --_appearance-color-fill: var(--connotation);\n --_appearance-color-outline: transaprent;\n}\n.control.appearance-duotone {\n --_appearance-color-text: var(--connotation-contrast);\n --_appearance-color-fill: transaprent;\n --_appearance-color-outline: var(--connotation-basis);\n}\n.control.appearance-subtle {\n --_appearance-color-text: var(--connotation-contrast);\n --_appearance-color-fill: var(--connotation-soft);\n --_appearance-color-outline: transaprent;\n}\n\n/* Size */\n.control:not(.size-base-small):not(.size-base-large) {\n block-size: 24px;\n padding-inline: 10px;\n}\n\n.control.size-base-small {\n block-size: 20px;\n padding-inline: 8px;\n}\n\n.control.size-base-large {\n block-size: 28px;\n padding-inline: 12px;\n}\n\n/* Shape */\n.control:not(.shape-pill) {\n border-radius: 4px;\n}\n\n.control.shape-pill {\n border-radius: 14px;\n}\n\n/* Icon */\n.icon-trailing .icon {\n order: 1;\n}";
35
- styleInject(css_248z);
19
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Sun, 04 Dec 2022 15:37:45 GMT\n */\n.base {\n --_badge-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--_badge-block-size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n column-gap: 8px;\n font: var(--vvd-typography-base-condensed-bold);\n max-inline-size: 100%;\n padding-inline: 8px;\n vertical-align: middle;\n}\n.base.connotation-cta {\n --_connotation-color-primary: var(--vvd-color-cta-500);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-cta-500);\n --_connotation-color-soft: var(--vvd-color-cta-100);\n --_connotation-color-contrast: var(--vvd-color-cta-800);\n}\n.base.connotation-success {\n --_connotation-color-primary: var(--vvd-color-success-500);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-success-500);\n --_connotation-color-soft: var(--vvd-color-success-100);\n --_connotation-color-contrast: var(--vvd-color-success-800);\n}\n.base.connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert-500);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-alert-500);\n --_connotation-color-soft: var(--vvd-color-alert-100);\n --_connotation-color-contrast: var(--vvd-color-alert-800);\n}\n.base.connotation-warning {\n --_connotation-color-primary: var(--vvd-color-warning-300);\n --_connotation-color-primary-text: var(--vvd-color-canvas-text);\n --_connotation-color-intermediate: var(--vvd-color-warning-500);\n --_connotation-color-soft: var(--vvd-color-warning-100);\n --_connotation-color-contrast: var(--vvd-color-warning-800);\n}\n.base.connotation-information {\n --_connotation-color-primary: var(--vvd-color-information-500);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-information-500);\n --_connotation-color-soft: var(--vvd-color-information-100);\n --_connotation-color-contrast: var(--vvd-color-information-800);\n}\n.base:not(.connotation-cta, .connotation-success, .connotation-alert, .connotation-warning, .connotation-information) {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n --_connotation-color-contrast: var(--vvd-color-neutral-800);\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-subtle {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.icon-only {\n contain: size;\n padding-inline: 0;\n place-content: center;\n}\n@supports (aspect-ratio: 1) {\n .base.icon-only {\n aspect-ratio: 1;\n }\n}\n@supports not (aspect-ratio: 1) {\n .base.icon-only {\n inline-size: var(--_badge-block-size);\n }\n}\n\n.text {\n overflow: hidden;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Shape */\n.base:not(.shape-pill) {\n border-radius: 4px;\n}\n\n.base.shape-pill {\n border-radius: 14px;\n}\n\n/* Icon */\n.icon-trailing .icon {\n order: 1;\n}";
36
20
 
37
21
  let _ = t => t,
38
- _t;
39
-
22
+ _t,
23
+ _t2;
40
24
  const getClasses = ({
41
25
  connotation,
42
26
  appearance,
43
27
  shape,
44
- size,
45
- iconTrailing
46
- }) => classNames('control', [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], [`size-${size}`, Boolean(size)], ['icon-trailing', iconTrailing]);
47
-
28
+ iconTrailing,
29
+ text,
30
+ icon
31
+ }) => classNames('base', [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], ['icon-trailing', iconTrailing], ['icon-only', !text && Boolean(icon)]);
48
32
  const badgeTemplate = context => {
49
33
  const affixIconTemplate = affixIconTemplateFactory(context);
50
34
  return html(_t || (_t = _`
51
35
  <span class="${0}">
52
36
  ${0}
53
- ${0}
54
- </span>`), getClasses, x => affixIconTemplate(x.icon), x => x.text);
37
+ ${0}
38
+ </span>`), getClasses, x => affixIconTemplate(x.icon), when(x => x.text, x => html(_t2 || (_t2 = _`<span class="text">${0}</span>`), x.text)));
55
39
  };
56
40
 
57
- const VIVIDBadge = Badge.compose({
41
+ const prefix = getPrefix(import.meta.url);
42
+ const vividBadge = Badge.compose({
58
43
  baseName: 'badge',
59
44
  template: badgeTemplate,
60
45
  styles: css_248z
61
46
  });
62
- designSystem.register(VIVIDBadge());
47
+ (async () => {
48
+ await loadComponentsModules(['icon'], prefix);
49
+ designSystem.withPrefix(prefix).register(vividBadge());
50
+ })();
63
51
 
64
- export { VIVIDBadge };
52
+ export { vividBadge };