@vonage/vivid 3.0.0-next.2 → 3.0.0-next.20

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 (122) hide show
  1. package/README.md +49 -4
  2. package/accordion/index.js +61 -0
  3. package/accordion-item/index.js +120 -0
  4. package/action-group/index.js +34 -0
  5. package/badge/index.js +24 -22
  6. package/banner/index.js +148 -0
  7. package/breadcrumb/index.js +102 -0
  8. package/breadcrumb-item/index.js +14 -9
  9. package/button/index.js +36 -663
  10. package/calendar/index.js +1526 -0
  11. package/card/index.js +139 -0
  12. package/elevation/index.js +8 -15
  13. package/fab/index.js +94 -0
  14. package/focus/index.js +20 -3
  15. package/icon/index.js +38 -5
  16. package/index.d.ts +1 -0
  17. package/index.js +43 -12
  18. package/layout/index.js +5 -5
  19. package/lib/accordion/accordion.d.ts +9 -0
  20. package/lib/accordion/accordion.template.d.ts +4 -0
  21. package/lib/accordion/index.d.ts +2 -0
  22. package/lib/accordion-item/accordion-item.d.ts +13 -0
  23. package/lib/accordion-item/accordion-item.template.d.ts +4 -0
  24. package/lib/accordion-item/index.d.ts +3 -0
  25. package/lib/action-group/action-group.d.ts +9 -0
  26. package/lib/action-group/action-group.template.d.ts +4 -0
  27. package/lib/action-group/index.d.ts +2 -0
  28. package/lib/badge/badge.d.ts +8 -8
  29. package/lib/badge/index.d.ts +1 -1
  30. package/lib/banner/banner.d.ts +20 -0
  31. package/lib/banner/banner.template.d.ts +6 -0
  32. package/lib/banner/index.d.ts +2 -0
  33. package/lib/breadcrumb/breadcrumb.d.ts +3 -0
  34. package/lib/breadcrumb/index.d.ts +2 -0
  35. package/lib/breadcrumb-item/breadcrumb-item.d.ts +3 -3
  36. package/lib/breadcrumb-item/breadcrumb-item.template.d.ts +0 -1
  37. package/lib/breadcrumb-item/index.d.ts +1 -0
  38. package/lib/button/button.d.ts +9 -8
  39. package/lib/button/index.d.ts +2 -19
  40. package/lib/calendar/calendar.d.ts +11 -0
  41. package/lib/calendar/calendar.template.d.ts +4 -0
  42. package/lib/calendar/helpers/calendar.date-functions.d.ts +2 -0
  43. package/lib/calendar/helpers/calendar.event-context.d.ts +6 -0
  44. package/lib/calendar/helpers/calendar.keyboard-interactions.d.ts +9 -0
  45. package/lib/calendar/index.d.ts +3 -0
  46. package/lib/card/card.d.ts +10 -0
  47. package/lib/card/card.template.d.ts +4 -0
  48. package/lib/card/index.d.ts +5 -0
  49. package/lib/components.d.ts +19 -3
  50. package/lib/elevation/elevation.d.ts +1 -1
  51. package/lib/elevation/index.d.ts +1 -1
  52. package/lib/enums.d.ts +14 -7
  53. package/lib/fab/fab.d.ts +10 -0
  54. package/lib/fab/fab.template.d.ts +4 -0
  55. package/lib/fab/index.d.ts +4 -0
  56. package/lib/focus/index.d.ts +1 -1
  57. package/lib/icon/icon.d.ts +4 -5
  58. package/lib/layout/index.d.ts +1 -1
  59. package/lib/layout/layout.d.ts +3 -3
  60. package/lib/note/index.d.ts +2 -0
  61. package/lib/note/note.d.ts +10 -0
  62. package/lib/note/note.template.d.ts +5 -0
  63. package/lib/popup/index.d.ts +4 -0
  64. package/lib/popup/popup.d.ts +17 -0
  65. package/lib/popup/popup.template.d.ts +4 -0
  66. package/lib/progress/index.d.ts +2 -0
  67. package/lib/progress/progress.d.ts +9 -0
  68. package/lib/progress/progress.template.d.ts +5 -0
  69. package/lib/progress-ring/index.d.ts +2 -0
  70. package/lib/progress-ring/progress-ring.d.ts +7 -0
  71. package/lib/progress-ring/progress-ring.template.d.ts +4 -0
  72. package/lib/side-drawer/index.d.ts +2 -0
  73. package/lib/side-drawer/side-drawer.d.ts +8 -0
  74. package/lib/side-drawer/side-drawer.template.d.ts +4 -0
  75. package/lib/sidenav-item/sidenav-item.d.ts +4 -5
  76. package/lib/text/index.d.ts +2 -0
  77. package/lib/text/text.d.ts +10 -0
  78. package/lib/text/text.template.d.ts +4 -0
  79. package/lib/text-anchor/text-anchor.d.ts +4 -1
  80. package/lib/text-field/index.d.ts +4 -0
  81. package/lib/text-field/text-field.d.ts +20 -0
  82. package/lib/text-field/text-field.template.d.ts +5 -0
  83. package/lib/tooltip/index.d.ts +3 -0
  84. package/lib/tooltip/tooltip.d.ts +8 -0
  85. package/lib/tooltip/tooltip.template.d.ts +4 -0
  86. package/note/index.js +65 -0
  87. package/package.json +33 -6
  88. package/popup/index.js +2106 -0
  89. package/progress/index.js +99 -0
  90. package/progress-ring/index.js +82 -0
  91. package/shared/_has.js +58 -0
  92. package/shared/affix.js +10 -25
  93. package/shared/anchor.js +11 -4
  94. package/shared/aria-global.js +20 -20
  95. package/shared/base-progress.js +70 -0
  96. package/shared/breadcrumb-item.js +25 -0
  97. package/shared/button.js +195 -0
  98. package/shared/enums.js +79 -0
  99. package/shared/es.object.assign.js +69 -0
  100. package/shared/focus.js +5 -0
  101. package/shared/focus2.js +468 -0
  102. package/shared/icon.js +1435 -0
  103. package/shared/index.js +4940 -1426
  104. package/shared/object-set-prototype-of.js +1030 -0
  105. package/shared/patterns/affix.d.ts +3 -4
  106. package/shared/patterns/focus.d.ts +3 -0
  107. package/shared/patterns/index.d.ts +1 -0
  108. package/shared/slotted.js +119 -0
  109. package/shared/text-anchor.js +12 -0
  110. package/shared/text-anchor.template.js +14 -19
  111. package/shared/web.dom-collections.iterator.js +46 -1051
  112. package/shared/when.js +15 -0
  113. package/side-drawer/index.js +82 -0
  114. package/sidenav-item/index.js +17 -57
  115. package/styles/themes/dark.css +16 -4
  116. package/styles/themes/light.css +16 -4
  117. package/text/index.js +46 -0
  118. package/text-anchor/index.js +7 -2
  119. package/text-field/index.js +389 -0
  120. package/tooltip/index.js +66 -0
  121. package/shared/index2.js +0 -4911
  122. package/shared/index3.js +0 -21
