@warp-ds/elements 2.8.2-next.1 → 2.8.2-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/custom-elements.json +195 -121
- package/dist/index.d.ts +52 -22
- package/dist/packages/affix/affix.hydration.test.d.ts +1 -0
- package/dist/packages/affix/affix.hydration.test.js +33 -0
- package/dist/packages/affix/affix.js +5 -5
- package/dist/packages/affix/affix.js.map +3 -3
- package/dist/packages/alert/alert.d.ts +1 -0
- package/dist/packages/alert/alert.hydration.test.d.ts +1 -0
- package/dist/packages/alert/alert.hydration.test.js +47 -0
- package/dist/packages/alert/alert.js +7 -7
- package/dist/packages/alert/alert.js.map +3 -3
- package/dist/packages/alert/alert.test.js +21 -0
- package/dist/packages/attention/attention.hydration.test.d.ts +1 -0
- package/dist/packages/attention/attention.hydration.test.js +66 -0
- package/dist/packages/attention/attention.js +15 -15
- package/dist/packages/attention/attention.js.map +3 -3
- package/dist/packages/badge/badge.hydration.test.d.ts +1 -0
- package/dist/packages/badge/badge.hydration.test.js +50 -0
- package/dist/packages/badge/badge.js +2 -2
- package/dist/packages/badge/badge.js.map +3 -3
- package/dist/packages/badge/badge.test.js +14 -0
- package/dist/packages/box/box.hydration.test.d.ts +1 -0
- package/dist/packages/box/box.hydration.test.js +37 -0
- package/dist/packages/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.d.ts +1 -0
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.js +141 -0
- package/dist/packages/breadcrumbs/breadcrumbs.js +7 -7
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +3 -3
- package/dist/packages/breadcrumbs/breadcrumbs.test.js +3 -1
- package/dist/packages/button/button.hydration.test.d.ts +1 -0
- package/dist/packages/button/button.hydration.test.js +43 -0
- package/dist/packages/button/button.js +9 -9
- package/dist/packages/button/button.js.map +3 -3
- package/dist/packages/button/button.react.stories.d.ts +1 -1
- package/dist/packages/card/card.hydration.test.d.ts +1 -0
- package/dist/packages/card/card.hydration.test.js +38 -0
- package/dist/packages/card/card.react.stories.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.d.ts +17 -1
- package/dist/packages/checkbox/checkbox.hydration.test.d.ts +1 -0
- package/dist/packages/checkbox/checkbox.hydration.test.js +47 -0
- package/dist/packages/checkbox/checkbox.js +20 -19
- package/dist/packages/checkbox/checkbox.js.map +3 -3
- package/dist/packages/checkbox/styles.js +10 -9
- package/dist/packages/checkbox-group/checkbox-group.d.ts +7 -0
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.js +40 -0
- package/dist/packages/checkbox-group/checkbox-group.js +14 -14
- package/dist/packages/checkbox-group/checkbox-group.js.map +3 -3
- package/dist/packages/checkbox-group/checkbox-group.test.js +10 -0
- package/dist/packages/combobox/combobox.hydration.test.d.ts +1 -0
- package/dist/packages/combobox/combobox.hydration.test.js +43 -0
- package/dist/packages/combobox/combobox.js +2 -2
- package/dist/packages/combobox/combobox.js.map +2 -2
- package/dist/packages/combobox/combobox.react.stories.d.ts +1 -1
- package/dist/packages/combobox/combobox.test.js +5 -2
- package/dist/packages/datepicker/datepicker.hydration.test.d.ts +1 -0
- package/dist/packages/datepicker/datepicker.hydration.test.js +40 -0
- package/dist/packages/datepicker/datepicker.js +5 -5
- package/dist/packages/datepicker/datepicker.js.map +3 -3
- package/dist/packages/datepicker/datepicker.react.stories.d.ts +1 -1
- package/dist/packages/expandable/expandable.hydration.test.d.ts +1 -0
- package/dist/packages/expandable/expandable.hydration.test.js +47 -0
- package/dist/packages/expandable/expandable.js +12 -12
- package/dist/packages/expandable/expandable.js.map +3 -3
- package/dist/packages/icon/icon.hydration.test.d.ts +1 -0
- package/dist/packages/icon/icon.hydration.test.js +47 -0
- package/dist/packages/icon/icon.js +2 -2
- package/dist/packages/icon/icon.js.map +3 -3
- package/dist/packages/icon/icon.test.d.ts +1 -0
- package/dist/packages/icon/icon.test.js +51 -0
- package/dist/packages/link/link.hydration.test.d.ts +1 -0
- package/dist/packages/link/link.hydration.test.js +54 -0
- package/dist/packages/link/link.js +4 -4
- package/dist/packages/link/link.js.map +3 -3
- package/dist/packages/link/link.test.js +14 -0
- package/dist/packages/modal/modal.hydration.test.d.ts +1 -0
- package/dist/packages/modal/modal.hydration.test.js +25 -0
- package/dist/packages/modal-header/modal-header.js +6 -6
- package/dist/packages/modal-header/modal-header.js.map +3 -3
- package/dist/packages/page-indicator/page-indicator.hydration.test.d.ts +1 -0
- package/dist/packages/page-indicator/page-indicator.hydration.test.js +41 -0
- package/dist/packages/page-indicator/page-indicator.js +7 -7
- package/dist/packages/page-indicator/page-indicator.js.map +3 -3
- package/dist/packages/page-indicator/page-indicator.test.js +23 -0
- package/dist/packages/pagination/pagination.d.ts +4 -0
- package/dist/packages/pagination/pagination.hydration.test.d.ts +1 -0
- package/dist/packages/pagination/pagination.hydration.test.js +38 -0
- package/dist/packages/pagination/pagination.js +20 -20
- package/dist/packages/pagination/pagination.js.map +3 -3
- package/dist/packages/pagination/pagination.react.stories.d.ts +1 -1
- package/dist/packages/pagination/pagination.test.js +18 -0
- package/dist/packages/pill/pill.hydration.test.d.ts +1 -0
- package/dist/packages/pill/pill.hydration.test.js +32 -0
- package/dist/packages/pill/pill.js +5 -5
- package/dist/packages/pill/pill.js.map +3 -3
- package/dist/packages/radio/radio.a11y.test.js +15 -6
- package/dist/packages/radio/radio.d.ts +33 -1
- package/dist/packages/radio/radio.hydration.test.d.ts +1 -0
- package/dist/packages/radio/radio.hydration.test.js +29 -0
- package/dist/packages/radio/radio.js +7 -7
- package/dist/packages/radio/radio.js.map +3 -3
- package/dist/packages/radio/radio.test.js +22 -15
- package/dist/packages/radio-group/radio-group.a11y.test.js +4 -0
- package/dist/packages/radio-group/radio-group.hydration.test.d.ts +2 -0
- package/dist/packages/radio-group/radio-group.hydration.test.js +32 -0
- package/dist/packages/radio-group/radio-group.js +17 -17
- package/dist/packages/radio-group/radio-group.js.map +3 -3
- package/dist/packages/radio-group/radio-group.test.js +3 -2
- package/dist/packages/select/select.hydration.test.d.ts +1 -0
- package/dist/packages/select/select.hydration.test.js +37 -0
- package/dist/packages/select/select.js +13 -13
- package/dist/packages/select/select.js.map +3 -3
- package/dist/packages/select/select.react.stories.d.ts +1 -1
- package/dist/packages/slider/slider.hydration.test.d.ts +1 -0
- package/dist/packages/slider/slider.hydration.test.js +33 -0
- package/dist/packages/slider/slider.js +9 -9
- package/dist/packages/slider/slider.js.map +3 -3
- package/dist/packages/slider/slider.test.js +54 -0
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.d.ts +1 -0
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.js +35 -0
- package/dist/packages/slider-thumb/slider-thumb.js +16 -16
- package/dist/packages/slider-thumb/slider-thumb.js.map +3 -3
- package/dist/packages/step/step.d.ts +1 -0
- package/dist/packages/step/step.hydration.test.d.ts +1 -0
- package/dist/packages/step/step.hydration.test.js +25 -0
- package/dist/packages/step/step.js +4 -4
- package/dist/packages/step/step.js.map +3 -3
- package/dist/packages/step-indicator/step-indicator.a11y.test.js +3 -1
- package/dist/packages/step-indicator/step-indicator.hydration.test.d.ts +1 -0
- package/dist/packages/step-indicator/step-indicator.hydration.test.js +25 -0
- package/dist/packages/switch/switch.a11y.test.js +23 -9
- package/dist/packages/switch/switch.d.ts +6 -0
- package/dist/packages/switch/switch.hydration.test.d.ts +1 -0
- package/dist/packages/switch/switch.hydration.test.js +54 -0
- package/dist/packages/switch/switch.js +7 -13
- package/dist/packages/switch/switch.js.map +3 -3
- package/dist/packages/switch/switch.test.js +0 -5
- package/dist/packages/tab/tab.d.ts +39 -2
- package/dist/packages/tab/tab.hydration.test.d.ts +1 -0
- package/dist/packages/tab/tab.hydration.test.js +25 -0
- package/dist/packages/tab/tab.js +22 -12
- package/dist/packages/tab/tab.js.map +3 -3
- package/dist/packages/tab-panel/tab-panel.d.ts +23 -1
- package/dist/packages/tab-panel/tab-panel.hydration.test.d.ts +1 -0
- package/dist/packages/tab-panel/tab-panel.hydration.test.js +21 -0
- package/dist/packages/tab-panel/tab-panel.js +18 -3
- package/dist/packages/tab-panel/tab-panel.js.map +3 -3
- package/dist/packages/tabs/tabs.a11y.test.js +59 -8
- package/dist/packages/tabs/tabs.hydration.test.d.ts +1 -0
- package/dist/packages/tabs/tabs.hydration.test.js +20 -0
- package/dist/packages/tabs/tabs.js +6 -6
- package/dist/packages/tabs/tabs.js.map +3 -3
- package/dist/packages/tabs/tabs.test.js +93 -1
- package/dist/packages/textarea/textarea.hydration.test.d.ts +1 -0
- package/dist/packages/textarea/textarea.hydration.test.js +43 -0
- package/dist/packages/textarea/textarea.react.stories.d.ts +1 -1
- package/dist/packages/textfield/textfield.hydration.test.d.ts +1 -0
- package/dist/packages/textfield/textfield.hydration.test.js +43 -0
- package/dist/packages/textfield/textfield.js +2 -2
- package/dist/packages/textfield/textfield.js.map +2 -2
- package/dist/packages/textfield/textfield.react.stories.d.ts +1 -1
- package/dist/packages/textfield/textfield.test.js +26 -0
- package/dist/packages/toast/toast.js +6 -6
- package/dist/packages/toast/toast.js.map +3 -3
- package/dist/packages/toast/toast.test.d.ts +1 -0
- package/dist/packages/toast/toast.test.js +58 -0
- package/dist/setup-tests.d.ts +2 -1
- package/dist/setup-tests.js +4 -3
- package/dist/tests/react-hydration.d.ts +20 -0
- package/dist/tests/react-hydration.js +138 -0
- package/dist/web-types.json +67 -63
- package/package.json +4 -3
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, expect, test, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { setupHydrationWarningCapture, testHydration } from '../../tests/react-hydration';
|
|
3
|
+
import './icon.js';
|
|
4
|
+
describe('w-icon React SSR hydration', () => {
|
|
5
|
+
beforeEach(() => setupHydrationWarningCapture());
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
window.__HYDRATION_WARNINGS__ = [];
|
|
8
|
+
});
|
|
9
|
+
test('default (no attributes) hydrates without warnings', async () => {
|
|
10
|
+
const warnings = await testHydration('w-icon', {});
|
|
11
|
+
expect(warnings).toEqual([]);
|
|
12
|
+
});
|
|
13
|
+
test('with name hydrates without warnings', async () => {
|
|
14
|
+
const warnings = await testHydration('w-icon', {
|
|
15
|
+
name: 'Check',
|
|
16
|
+
});
|
|
17
|
+
expect(warnings).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
test('small icon hydrates without warnings', async () => {
|
|
20
|
+
const warnings = await testHydration('w-icon', {
|
|
21
|
+
name: 'Check',
|
|
22
|
+
size: 'small',
|
|
23
|
+
});
|
|
24
|
+
expect(warnings).toEqual([]);
|
|
25
|
+
});
|
|
26
|
+
test('medium icon hydrates without warnings', async () => {
|
|
27
|
+
const warnings = await testHydration('w-icon', {
|
|
28
|
+
name: 'Check',
|
|
29
|
+
size: 'medium',
|
|
30
|
+
});
|
|
31
|
+
expect(warnings).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
test('large icon hydrates without warnings', async () => {
|
|
34
|
+
const warnings = await testHydration('w-icon', {
|
|
35
|
+
name: 'Check',
|
|
36
|
+
size: 'large',
|
|
37
|
+
});
|
|
38
|
+
expect(warnings).toEqual([]);
|
|
39
|
+
});
|
|
40
|
+
test('with locale hydrates without warnings', async () => {
|
|
41
|
+
const warnings = await testHydration('w-icon', {
|
|
42
|
+
name: 'Check',
|
|
43
|
+
locale: 'nb',
|
|
44
|
+
});
|
|
45
|
+
expect(warnings).toEqual([]);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var h=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
var h=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var c=(i,r,e,s)=>{for(var t=s>1?void 0:s?w(r,e):r,n=i.length-1,a;n>=0;n--)(a=i[n])&&(t=(s?a(r,e,t):a(t))||t);return s&&t&&h(r,e,t),t};import{html as d,LitElement as v}from"lit";import{property as l,state as f}from"lit/decorators.js";import{classMap as u}from"lit/directives/class-map.js";import{css as g}from"lit";var p=g`
|
|
2
2
|
:host {
|
|
3
3
|
display: inline-block;
|
|
4
4
|
}
|
|
@@ -23,5 +23,5 @@ var h=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var r=(i,o,e,s
|
|
|
23
23
|
--w-icon-size: 32px;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
`;var m=new Map,y='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"></svg>';function
|
|
26
|
+
`;var m=new Map,y='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"></svg>';function x(i,r={}){var s;let e=(s=r.responseParser)!=null?s:(t=>t.text());return m.has(i)||m.set(i,fetch(i).then(e)),m.get(i)}var o=class extends v{constructor(){super(...arguments);this.svg=null}async fetchIcon(e){let t=`https://assets.finn.no/pkg/eikons/v1/${this.locale||"en"}/${e}.svg`;try{let n=await x(t);return new DOMParser().parseFromString(n,"text/html").body.querySelector("svg")}catch(n){return null}}firstUpdated(){this.loadIcon()}updated(e){(e.has("name")||e.has("locale"))&&this.loadIcon()}async loadIcon(){if(!this.name){this.svg=null;return}let e=await this.fetchIcon(this.name);e||(e=new DOMParser().parseFromString(y,"text/html").body.firstElementChild),this.svg=e}render(){let e=this.size||"medium",s=this.name||"",t={"w-icon":!0,"w-icon--s":e==="small","w-icon--m":e==="medium","w-icon--l":e==="large"},n=typeof e=="string"&&e.endsWith("px")?`--w-icon-size: ${e};`:"";return d`<div class="${u(t)}" style="${n}" part="w-${s.toLowerCase()}">${this.svg}</div>`}};o.styles=[p],c([l({type:String,reflect:!0})],o.prototype,"name",2),c([l({type:String,reflect:!0})],o.prototype,"size",2),c([l({type:String,reflect:!0})],o.prototype,"locale",2),c([f()],o.prototype,"svg",2);customElements.get("w-icon")||customElements.define("w-icon",o);export{o as WIcon};
|
|
27
27
|
//# sourceMappingURL=icon.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/icon/icon.ts", "../../../packages/icon/style.ts"],
|
|
4
|
-
"sourcesContent": ["import { html, LitElement, TemplateResult } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styles } from './style.js';\n\n// Generic parser for fetch responses\ntype ResponseParser<T> = (response: Response) => Promise<T>;\n\ninterface CacheFetchOptions<T> {\n responseParser?: ResponseParser<T>;\n}\n\nconst _fetchMap = new Map<string, Promise<any>>();\nconst ERROR_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"></svg>';\n\n/**\n * A minimal in-memory map to de-duplicate Fetch API media requests.\n *\n * @param uri - Resource URL\n * @param options - Optional parser for the response\n * @returns Promise of parsed response\n */\nfunction cacheFetch<T = string>(uri: string, options: CacheFetchOptions<T> = {}): Promise<T> {\n const parser = options.responseParser ?? ((res: Response) => res.text() as Promise<any>);\n if (!_fetchMap.has(uri)) {\n _fetchMap.set(uri, fetch(uri).then(parser));\n }\n return _fetchMap.get(uri) as Promise<T>;\n}\n\nexport class WIcon extends LitElement {\n static styles = [styles];\n\n /** Icon filename (without .svg) */\n @property({ type: String, reflect: true })\n name
|
|
5
|
-
"mappings": "wMAAA,OAAS,QAAAA,EAAM,cAAAC,MAAkC,MACjD,OAAS,YAAAC,EAAU,SAAAC,MAAa,oBAChC,OAAS,YAAAC,MAAgB,8BCFzB,OAAS,OAAAC,MAAW,MAEb,IAAMC,EAASD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDUtB,IAAME,EAAY,IAAI,IAChBC,EAAY,qEASlB,SAASC,EAAuBC,EAAaC,EAAgC,CAAC,EAAe,CAtB7F,IAAAC,EAuBE,IAAMC,GAASD,EAAAD,EAAQ,iBAAR,KAAAC,GAA4BE,GAAkBA,EAAI,KAAK,GACtE,OAAKP,EAAU,IAAIG,CAAG,GACpBH,EAAU,IAAIG,EAAK,MAAMA,CAAG,EAAE,KAAKG,CAAM,CAAC,EAErCN,EAAU,IAAIG,CAAG,CAC1B,CAEO,IAAMK,EAAN,cAAoBC,CAAW,CAA/B,
|
|
6
|
-
"names": ["html", "LitElement", "property", "state", "classMap", "css", "styles", "_fetchMap", "ERROR_SVG", "cacheFetch", "uri", "options", "_a", "parser", "res", "WIcon", "LitElement", "iconName", "svgText", "e", "changedProps", "iconEl", "classes", "customStyle", "html", "classMap", "styles", "__decorateClass", "property", "state"]
|
|
4
|
+
"sourcesContent": ["import { html, LitElement, TemplateResult } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styles } from './style.js';\n\n// Generic parser for fetch responses\ntype ResponseParser<T> = (response: Response) => Promise<T>;\n\ninterface CacheFetchOptions<T> {\n responseParser?: ResponseParser<T>;\n}\n\nconst _fetchMap = new Map<string, Promise<any>>();\nconst ERROR_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"></svg>';\n\n/**\n * A minimal in-memory map to de-duplicate Fetch API media requests.\n *\n * @param uri - Resource URL\n * @param options - Optional parser for the response\n * @returns Promise of parsed response\n */\nfunction cacheFetch<T = string>(uri: string, options: CacheFetchOptions<T> = {}): Promise<T> {\n const parser = options.responseParser ?? ((res: Response) => res.text() as Promise<any>);\n if (!_fetchMap.has(uri)) {\n _fetchMap.set(uri, fetch(uri).then(parser));\n }\n return _fetchMap.get(uri) as Promise<T>;\n}\n\nexport class WIcon extends LitElement {\n static styles = [styles];\n\n /** Icon filename (without .svg) */\n @property({ type: String, reflect: true })\n name!: string;\n\n /** Size: small, medium, large or pixel value (e.g. \"32px\") */\n @property({ type: String, reflect: true })\n size: 'small' | 'medium' | 'large' | string;\n\n /** Locale used in CDN URL */\n @property({ type: String, reflect: true })\n locale: string;\n\n /** Parsed SVG element (not reflected as attribute) */\n @state()\n private svg: SVGElement | null = null;\n\n /**\n * Fetch an icon SVG from the CDN, with caching\n * @param iconName - Name of the icon file\n * @returns SVGElement or null on failure\n */\n private async fetchIcon(iconName: string): Promise<SVGElement | null> {\n const locale = this.locale || 'en';\n const uri = `https://assets.finn.no/pkg/eikons/v1/${locale}/${iconName}.svg`;\n try {\n const svgText = await cacheFetch<string>(uri);\n const doc = new DOMParser().parseFromString(svgText, 'text/html');\n return doc.body.querySelector('svg');\n } catch {\n return null;\n }\n }\n\n protected firstUpdated(): void {\n this.loadIcon();\n }\n\n protected updated(changedProps: Map<string, unknown>): void {\n if (changedProps.has('name') || changedProps.has('locale')) {\n this.loadIcon();\n }\n }\n\n private async loadIcon(): Promise<void> {\n if (!this.name) {\n this.svg = null;\n return;\n }\n\n let iconEl = await this.fetchIcon(this.name);\n if (!iconEl) {\n const doc = new DOMParser().parseFromString(ERROR_SVG, 'text/html');\n iconEl = doc.body.firstElementChild as SVGElement;\n }\n this.svg = iconEl;\n }\n\n render(): TemplateResult {\n const size = this.size || 'medium';\n const name = this.name || '';\n const classes = {\n 'w-icon': true,\n 'w-icon--s': size === 'small',\n 'w-icon--m': size === 'medium',\n 'w-icon--l': size === 'large',\n };\n const customStyle = typeof size === 'string' && size.endsWith('px') ? `--w-icon-size: ${size};` : '';\n return html`<div class=\"${classMap(classes)}\" style=\"${customStyle}\" part=\"w-${name.toLowerCase()}\">${this.svg}</div>`;\n }\n}\n\nif (!customElements.get('w-icon')) {\n customElements.define('w-icon', WIcon);\n}\n", "import { css } from 'lit';\n\nexport const styles = css`\n:host {\n display: inline-block;\n}\n.w-icon {\n --_w-icon-size: var(--w-icon-size, 24px);\n height: var(--_w-icon-size);\n width: var(--_w-icon-size);\n display: flex;\n}\n.w-icon svg {\n pointer-events: none;\n height: var(--_w-icon-size);\n width: var(--_w-icon-size);\n}\n.w-icon--s {\n --w-icon-size: 16px;\n}\n.w-icon--m {\n --w-icon-size: 24px;\n}\n.w-icon--l {\n --w-icon-size: 32px;\n}\n\n`;\n"],
|
|
5
|
+
"mappings": "wMAAA,OAAS,QAAAA,EAAM,cAAAC,MAAkC,MACjD,OAAS,YAAAC,EAAU,SAAAC,MAAa,oBAChC,OAAS,YAAAC,MAAgB,8BCFzB,OAAS,OAAAC,MAAW,MAEb,IAAMC,EAASD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDUtB,IAAME,EAAY,IAAI,IAChBC,EAAY,qEASlB,SAASC,EAAuBC,EAAaC,EAAgC,CAAC,EAAe,CAtB7F,IAAAC,EAuBE,IAAMC,GAASD,EAAAD,EAAQ,iBAAR,KAAAC,GAA4BE,GAAkBA,EAAI,KAAK,GACtE,OAAKP,EAAU,IAAIG,CAAG,GACpBH,EAAU,IAAIG,EAAK,MAAMA,CAAG,EAAE,KAAKG,CAAM,CAAC,EAErCN,EAAU,IAAIG,CAAG,CAC1B,CAEO,IAAMK,EAAN,cAAoBC,CAAW,CAA/B,kCAiBL,KAAQ,IAAyB,KAOjC,MAAc,UAAUC,EAA8C,CAEpE,IAAMP,EAAM,wCADG,KAAK,QAAU,IAC4B,IAAIO,CAAQ,OACtE,GAAI,CACF,IAAMC,EAAU,MAAMT,EAAmBC,CAAG,EAE5C,OADY,IAAI,UAAU,EAAE,gBAAgBQ,EAAS,WAAW,EACrD,KAAK,cAAc,KAAK,CACrC,OAAQC,EAAA,CACN,OAAO,IACT,CACF,CAEU,cAAqB,CAC7B,KAAK,SAAS,CAChB,CAEU,QAAQC,EAA0C,EACtDA,EAAa,IAAI,MAAM,GAAKA,EAAa,IAAI,QAAQ,IACvD,KAAK,SAAS,CAElB,CAEA,MAAc,UAA0B,CACtC,GAAI,CAAC,KAAK,KAAM,CACd,KAAK,IAAM,KACX,MACF,CAEA,IAAIC,EAAS,MAAM,KAAK,UAAU,KAAK,IAAI,EACtCA,IAEHA,EADY,IAAI,UAAU,EAAE,gBAAgBb,EAAW,WAAW,EACrD,KAAK,mBAEpB,KAAK,IAAMa,CACb,CAEA,QAAyB,CACvB,IAAMC,EAAO,KAAK,MAAQ,SACpBC,EAAO,KAAK,MAAQ,GACpBC,EAAU,CACd,SAAU,GACV,YAAaF,IAAS,QACtB,YAAaA,IAAS,SACtB,YAAaA,IAAS,OACxB,EACMG,EAAc,OAAOH,GAAS,UAAYA,EAAK,SAAS,IAAI,EAAI,kBAAkBA,CAAI,IAAM,GAClG,OAAOI,gBAAmBC,EAASH,CAAO,CAAC,YAAYC,CAAW,aAAaF,EAAK,YAAY,CAAC,KAAK,KAAK,GAAG,QAChH,CACF,EAxEaR,EACJ,OAAS,CAACa,CAAM,EAIvBC,EAAA,CADCC,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAJ9Bf,EAKX,oBAIAc,EAAA,CADCC,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAR9Bf,EASX,oBAIAc,EAAA,CADCC,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAZ9Bf,EAaX,sBAIQc,EAAA,CADPE,EAAM,GAhBIhB,EAiBH,mBAyDL,eAAe,IAAI,QAAQ,GAC9B,eAAe,OAAO,SAAUA,CAAK",
|
|
6
|
+
"names": ["html", "LitElement", "property", "state", "classMap", "css", "styles", "_fetchMap", "ERROR_SVG", "cacheFetch", "uri", "options", "_a", "parser", "res", "WIcon", "LitElement", "iconName", "svgText", "e", "changedProps", "iconEl", "size", "name", "classes", "customStyle", "html", "classMap", "styles", "__decorateClass", "property", "state"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './icon.js';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { expect, test } from 'vitest';
|
|
3
|
+
import { render } from 'vitest-browser-lit';
|
|
4
|
+
import './icon.js';
|
|
5
|
+
test('renders the icon', async () => {
|
|
6
|
+
const component = html `<w-icon name="Plus" data-testid="icon"></w-icon>`;
|
|
7
|
+
const page = render(component);
|
|
8
|
+
await expect.element(page.getByTestId('icon')).toBeVisible();
|
|
9
|
+
});
|
|
10
|
+
test('defaults to medium size when no size attribute is set', async () => {
|
|
11
|
+
const component = html `<w-icon name="Plus" data-testid="icon"></w-icon>`;
|
|
12
|
+
const page = render(component);
|
|
13
|
+
const el = page.getByTestId('icon').element();
|
|
14
|
+
// The size attribute should not be reflected (to avoid hydration mismatch)
|
|
15
|
+
expect(el.hasAttribute('size')).toBe(false);
|
|
16
|
+
// But the medium size class should still be applied
|
|
17
|
+
await expect
|
|
18
|
+
.poll(() => {
|
|
19
|
+
const inner = el.shadowRoot?.querySelector('.w-icon');
|
|
20
|
+
return inner?.classList.contains('w-icon--m');
|
|
21
|
+
})
|
|
22
|
+
.toBe(true);
|
|
23
|
+
});
|
|
24
|
+
test('defaults to en locale when no locale attribute is set', async () => {
|
|
25
|
+
const component = html `<w-icon name="Plus" data-testid="icon"></w-icon>`;
|
|
26
|
+
const page = render(component);
|
|
27
|
+
const el = page.getByTestId('icon').element();
|
|
28
|
+
// The locale attribute should not be reflected (to avoid hydration mismatch)
|
|
29
|
+
expect(el.hasAttribute('locale')).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
test('uses specified size when size attribute is set', async () => {
|
|
32
|
+
const component = html `<w-icon name="Plus" size="small" data-testid="icon"></w-icon>`;
|
|
33
|
+
const page = render(component);
|
|
34
|
+
const el = page.getByTestId('icon').element();
|
|
35
|
+
// The size attribute should be reflected
|
|
36
|
+
expect(el.getAttribute('size')).toBe('small');
|
|
37
|
+
// And the small size class should be applied
|
|
38
|
+
await expect
|
|
39
|
+
.poll(() => {
|
|
40
|
+
const inner = el.shadowRoot?.querySelector('.w-icon');
|
|
41
|
+
return inner?.classList.contains('w-icon--s');
|
|
42
|
+
})
|
|
43
|
+
.toBe(true);
|
|
44
|
+
});
|
|
45
|
+
test('uses specified locale when locale attribute is set', async () => {
|
|
46
|
+
const component = html `<w-icon name="Plus" locale="nb" data-testid="icon"></w-icon>`;
|
|
47
|
+
const page = render(component);
|
|
48
|
+
const el = page.getByTestId('icon').element();
|
|
49
|
+
// The locale attribute should be reflected
|
|
50
|
+
expect(el.getAttribute('locale')).toBe('nb');
|
|
51
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './link.js';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, test, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { setupHydrationWarningCapture, testHydration } from '../../tests/react-hydration';
|
|
3
|
+
import './link.js';
|
|
4
|
+
describe('w-link React SSR hydration', () => {
|
|
5
|
+
beforeEach(() => setupHydrationWarningCapture());
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
window.__HYDRATION_WARNINGS__ = [];
|
|
8
|
+
});
|
|
9
|
+
test('default (no attributes) hydrates without warnings', async () => {
|
|
10
|
+
const warnings = await testHydration('w-link', {});
|
|
11
|
+
expect(warnings).toEqual([]);
|
|
12
|
+
});
|
|
13
|
+
test('with href hydrates without warnings', async () => {
|
|
14
|
+
const warnings = await testHydration('w-link', {
|
|
15
|
+
href: 'https://example.com',
|
|
16
|
+
});
|
|
17
|
+
expect(warnings).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
test('primary variant hydrates without warnings', async () => {
|
|
20
|
+
const warnings = await testHydration('w-link', {
|
|
21
|
+
href: 'https://example.com',
|
|
22
|
+
variant: 'primary',
|
|
23
|
+
});
|
|
24
|
+
expect(warnings).toEqual([]);
|
|
25
|
+
});
|
|
26
|
+
test('secondary variant hydrates without warnings', async () => {
|
|
27
|
+
const warnings = await testHydration('w-link', {
|
|
28
|
+
href: 'https://example.com',
|
|
29
|
+
variant: 'secondary',
|
|
30
|
+
});
|
|
31
|
+
expect(warnings).toEqual([]);
|
|
32
|
+
});
|
|
33
|
+
test('with target blank hydrates without warnings', async () => {
|
|
34
|
+
const warnings = await testHydration('w-link', {
|
|
35
|
+
href: 'https://example.com',
|
|
36
|
+
target: '_blank',
|
|
37
|
+
});
|
|
38
|
+
expect(warnings).toEqual([]);
|
|
39
|
+
});
|
|
40
|
+
test('small link hydrates without warnings', async () => {
|
|
41
|
+
const warnings = await testHydration('w-link', {
|
|
42
|
+
href: 'https://example.com',
|
|
43
|
+
small: true,
|
|
44
|
+
});
|
|
45
|
+
expect(warnings).toEqual([]);
|
|
46
|
+
});
|
|
47
|
+
test('disabled link hydrates without warnings', async () => {
|
|
48
|
+
const warnings = await testHydration('w-link', {
|
|
49
|
+
href: 'https://example.com',
|
|
50
|
+
disabled: true,
|
|
51
|
+
});
|
|
52
|
+
expect(warnings).toEqual([]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var o=(d,n,r,i)=>{for(var a=i>1?void 0:i?h(n,r):n,c=d.length-1,l;c>=0;c--)(l=d[c])&&(a=(i?l(n,r,a):l(a))||a);return i&&a&&u(n,r,a),a};import{html as m,LitElement as g}from"lit";import{property as t}from"lit/decorators.js";import{classMap as f}from"lit/directives/class-map.js";import{css as s}from"lit";var b=s`
|
|
2
2
|
*,
|
|
3
3
|
:before,
|
|
4
4
|
:after {
|
|
@@ -2671,12 +2671,12 @@ var u=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var e=(d,a,i,n
|
|
|
2671
2671
|
100% {
|
|
2672
2672
|
background-position: 60px 0;
|
|
2673
2673
|
}
|
|
2674
|
-
}`;var p=["primary","secondary","negative","negativeQuiet","utility","utilityQuiet","quiet","link","overlay","overlayInverted","overlayQuiet","overlayInvertedQuiet"],
|
|
2675
|
-
${p.join(", ")}.`)}firstUpdated(){this.autofocus&&setTimeout(()=>this.focus(),0)}render(){let i={"w-button":
|
|
2674
|
+
}`;var p=["primary","secondary","negative","negativeQuiet","utility","utilityQuiet","quiet","link","overlay","overlayInverted","overlayQuiet","overlayInvertedQuiet"],e=class extends g{constructor(){super(...arguments);this.autofocus=!1;this.small=!1;this.disabled=!1;this.fullWidth=!1}connectedCallback(){if(super.connectedCallback(),this.variant&&!p.includes(this.variant))throw new Error(`Invalid "variant" attribute. Set its value to one of the following:
|
|
2675
|
+
${p.join(", ")}.`)}firstUpdated(){this.autofocus&&setTimeout(()=>this.focus(),0)}render(){let r=this.variant||"secondary",i={"w-button":r!=="link","w-button--primary":r==="primary","w-button--secondary":r==="secondary"||!this.variant,"w-button--negative":r==="negative","w-button--utility":r==="utility","w-button--quiet":r==="quiet","w-button--negative-quiet":r==="negativeQuiet","w-button--utility-quiet":r==="utilityQuiet","w-button--overlay":r==="overlay","w-button--overlay-inverted":r==="overlayInverted","w-button--overlay-quiet":r==="overlayQuiet","w-button--overlay-inverted-quiet":r==="overlayInvertedQuiet","w-button--small":this.small,"w-button--full-width":this.fullWidth,"w-button--disabled":this.disabled};return m`<a
|
|
2676
2676
|
href=${this.href}
|
|
2677
2677
|
target=${this.target}
|
|
2678
2678
|
rel=${this.target==="_blank"?this.rel||"noopener":void 0}
|
|
2679
2679
|
class=${f(i)}>
|
|
2680
2680
|
<slot></slot>
|
|
2681
|
-
</a>`}};
|
|
2681
|
+
</a>`}};e.shadowRootOptions={...g.shadowRootOptions,delegatesFocus:!0},e.styles=[b,v],o([t({type:Boolean,reflect:!0})],e.prototype,"autofocus",2),o([t({reflect:!0})],e.prototype,"variant",2),o([t({type:Boolean,reflect:!0})],e.prototype,"small",2),o([t({reflect:!0})],e.prototype,"href",2),o([t({type:Boolean,reflect:!0})],e.prototype,"disabled",2),o([t({reflect:!0})],e.prototype,"target",2),o([t({reflect:!0})],e.prototype,"rel",2),o([t({attribute:"full-width",type:Boolean,reflect:!0})],e.prototype,"fullWidth",2);customElements.get("w-link")||customElements.define("w-link",e);export{e as WarpLink};
|
|
2682
2682
|
//# sourceMappingURL=link.js.map
|