package/README.md CHANGED
@@ -1,7 +1,52 @@
1
- # components
1
+ <div class="home-page-hero">
2
+ <a href="https://github.com/vonage/vivid-3">
3
+ <img src="/vivid-logo.svg" style="" alt="Vivid Logo" width="120">
4
+ </a>
5
+ <h1>Welcome to Vivid</h1>
2
6
 
3
- This library was generated with [Nx](https://nx.dev).
7
+ [![codecov][codecov-shield]][codecov-url]
8
+ [![Contributors][contributors-shield]][contributors-url]
9
+ [![Forks][forks-shield]][forks-url]
10
+ [![Stargazers][stars-shield]][stars-url]
11
+ [![Issues][issues-shield]][issues-url]
12
+ [![Apache 2.0 License][license-shield]][license-url]
4
13
 
5
- ## Running unit tests
6
14
 
7
- Run `nx test components` to execute the unit tests via [Jest](https://jestjs.io).
15
+ <h6>
16
+ Vonage's design system platform targeted to provide </br>incorporated, battery-charged web components.
17
+ </h6>
18
+ <a class="home-page-hero-docs-btn" href="https://vivid.deno.dev"><strong>Explore the docs</strong></a>
19
+ <div class="home-page-hero-docs-links">
20
+ <a href="https://github.com/Vonage/vivid-3/issues/new?assignees=&labels=&template=bug_report.md&title=">Report Bug</a>
21
+ <span>|</span>
22
+ <a href="https://github.com/Vonage/vivid-3/issues/new?assignees=&labels=&template=feature_request.md&title=">Request Feature</a>
23
+ </div>
24
+ </div>
25
+
26
+ ### Installation
27
+
28
+ run:
29
+
30
+ ```
31
+ npm install codemirror
32
+ ```
33
+
34
+ use:
35
+
36
+ ```js
37
+ import '@vonage/vivid/button';
38
+ ```
39
+
40
+ ```html
41
+ <vwc-button label="Click me"></vwc-button>
42
+ ```
43
+
44
+ ## Roadmap
45
+
46
+ [view components status](https://github.com/orgs/Vonage/projects/6)
47
+
48
+ Follow our API planning on the [Vivid project components' view](https://github.com/orgs/Vonage/projects/3/views/13)
49
+
50
+ 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.
51
+
52
+ See the [open issues](https://github.com/vonage/vivid-3/issues) for a full list of proposed features (and known issues).
@@ -0,0 +1,61 @@
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 { c as classNames } from '../shared/class-names.js';
4
+
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);
7
+
8
+ class Accordion extends FoundationElement {
9
+ constructor() {
10
+ super();
11
+ this.accordionItems = undefined;
12
+ this.multi = false;
13
+ this.addEventListener('opened', this.handleOpened);
14
+ }
15
+
16
+ connectedCallback() {
17
+ super.connectedCallback();
18
+ this.accordionItems = this.children;
19
+ }
20
+
21
+ handleOpened(e) {
22
+ if (!this.multi && this.accordionItems) {
23
+ for (let i = 0; i < this.accordionItems.length; i++) {
24
+ if (this.accordionItems[i] !== e.target) {
25
+ this.accordionItems[i].open = false;
26
+ }
27
+ }
28
+ }
29
+ }
30
+
31
+ closeAll() {
32
+ if (this.accordionItems) {
33
+ for (let i = 0; i < this.accordionItems.length; i++) {
34
+ this.accordionItems[i].open = false;
35
+ }
36
+ }
37
+ }
38
+
39
+ }
40
+
41
+ __decorate([attr({
42
+ mode: 'boolean'
43
+ }), __metadata("design:type", Object)], Accordion.prototype, "multi", void 0);
44
+
45
+ let _2 = t => t,
46
+ _t;
47
+
48
+ const getClasses = _ => classNames('control');
49
+
50
+ const AccordionTemplate = () => html(_t || (_t = _2`<div class="${0}">
51
+ <slot></slot>
52
+ </div>`), getClasses);
53
+
54
+ const vividAccordion = Accordion.compose({
55
+ baseName: 'accordion',
56
+ template: AccordionTemplate,
57
+ styles: css_248z
58
+ });
59
+ designSystem.register(vividAccordion());
60
+
61
+ export { vividAccordion };
@@ -0,0 +1,120 @@
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';
4
+ import { A as AffixIconWithTrailing, a as affixIconTemplateFactory } from '../shared/affix.js';
5
+ import { a as applyMixins } from '../shared/apply-mixins.js';
6
+ import { w as when } from '../shared/when.js';
7
+ import { c as classNames } from '../shared/class-names.js';
8
+ import '../icon/index.js';
9
+ import '../shared/object-set-prototype-of.js';
10
+ import '../shared/icon.js';
11
+ import '../shared/_has.js';
12
+
13
+ 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}";
14
+ styleInject(css_248z);
15
+
16
+ class AccordionItem extends FoundationElement {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.noIndicator = false;
20
+ this.open = false;
21
+ }
22
+
23
+ attributeChangedCallback(name, oldValue, newValue) {
24
+ super.attributeChangedCallback(name, oldValue, newValue);
25
+
26
+ if (name === 'open') {
27
+ newValue === null ? this.emitEvent('closed') : this.emitEvent('opened');
28
+ }
29
+ }
30
+
31
+ emitEvent(name) {
32
+ const init = {
33
+ bubbles: true,
34
+ composed: true
35
+ };
36
+ const ev = new CustomEvent(name, init);
37
+ this.dispatchEvent(ev);
38
+ }
39
+
40
+ }
41
+
42
+ __decorate([attr, __metadata("design:type", String)], AccordionItem.prototype, "heading", void 0);
43
+
44
+ __decorate([attr({
45
+ attribute: 'heading-level'
46
+ }), __metadata("design:type", Number)], AccordionItem.prototype, "headingLevel", void 0);
47
+
48
+ __decorate([attr({
49
+ mode: 'boolean',
50
+ attribute: 'no-indicator'
51
+ }), __metadata("design:type", Object)], AccordionItem.prototype, "noIndicator", void 0);
52
+
53
+ __decorate([attr, __metadata("design:type", String)], AccordionItem.prototype, "meta", void 0);
54
+
55
+ __decorate([attr({
56
+ mode: 'boolean'
57
+ }), __metadata("design:type", Object)], AccordionItem.prototype, "open", void 0);
58
+
59
+ applyMixins(AccordionItem, AffixIconWithTrailing);
60
+
61
+ let _ = t => t,
62
+ _t,
63
+ _t2,
64
+ _t3,
65
+ _t4,
66
+ _t5;
67
+ const PANEL = 'panel';
68
+
69
+ const getClasses = ({
70
+ open,
71
+ iconTrailing,
72
+ icon,
73
+ noIndicator
74
+ }) => classNames('control', ['open', open], ['icon', Boolean(icon)], ['icon-trailing', iconTrailing], ['no-indicator', noIndicator]);
75
+
76
+ const AccordionItemTemplate = context => html(_t || (_t = _`
77
+ <div class="${0}">
78
+ ${0}
79
+ <div class="body" id="${0}" role="region" aria-labelledby="header">
80
+ <slot></slot>
81
+ </div>
82
+ </div>
83
+ `), getClasses, x => renderPanelHeader(context, x.headingLevel), PANEL);
84
+
85
+ const renderPanelHeader = (context, headingLevel) => {
86
+ const header = headingLevel ? 'h' + headingLevel : 'h3';
87
+ return html(_t2 || (_t2 = _`
88
+ <${0} class="header">
89
+ ${0}
90
+ </${0}>
91
+ `), header, renderHeaderButton(context), header);
92
+ };
93
+
94
+ const renderHeaderButton = context => {
95
+ const affixIconTemplate = affixIconTemplateFactory(context);
96
+ return html(_t3 || (_t3 = _`
97
+ <button class="button" id="header" @click=${0}
98
+ ?aria-expanded=${0}
99
+ aria-controls="${0}">
100
+ ${0}
101
+ <span class="heading-text">${0}</span>
102
+ ${0}
103
+ <span class="indicator">
104
+ ${0}
105
+ </span>
106
+ </button>
107
+ `), 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 = _`
108
+ <vwc-icon class="toggle-open" type='chevron-down-solid'></vwc-icon>
109
+ <vwc-icon class="toggle-close" type='chevron-up-solid'></vwc-icon>
110
+ `))));
111
+ };
112
+
113
+ const vividAccordionItem = AccordionItem.compose({
114
+ baseName: 'accordion-item',
115
+ template: AccordionItemTemplate,
116
+ styles: css_248z
117
+ });
118
+ designSystem.register(vividAccordionItem());
119
+
120
+ export { vividAccordionItem };
@@ -0,0 +1,34 @@
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 { c as classNames } from '../shared/class-names.js';
4
+
5
+ var css_248z = ".base {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n padding: 4px;\n background-color: var(--_appearance-color-fill);\n box-shadow: 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n column-gap: 4px;\n vertical-align: middle;\n}\n.base {\n --_appearance-color-text: var(--vvd-color-on-canvas);\n --_appearance-color-fill: var(--vvd-color-canvas);\n --_appearance-color-outline: var(--vvd-color-neutral-50);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transaprent;\n --_appearance-color-outline: transaprent;\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::slotted([role=separator]) {\n width: 1px;\n align-self: stretch;\n background-color: var(--vvd-color-neutral-30);\n margin-block: 4px;\n}";
6
+ styleInject(css_248z);
7
+
8
+ class ActionGroup extends FoundationElement {}
9
+
10
+ __decorate([attr, __metadata("design:type", String)], ActionGroup.prototype, "shape", void 0);
11
+
12
+ __decorate([attr, __metadata("design:type", String)], ActionGroup.prototype, "appearance", void 0);
13
+
14
+ let _ = t => t,
15
+ _t;
16
+
17
+ const getClasses = ({
18
+ appearance,
19
+ shape
20
+ }) => classNames('base', [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)]);
21
+
22
+ const ActionGroupTemplate = () => html(_t || (_t = _`
23
+ <div class="${0}">
24
+ <slot></slot>
25
+ </div>`), getClasses);
26
+
27
+ const vividActionGroup = ActionGroup.compose({
28
+ baseName: 'action-group',
29
+ template: ActionGroupTemplate,
30
+ styles: css_248z
31
+ });
32
+ designSystem.register(vividActionGroup());
33
+
34
+ export { vividActionGroup };
package/badge/index.js CHANGED
@@ -1,18 +1,16 @@
1
- import '../shared/index.js';
2
- import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, d as designSystem } from '../shared/index2.js';
3
- import '../shared/web.dom-collections.iterator.js';
4
- import { P as PrefixOrSuffix, p as prefixOrSuffixTemplate } from '../shared/affix.js';
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 { A as AffixIconWithTrailing, a as affixIconTemplateFactory } from '../shared/affix.js';
5
4
  import { a as applyMixins } from '../shared/apply-mixins.js';
6
5
  import { s as styleInject } from '../shared/style-inject.es.js';
7
6
  import { c as classNames } from '../shared/class-names.js';
7
+ import '../shared/icon.js';
8
+ import '../shared/object-set-prototype-of.js';
9
+ import '../shared/_has.js';
10
+ import '../shared/when.js';
11
+ import '../shared/web.dom-collections.iterator.js';
8
12
 
9
- class Badge extends FoundationElement {
10
- constructor() {
11
- super(...arguments);
12
- this.text = '';
13
- }
14
-
15
- }
13
+ class Badge extends FoundationElement {}
16
14
 
17
15
  __decorate([attr, __metadata("design:type", String)], Badge.prototype, "connotation", void 0);
18
16
 
@@ -20,13 +18,13 @@ __decorate([attr, __metadata("design:type", String)], Badge.prototype, "shape",
20
18
 
21
19
  __decorate([attr, __metadata("design:type", String)], Badge.prototype, "appearance", void 0);
22
20
 
23
- __decorate([attr, __metadata("design:type", String)], Badge.prototype, "size", void 0);
21
+ __decorate([attr, __metadata("design:type", String)], Badge.prototype, "density", void 0);
24
22
 
25
- __decorate([attr, __metadata("design:type", Object)], Badge.prototype, "text", void 0);
23
+ __decorate([attr, __metadata("design:type", String)], Badge.prototype, "text", void 0);
26
24
 
27
- applyMixins(Badge, PrefixOrSuffix);
25
+ applyMixins(Badge, AffixIconWithTrailing);
28
26
 
29
- var css_248z = "/*\n Do not edit directly\n Generated on Sun, 23 Jan 2022 11:15:05 GMT\n*/\n.control.appearance-filled, .control:not(.appearance-outlined):not(.appearance-soft) {\n --appearance-color-fill: var(--connotation);\n --appearance-color-text: var(--on-connotation);\n}\n\n.control.appearance-outlined {\n --appearance-color-fill: transparent;\n --appearance-color-outline: var(--connotation);\n --appearance-color-text: var(--connotation-contrast);\n}\n\n.control.appearance-soft {\n --appearance-color-fill: var(--connotation-soft);\n --appearance-color-text: var(--connotation-contrast);\n}\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-soft: var(--vvd-color-neutral-20);\n --connotation-contrast: var(--vvd-color-primary);\n}\n\n.control.connotation-cta {\n --connotation: var(--vvd-color-cta);\n --on-connotation: var(--vvd-color-on-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-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-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-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-soft: var(--vvd-color-info-20);\n --connotation-contrast: var(--vvd-color-info-90);\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.icon-trailing {\n order: 1;\n}";
27
+ 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.connotation-cta {\n --_connotation-color-primary: var(--vvd-color-cta);\n --_connotation-color-on-primary: var(--vvd-color-on-cta);\n --_connotation-color-intermediate: var(--vvd-color-cta);\n --_connotation-color-soft: var(--vvd-color-cta-20);\n --_connotation-color-contrast: var(--vvd-color-cta-90);\n}\n.control.connotation-success {\n --_connotation-color-primary: var(--vvd-color-success);\n --_connotation-color-on-primary: var(--vvd-color-on-success);\n --_connotation-color-intermediate: var(--vvd-color-success);\n --_connotation-color-soft: var(--vvd-color-success-20);\n --_connotation-color-contrast: var(--vvd-color-success-90);\n}\n.control.connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert);\n --_connotation-color-on-primary: var(--vvd-color-on-alert);\n --_connotation-color-intermediate: var(--vvd-color-alert);\n --_connotation-color-soft: var(--vvd-color-alert-20);\n --_connotation-color-contrast: var(--vvd-color-alert-90);\n}\n.control.connotation-warning {\n --_connotation-color-primary: var(--vvd-color-warning);\n --_connotation-color-on-primary: var(--vvd-color-on-warning);\n --_connotation-color-intermediate: var(--vvd-color-warning);\n --_connotation-color-soft: var(--vvd-color-warning-20);\n --_connotation-color-contrast: var(--vvd-color-warning-90);\n}\n.control.connotation-info {\n --_connotation-color-primary: var(--vvd-color-info);\n --_connotation-color-on-primary: var(--vvd-color-on-info);\n --_connotation-color-intermediate: var(--vvd-color-info);\n --_connotation-color-soft: var(--vvd-color-info-20);\n --_connotation-color-contrast: var(--vvd-color-info-90);\n}\n.control:not(.connotation-cta, .connotation-success, .connotation-alert, .connotation-warning, .connotation-info) {\n --_connotation-color-primary: var(--vvd-color-on-canvas);\n --_connotation-color-on-primary: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral);\n --_connotation-color-soft: var(--vvd-color-neutral-20);\n --_connotation-color-contrast: var(--vvd-color-neutral-90);\n}\n.control {\n --_appearance-color-text: var(--_connotation-color-on-primary);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transaprent;\n}\n.control.appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: transaprent;\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.control.appearance-subtle {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transaprent;\n}\n\n/* Size */\n.control:not(.density-condensed):not(.density-extended) {\n block-size: 24px;\n padding-inline: 10px;\n}\n\n.control.density-condensed {\n block-size: 20px;\n padding-inline: 8px;\n}\n\n.control.density-extended {\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}";
30
28
  styleInject(css_248z);
31
29
 
32
30
  let _ = t => t,
@@ -36,20 +34,24 @@ const getClasses = ({
36
34
  connotation,
37
35
  appearance,
38
36
  shape,
39
- size
40
- }) => classNames('control', [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], [`size-${size}`, Boolean(size)]);
37
+ density,
38
+ iconTrailing
39
+ }) => classNames('control', [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], [`density-${density}`, Boolean(density)], ['icon-trailing', iconTrailing]);
41
40
 
42
- const badgeTemplate = context => html(_t || (_t = _`
41
+ const badgeTemplate = context => {
42
+ const affixIconTemplate = affixIconTemplateFactory(context);
43
+ return html(_t || (_t = _`
43
44
  <span class="${0}">
44
45
  ${0}
45
46
  ${0}
46
- </span>`), getClasses, () => prefixOrSuffixTemplate(context), x => x.text);
47
+ </span>`), getClasses, x => affixIconTemplate(x.icon), x => x.text);
48
+ };
47
49
 
48
- const VIVIDBadge = Badge.compose({
50
+ const vividBadge = Badge.compose({
49
51
  baseName: 'badge',
50
52
  template: badgeTemplate,
51
53
  styles: css_248z
52
54
  });
53
- designSystem.register(VIVIDBadge());
55
+ designSystem.register(vividBadge());
54
56
 
55
- export { VIVIDBadge };
57
+ export { vividBadge };
@@ -0,0 +1,148 @@
1
+ import { F as FoundationElement, c as __classPrivateFieldGet, _ 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';
4
+ import { C as Connotation } from '../shared/enums.js';
5
+ import { b as AffixIcon, a as affixIconTemplateFactory } from '../shared/affix.js';
6
+ import { a as applyMixins } from '../shared/apply-mixins.js';
7
+ import '../button/index.js';
8
+ import '../text-anchor/index.js';
9
+ import { w as when } from '../shared/when.js';
10
+ import { c as classNames } from '../shared/class-names.js';
11
+ import '../shared/object-set-prototype-of.js';
12
+ import '../shared/icon.js';
13
+ import '../shared/_has.js';
14
+ import '../icon/index.js';
15
+ import '../focus/index.js';
16
+ import '../shared/focus.js';
17
+ import '../shared/button.js';
18
+ import '../shared/focus2.js';
19
+ import '../shared/aria-global.js';
20
+ import '../shared/text-anchor.js';
21
+ import '../shared/anchor.js';
22
+ import '../shared/text-anchor.template.js';
23
+
24
+ var css_248z = "/*\n Do not edit directly\n Generated on Wed, 27 Apr 2022 11:58:36 GMT\n*/\n.control {\n overflow: hidden;\n max-height: 10rem;\n background-color: var(--_appearance-color-fill);\n color: var(--_appearance-color-text);\n transition: max-height var(--transition-delay, 200ms);\n}\n.control.connotation-success {\n --_connotation-color-primary: var(--vvd-color-success);\n --_connotation-color-on-primary: var(--vvd-color-on-success);\n}\n.control.connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert);\n --_connotation-color-on-primary: var(--vvd-color-on-alert);\n}\n.control.connotation-announcement {\n --_connotation-color-primary: var(--vvd-color-announcement);\n --_connotation-color-on-primary: var(--vvd-color-on-announcement);\n}\n.control.connotation-warning {\n --_connotation-color-primary: var(--vvd-color-warning);\n --_connotation-color-on-primary: var(--vvd-color-on-warning);\n}\n.control:not(.connotation-success, .connotation-alert, .connotation-announcement, .connotation-warning) {\n --_connotation-color-primary: var(--vvd-color-info);\n --_connotation-color-on-primary: var(--vvd-color-on-info);\n}\n.control {\n --_appearance-color-text: var(--_connotation-color-on-primary);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transaprent;\n}\n.control.removing {\n max-height: 0;\n}\n.control > .header {\n font: 600 ultra-condensed 14px / 20px SpeziaWebVariable;\n letter-spacing: 0px;\n text-decoration: none;\n text-transform: none;\n display: flex;\n min-height: 60px;\n align-items: center;\n justify-content: flex-start;\n}\n.control > .header > .user-content {\n display: flex;\n flex: 1 0;\n align-items: center;\n justify-content: center;\n padding-inline: 16px;\n}\n.control > .header > .user-content > .icon {\n flex: 0 0 auto;\n font-size: 20px;\n margin-inline-end: 15px;\n}\n.control > .header > .user-content > .action-items {\n display: inline-block;\n flex: 0 0 auto;\n padding-inline-start: 15px;\n}\n.control > .header > .user-content > .message {\n padding: 20px 0;\n}\n.control > .header > .dismiss-button {\n --vvd-icon-button-color: inherit;\n flex: 0 0 auto;\n margin-inline-end: 8px;\n}";
25
+ styleInject(css_248z);
26
+
27
+ var _Banner_handleRemoveEnd, _Banner_closeOnKeyDown;
28
+ const connotationIconMap = new Map([[Connotation.Info, 'info-solid'], [Connotation.Announcement, 'megaphone-solid'], [Connotation.Success, 'check-circle-solid'], [Connotation.Warning, 'warning-solid'], [Connotation.Alert, 'error-solid']]);
29
+
30
+ const defaultConnotation = (connotation = Connotation.Info) => connotationIconMap.get(connotation);
31
+
32
+ class Banner extends FoundationElement {
33
+ constructor() {
34
+ super(...arguments);
35
+ this.removable = false;
36
+
37
+ _Banner_handleRemoveEnd.set(this, () => {
38
+ this.$emit('vwc-banner:removed');
39
+ this.parentElement && this.parentElement.removeChild(this);
40
+ });
41
+
42
+ _Banner_closeOnKeyDown.set(this, e => {
43
+ if (e.key !== 'Escape' || !this.removable) {
44
+ return;
45
+ }
46
+
47
+ this.remove();
48
+ });
49
+ }
50
+
51
+ get conditionedIcon() {
52
+ var _a;
53
+
54
+ return (_a = this.icon) !== null && _a !== void 0 ? _a : defaultConnotation(this.connotation);
55
+ }
56
+
57
+ connectedCallback() {
58
+ super.connectedCallback();
59
+ this.addEventListener('keydown', __classPrivateFieldGet(this, _Banner_closeOnKeyDown, "f"));
60
+ }
61
+
62
+ disconnectedCallback() {
63
+ super.disconnectedCallback();
64
+ this.removeEventListener('keydown', __classPrivateFieldGet(this, _Banner_closeOnKeyDown, "f"));
65
+ }
66
+
67
+ remove() {
68
+ this.$emit('vwc-banner:removing');
69
+ const banner = this.shadowRoot && this.shadowRoot.querySelector('.banner');
70
+
71
+ if (banner) {
72
+ banner.classList.add('removing');
73
+ banner.addEventListener('transitionend', __classPrivateFieldGet(this, _Banner_handleRemoveEnd, "f"));
74
+ }
75
+ }
76
+
77
+ }
78
+ _Banner_handleRemoveEnd = new WeakMap(), _Banner_closeOnKeyDown = new WeakMap();
79
+
80
+ __decorate([attr({
81
+ attribute: 'action-href'
82
+ }), __metadata("design:type", Object)], Banner.prototype, "actionHref", void 0);
83
+
84
+ __decorate([attr({
85
+ attribute: 'action-text'
86
+ }), __metadata("design:type", Object)], Banner.prototype, "actionText", void 0);
87
+
88
+ __decorate([attr({
89
+ mode: 'boolean'
90
+ }), __metadata("design:type", Object)], Banner.prototype, "removable", void 0);
91
+
92
+ __decorate([attr({
93
+ attribute: 'aria-live'
94
+ }), __metadata("design:type", Object)], Banner.prototype, "ariaLive", void 0);
95
+
96
+ __decorate([attr(), __metadata("design:type", Object)], Banner.prototype, "role", void 0);
97
+
98
+ __decorate([attr(), __metadata("design:type", Object)], Banner.prototype, "text", void 0);
99
+
100
+ __decorate([attr(), __metadata("design:type", Object)], Banner.prototype, "connotation", void 0);
101
+
102
+ applyMixins(Banner, AffixIcon);
103
+
104
+ let _2 = t => t,
105
+ _t,
106
+ _t2;
107
+
108
+ const getClasses = _ => classNames('control', [`connotation-${_.connotation}`, !!_.connotation]);
109
+
110
+ function renderDismissButton() {
111
+ return html(_t || (_t = _2`
112
+ <vwc-button
113
+ density="condensed"
114
+ class="dismiss-button"
115
+ icon="close-line"
116
+ @click="${0}">
117
+ </vwc-button>`), x => x.remove());
118
+ }
119
+
120
+ const BannerTemplate = context => {
121
+ const affixIconTemplate = affixIconTemplateFactory(context);
122
+ return html(_t2 || (_t2 = _2`
123
+ <div class="banner ${0}" tabindex="0">
124
+ <header class="header">
125
+ <div class="user-content">
126
+ ${0}
127
+ <div class="banner--message"
128
+ role="${0}"
129
+ aria-live="${0}">
130
+ ${0}
131
+ </div>
132
+ <slot class="action-items" name="actionItems"></slot>
133
+ </div>
134
+
135
+ ${0}
136
+ </header>
137
+ </div>
138
+ `), getClasses, x => affixIconTemplate(x.conditionedIcon), x => x.role ? x.role : 'status', x => x.ariaLive ? x.ariaLive : 'polite', x => x.text, when(x => x.removable, renderDismissButton()));
139
+ };
140
+
141
+ const vividBanner = Banner.compose({
142
+ baseName: 'banner',
143
+ template: BannerTemplate,
144
+ styles: css_248z
145
+ });
146
+ designSystem.register(vividBanner());
147
+
148
+ export { vividBanner };
@@ -0,0 +1,102 @@
1
+ import { h as html, F as FoundationElement, _ as __decorate, o as observable, d as designSystem } from '../shared/index.js';
2
+ import { s as styleInject } from '../shared/style-inject.es.js';
3
+ import { B as BreadcrumbItem } from '../shared/breadcrumb-item.js';
4
+ import { s as slotted, e as elements } from '../shared/slotted.js';
5
+ import '../shared/anchor.js';
6
+ import '../shared/apply-mixins.js';
7
+ import '../shared/aria-global.js';
8
+
9
+ /**
10
+ * The template for the {@link @microsoft/fast-foundation#Breadcrumb} component.
11
+ * @public
12
+ */
13
+ const breadcrumbTemplate = (context, definition) => html `
14
+ <template role="navigation">
15
+ <div role="list" class="list" part="list">
16
+ <slot
17
+ ${slotted({ property: "slottedBreadcrumbItems", filter: elements() })}
18
+ ></slot>
19
+ </div>
20
+ </template>
21
+ `;
22
+
23
+ /**
24
+ * A Breadcrumb Custom HTML Element.
25
+ * @slot - The default slot for the breadcrumb items
26
+ * @csspart list - The element wrapping the slotted items
27
+ *
28
+ * @public
29
+ */
30
+ class Breadcrumb$1 extends FoundationElement {
31
+ slottedBreadcrumbItemsChanged() {
32
+ if (this.$fastController.isConnected) {
33
+ if (this.slottedBreadcrumbItems === undefined ||
34
+ this.slottedBreadcrumbItems.length === 0) {
35
+ return;
36
+ }
37
+ const lastNode = this.slottedBreadcrumbItems[this.slottedBreadcrumbItems.length - 1];
38
+ this.slottedBreadcrumbItems.forEach((item) => {
39
+ const itemIsLastNode = item === lastNode;
40
+ this.setItemSeparator(item, itemIsLastNode);
41
+ this.setAriaCurrent(item, itemIsLastNode);
42
+ });
43
+ }
44
+ }
45
+ setItemSeparator(item, isLastNode) {
46
+ if (item instanceof BreadcrumbItem) {
47
+ item.separator = !isLastNode;
48
+ }
49
+ }
50
+ /**
51
+ * Finds href on childnodes in the light DOM or shadow DOM.
52
+ * We look in the shadow DOM because we insert an anchor when breadcrumb-item has an href.
53
+ */
54
+ findChildWithHref(node) {
55
+ var _a, _b;
56
+ if (node.childElementCount > 0) {
57
+ return node.querySelector("a[href]");
58
+ }
59
+ else if ((_a = node.shadowRoot) === null || _a === void 0 ? void 0 : _a.childElementCount) {
60
+ return (_b = node.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector("a[href]");
61
+ }
62
+ else
63
+ return null;
64
+ }
65
+ /**
66
+ * Sets ARIA Current for the current node
67
+ * If child node with an anchor tag and with href is found then set aria-current to correct value for the child node,
68
+ * otherwise apply aria-current to the host element, with an href
69
+ */
70
+ setAriaCurrent(item, isLastNode) {
71
+ const childNodeWithHref = this.findChildWithHref(item);
72
+ if (childNodeWithHref === null &&
73
+ item.hasAttribute("href") &&
74
+ item instanceof BreadcrumbItem) {
75
+ isLastNode
76
+ ? item.setAttribute("aria-current", "page")
77
+ : item.removeAttribute("aria-current");
78
+ }
79
+ else if (childNodeWithHref !== null) {
80
+ isLastNode
81
+ ? childNodeWithHref.setAttribute("aria-current", "page")
82
+ : childNodeWithHref.removeAttribute("aria-current");
83
+ }
84
+ }
85
+ }
86
+ __decorate([
87
+ observable
88
+ ], Breadcrumb$1.prototype, "slottedBreadcrumbItems", void 0);
89
+
90
+ var css_248z = ".list {\n display: flex;\n}";
91
+ styleInject(css_248z);
92
+
93
+ class Breadcrumb extends Breadcrumb$1 {}
94
+
95
+ const vividBreadcrumb = Breadcrumb.compose({
96
+ baseName: 'breadcrumb',
97
+ template: breadcrumbTemplate,
98
+ styles: css_248z
99
+ });
100
+ designSystem.register(vividBreadcrumb());
101
+
102
+ export { vividBreadcrumb };