@storybook/web-components 7.0.20 → 7.0.22

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/config.js CHANGED
@@ -2,4 +2,4 @@ var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDe
2
2
  Did you forget to return the HTML snippet from the story?
3
3
  Use "() => <your snippet or node>" or when defining the story.
4
4
  `})}var api=(0,import_preview_api2.start)(renderToCanvas);var forceReRender=api.forceReRender,raw=api.clientApi.raw;var import_global3=require("@storybook/global");function isValidComponent(tagName){if(!tagName)return!1;if(typeof tagName=="string")return!0;throw new Error('Provided component needs to be a string. e.g. component: "my-element"')}function isValidMetaData(customElements){if(!customElements)return!1;if(customElements.tags&&Array.isArray(customElements.tags)||customElements.modules&&Array.isArray(customElements.modules))return!0;throw new Error(`You need to setup valid meta data in your config.js via setCustomElements().
5
- See the readme of addon-docs for web components for more details.`)}function getCustomElements(){return import_global3.global.__STORYBOOK_CUSTOM_ELEMENTS__||import_global3.global.__STORYBOOK_CUSTOM_ELEMENTS_MANIFEST__}var{window:window2,EventSource}=import_global4.global,_a;typeof module<"u"&&((_a=module==null?void 0:module.hot)!=null&&_a.decline)&&(module.hot.decline(),new EventSource("__webpack_hmr").addEventListener("message",function(event){try{let{action}=JSON.parse(event.data);action==="built"&&window2.location.reload()}catch{}}));function mapItem(item,category){var _a2,_b;let type=category==="properties"?{name:((_a2=item.type)==null?void 0:_a2.text)||item.type}:{name:"void"};return{name:item.name,required:!1,description:item.description,type,table:{category,type:{summary:((_b=item.type)==null?void 0:_b.text)||item.type},defaultValue:{summary:item.default!==void 0?item.default:item.defaultValue}}}}function mapEvent(item){let name=item.name.replace(/(-|_|:|\.|\s)+(.)?/g,(_match,_separator,chr)=>chr?chr.toUpperCase():"").replace(/^([A-Z])/,match=>match.toLowerCase());return name=`on${name.charAt(0).toUpperCase()+name.substr(1)}`,[{name,action:{name:item.name},table:{disable:!0}},mapItem(item,"events")]}function mapData(data,category){return data&&data.filter(item=>item&&item.name).reduce((acc,item)=>{if(item.kind==="method")return acc;switch(category){case"events":mapEvent(item).forEach(argType=>{acc[argType.name]=argType});break;default:acc[item.name]=mapItem(item,category);break}return acc},{})}var getMetaDataExperimental=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metaData=customElements.tags.find(tag=>tag.name.toUpperCase()===tagName.toUpperCase());return metaData||import_client_logger.logger.warn(`Component not found in custom-elements.json: ${tagName}`),metaData},getMetaDataV1=(tagName,customElements)=>{var _a2;if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metadata;return(_a2=customElements==null?void 0:customElements.modules)==null||_a2.forEach(_module=>{var _a3;(_a3=_module==null?void 0:_module.declarations)==null||_a3.forEach(declaration=>{declaration.tagName===tagName&&(metadata=declaration)})}),metadata||import_client_logger.logger.warn(`Component not found in custom-elements.json: ${tagName}`),metadata},getMetaData=(tagName,manifest)=>(manifest==null?void 0:manifest.version)==="experimental"?getMetaDataExperimental(tagName,manifest):getMetaDataV1(tagName,manifest),extractArgTypesFromElements=(tagName,customElements)=>{let metaData=getMetaData(tagName,customElements);return metaData&&{...mapData(metaData.attributes,"attributes"),...mapData(metaData.members,"properties"),...mapData(metaData.properties,"properties"),...mapData(metaData.events,"events"),...mapData(metaData.slots,"slots"),...mapData(metaData.cssProperties,"css custom properties"),...mapData(metaData.cssParts,"css shadow parts")}},extractArgTypes=tagName=>{let cem=getCustomElements();return extractArgTypesFromElements(tagName,cem)},extractComponentDescription=tagName=>{let metaData=getMetaData(tagName,getCustomElements());return metaData&&metaData.description};var import_lit2=require("lit"),import_preview_api3=require("@storybook/preview-api"),import_docs_tools=require("@storybook/docs-tools"),LIT_EXPRESSION_COMMENTS=/<!--\?lit\$[0-9]+\$-->|<!--\??-->/g;function skipSourceRender(context){var _a2;let sourceParams=(_a2=context==null?void 0:context.parameters.docs)==null?void 0:_a2.source,isArgsStory=context==null?void 0:context.parameters.__isArgsStory;return(sourceParams==null?void 0:sourceParams.type)===import_docs_tools.SourceType.DYNAMIC?!1:!isArgsStory||(sourceParams==null?void 0:sourceParams.code)||(sourceParams==null?void 0:sourceParams.type)===import_docs_tools.SourceType.CODE}function sourceDecorator(storyFn,context){var _a2,_b;let story=storyFn(),renderedForSource=(_b=(_a2=context==null?void 0:context.parameters.docs)==null?void 0:_a2.source)!=null&&_b.excludeDecorators?context.originalStoryFn(context.args,context):story,source;if((0,import_preview_api3.useEffect)(()=>{let{id,unmappedArgs}=context;source&&import_preview_api3.addons.getChannel().emit(import_docs_tools.SNIPPET_RENDERED,{id,source,args:unmappedArgs})}),!skipSourceRender(context)){let container=window.document.createElement("div");renderedForSource instanceof DocumentFragment?(0,import_lit2.render)(renderedForSource.cloneNode(!0),container):(0,import_lit2.render)(renderedForSource,container),source=container.innerHTML.replace(LIT_EXPRESSION_COMMENTS,"")}return story}var decorators=[sourceDecorator],parameters={docs:{extractArgTypes,extractComponentDescription,story:{inline:!0},source:{type:import_docs_tools2.SourceType.DYNAMIC,language:"html"}}},argTypesEnhancers=[import_docs_tools2.enhanceArgTypes];var parameters2={renderer:"web-components",...parameters};0&&(module.exports={argTypesEnhancers,decorators,parameters,render,renderToCanvas});
5
+ See the readme of addon-docs for web components for more details.`)}function getCustomElements(){return import_global3.global.__STORYBOOK_CUSTOM_ELEMENTS__||import_global3.global.__STORYBOOK_CUSTOM_ELEMENTS_MANIFEST__}var{window:window2,EventSource}=import_global4.global,_a;typeof module<"u"&&((_a=module==null?void 0:module.hot)!=null&&_a.decline)&&(module.hot.decline(),new EventSource("__webpack_hmr").addEventListener("message",function(event){try{let{action}=JSON.parse(event.data);action==="built"&&window2.location.reload()}catch{}}));function mapItem(item,category){var _a2,_b;let type;switch(category){case"attributes":case"properties":type={name:((_a2=item.type)==null?void 0:_a2.text)||item.type};break;case"slots":type={name:"string"};break;default:type={name:"void"};break}return{name:item.name,required:!1,description:item.description,type,table:{category,type:{summary:((_b=item.type)==null?void 0:_b.text)||item.type},defaultValue:{summary:item.default!==void 0?item.default:item.defaultValue}}}}function mapEvent(item){let name=item.name.replace(/(-|_|:|\.|\s)+(.)?/g,(_match,_separator,chr)=>chr?chr.toUpperCase():"").replace(/^([A-Z])/,match=>match.toLowerCase());return name=`on${name.charAt(0).toUpperCase()+name.substr(1)}`,[{name,action:{name:item.name},table:{disable:!0}},mapItem(item,"events")]}function mapData(data,category){return data&&data.filter(item=>item&&item.name).reduce((acc,item)=>{if(item.kind==="method")return acc;switch(category){case"events":mapEvent(item).forEach(argType=>{acc[argType.name]=argType});break;default:acc[item.name]=mapItem(item,category);break}return acc},{})}var getMetaDataExperimental=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metaData=customElements.tags.find(tag=>tag.name.toUpperCase()===tagName.toUpperCase());return metaData||import_client_logger.logger.warn(`Component not found in custom-elements.json: ${tagName}`),metaData},getMetaDataV1=(tagName,customElements)=>{var _a2;if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metadata;return(_a2=customElements==null?void 0:customElements.modules)==null||_a2.forEach(_module=>{var _a3;(_a3=_module==null?void 0:_module.declarations)==null||_a3.forEach(declaration=>{declaration.tagName===tagName&&(metadata=declaration)})}),metadata||import_client_logger.logger.warn(`Component not found in custom-elements.json: ${tagName}`),metadata},getMetaData=(tagName,manifest)=>(manifest==null?void 0:manifest.version)==="experimental"?getMetaDataExperimental(tagName,manifest):getMetaDataV1(tagName,manifest),extractArgTypesFromElements=(tagName,customElements)=>{let metaData=getMetaData(tagName,customElements);return metaData&&{...mapData(metaData.members??[],"properties"),...mapData(metaData.properties??[],"properties"),...mapData(metaData.attributes??[],"attributes"),...mapData(metaData.events??[],"events"),...mapData(metaData.slots??[],"slots"),...mapData(metaData.cssProperties??[],"css custom properties"),...mapData(metaData.cssParts??[],"css shadow parts")}},extractArgTypes=tagName=>{let cem=getCustomElements();return extractArgTypesFromElements(tagName,cem)},extractComponentDescription=tagName=>{let metaData=getMetaData(tagName,getCustomElements());return metaData&&metaData.description};var import_lit2=require("lit"),import_preview_api3=require("@storybook/preview-api"),import_docs_tools=require("@storybook/docs-tools"),LIT_EXPRESSION_COMMENTS=/<!--\?lit\$[0-9]+\$-->|<!--\??-->/g;function skipSourceRender(context){var _a2;let sourceParams=(_a2=context==null?void 0:context.parameters.docs)==null?void 0:_a2.source,isArgsStory=context==null?void 0:context.parameters.__isArgsStory;return(sourceParams==null?void 0:sourceParams.type)===import_docs_tools.SourceType.DYNAMIC?!1:!isArgsStory||(sourceParams==null?void 0:sourceParams.code)||(sourceParams==null?void 0:sourceParams.type)===import_docs_tools.SourceType.CODE}function sourceDecorator(storyFn,context){var _a2,_b;let story=storyFn(),renderedForSource=(_b=(_a2=context==null?void 0:context.parameters.docs)==null?void 0:_a2.source)!=null&&_b.excludeDecorators?context.originalStoryFn(context.args,context):story,source;if((0,import_preview_api3.useEffect)(()=>{let{id,unmappedArgs}=context;source&&import_preview_api3.addons.getChannel().emit(import_docs_tools.SNIPPET_RENDERED,{id,source,args:unmappedArgs})}),!skipSourceRender(context)){let container=window.document.createElement("div");renderedForSource instanceof DocumentFragment?(0,import_lit2.render)(renderedForSource.cloneNode(!0),container):(0,import_lit2.render)(renderedForSource,container),source=container.innerHTML.replace(LIT_EXPRESSION_COMMENTS,"")}return story}var decorators=[sourceDecorator],parameters={docs:{extractArgTypes,extractComponentDescription,story:{inline:!0},source:{type:import_docs_tools2.SourceType.DYNAMIC,language:"html"}}},argTypesEnhancers=[import_docs_tools2.enhanceArgTypes];var parameters2={renderer:"web-components",...parameters};0&&(module.exports={argTypesEnhancers,decorators,parameters,render,renderToCanvas});
package/dist/config.mjs CHANGED
@@ -5,6 +5,6 @@ import { logger } from '@storybook/client-logger';
5
5
  import { render } from 'lit';
6
6
  import { useEffect, addons } from '@storybook/preview-api';
7
7
 
8
- function mapItem(item,category){let type=category==="properties"?{name:item.type?.text||item.type}:{name:"void"};return {name:item.name,required:!1,description:item.description,type,table:{category,type:{summary:item.type?.text||item.type},defaultValue:{summary:item.default!==void 0?item.default:item.defaultValue}}}}function mapEvent(item){let name=item.name.replace(/(-|_|:|\.|\s)+(.)?/g,(_match,_separator,chr)=>chr?chr.toUpperCase():"").replace(/^([A-Z])/,match=>match.toLowerCase());return name=`on${name.charAt(0).toUpperCase()+name.substr(1)}`,[{name,action:{name:item.name},table:{disable:!0}},mapItem(item,"events")]}function mapData(data,category){return data&&data.filter(item=>item&&item.name).reduce((acc,item)=>{if(item.kind==="method")return acc;switch(category){case"events":mapEvent(item).forEach(argType=>{acc[argType.name]=argType;});break;default:acc[item.name]=mapItem(item,category);break}return acc},{})}var getMetaDataExperimental=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metaData=customElements.tags.find(tag=>tag.name.toUpperCase()===tagName.toUpperCase());return metaData||logger.warn(`Component not found in custom-elements.json: ${tagName}`),metaData},getMetaDataV1=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metadata;return customElements?.modules?.forEach(_module=>{_module?.declarations?.forEach(declaration=>{declaration.tagName===tagName&&(metadata=declaration);});}),metadata||logger.warn(`Component not found in custom-elements.json: ${tagName}`),metadata},getMetaData=(tagName,manifest)=>manifest?.version==="experimental"?getMetaDataExperimental(tagName,manifest):getMetaDataV1(tagName,manifest),extractArgTypesFromElements=(tagName,customElements)=>{let metaData=getMetaData(tagName,customElements);return metaData&&{...mapData(metaData.attributes,"attributes"),...mapData(metaData.members,"properties"),...mapData(metaData.properties,"properties"),...mapData(metaData.events,"events"),...mapData(metaData.slots,"slots"),...mapData(metaData.cssProperties,"css custom properties"),...mapData(metaData.cssParts,"css shadow parts")}},extractArgTypes=tagName=>{let cem=getCustomElements();return extractArgTypesFromElements(tagName,cem)},extractComponentDescription=tagName=>{let metaData=getMetaData(tagName,getCustomElements());return metaData&&metaData.description};var LIT_EXPRESSION_COMMENTS=/<!--\?lit\$[0-9]+\$-->|<!--\??-->/g;function skipSourceRender(context){let sourceParams=context?.parameters.docs?.source,isArgsStory=context?.parameters.__isArgsStory;return sourceParams?.type===SourceType.DYNAMIC?!1:!isArgsStory||sourceParams?.code||sourceParams?.type===SourceType.CODE}function sourceDecorator(storyFn,context){let story=storyFn(),renderedForSource=context?.parameters.docs?.source?.excludeDecorators?context.originalStoryFn(context.args,context):story,source;if(useEffect(()=>{let{id,unmappedArgs}=context;source&&addons.getChannel().emit(SNIPPET_RENDERED,{id,source,args:unmappedArgs});}),!skipSourceRender(context)){let container=window.document.createElement("div");renderedForSource instanceof DocumentFragment?render(renderedForSource.cloneNode(!0),container):render(renderedForSource,container),source=container.innerHTML.replace(LIT_EXPRESSION_COMMENTS,"");}return story}var decorators=[sourceDecorator],parameters={docs:{extractArgTypes,extractComponentDescription,story:{inline:!0},source:{type:SourceType.DYNAMIC,language:"html"}}},argTypesEnhancers=[enhanceArgTypes];var parameters2={renderer:"web-components",...parameters};
8
+ function mapItem(item,category){let type;switch(category){case"attributes":case"properties":type={name:item.type?.text||item.type};break;case"slots":type={name:"string"};break;default:type={name:"void"};break}return {name:item.name,required:!1,description:item.description,type,table:{category,type:{summary:item.type?.text||item.type},defaultValue:{summary:item.default!==void 0?item.default:item.defaultValue}}}}function mapEvent(item){let name=item.name.replace(/(-|_|:|\.|\s)+(.)?/g,(_match,_separator,chr)=>chr?chr.toUpperCase():"").replace(/^([A-Z])/,match=>match.toLowerCase());return name=`on${name.charAt(0).toUpperCase()+name.substr(1)}`,[{name,action:{name:item.name},table:{disable:!0}},mapItem(item,"events")]}function mapData(data,category){return data&&data.filter(item=>item&&item.name).reduce((acc,item)=>{if(item.kind==="method")return acc;switch(category){case"events":mapEvent(item).forEach(argType=>{acc[argType.name]=argType;});break;default:acc[item.name]=mapItem(item,category);break}return acc},{})}var getMetaDataExperimental=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metaData=customElements.tags.find(tag=>tag.name.toUpperCase()===tagName.toUpperCase());return metaData||logger.warn(`Component not found in custom-elements.json: ${tagName}`),metaData},getMetaDataV1=(tagName,customElements)=>{if(!isValidComponent(tagName)||!isValidMetaData(customElements))return null;let metadata;return customElements?.modules?.forEach(_module=>{_module?.declarations?.forEach(declaration=>{declaration.tagName===tagName&&(metadata=declaration);});}),metadata||logger.warn(`Component not found in custom-elements.json: ${tagName}`),metadata},getMetaData=(tagName,manifest)=>manifest?.version==="experimental"?getMetaDataExperimental(tagName,manifest):getMetaDataV1(tagName,manifest),extractArgTypesFromElements=(tagName,customElements)=>{let metaData=getMetaData(tagName,customElements);return metaData&&{...mapData(metaData.members??[],"properties"),...mapData(metaData.properties??[],"properties"),...mapData(metaData.attributes??[],"attributes"),...mapData(metaData.events??[],"events"),...mapData(metaData.slots??[],"slots"),...mapData(metaData.cssProperties??[],"css custom properties"),...mapData(metaData.cssParts??[],"css shadow parts")}},extractArgTypes=tagName=>{let cem=getCustomElements();return extractArgTypesFromElements(tagName,cem)},extractComponentDescription=tagName=>{let metaData=getMetaData(tagName,getCustomElements());return metaData&&metaData.description};var LIT_EXPRESSION_COMMENTS=/<!--\?lit\$[0-9]+\$-->|<!--\??-->/g;function skipSourceRender(context){let sourceParams=context?.parameters.docs?.source,isArgsStory=context?.parameters.__isArgsStory;return sourceParams?.type===SourceType.DYNAMIC?!1:!isArgsStory||sourceParams?.code||sourceParams?.type===SourceType.CODE}function sourceDecorator(storyFn,context){let story=storyFn(),renderedForSource=context?.parameters.docs?.source?.excludeDecorators?context.originalStoryFn(context.args,context):story,source;if(useEffect(()=>{let{id,unmappedArgs}=context;source&&addons.getChannel().emit(SNIPPET_RENDERED,{id,source,args:unmappedArgs});}),!skipSourceRender(context)){let container=window.document.createElement("div");renderedForSource instanceof DocumentFragment?render(renderedForSource.cloneNode(!0),container):render(renderedForSource,container),source=container.innerHTML.replace(LIT_EXPRESSION_COMMENTS,"");}return story}var decorators=[sourceDecorator],parameters={docs:{extractArgTypes,extractComponentDescription,story:{inline:!0},source:{type:SourceType.DYNAMIC,language:"html"}}},argTypesEnhancers=[enhanceArgTypes];var parameters2={renderer:"web-components",...parameters};
9
9
 
10
10
  export { argTypesEnhancers, decorators, parameters2 as parameters };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/web-components",
3
- "version": "7.0.20",
3
+ "version": "7.0.22",
4
4
  "description": "Storybook web-components renderer",
5
5
  "keywords": [
6
6
  "lit",
@@ -51,13 +51,13 @@
51
51
  "prep": "../../../scripts/prepare/bundle.ts"
52
52
  },
53
53
  "dependencies": {
54
- "@storybook/client-logger": "7.0.20",
55
- "@storybook/core-client": "7.0.20",
56
- "@storybook/docs-tools": "7.0.20",
54
+ "@storybook/client-logger": "7.0.22",
55
+ "@storybook/core-client": "7.0.22",
56
+ "@storybook/docs-tools": "7.0.22",
57
57
  "@storybook/global": "^5.0.0",
58
- "@storybook/manager-api": "7.0.20",
59
- "@storybook/preview-api": "7.0.20",
60
- "@storybook/types": "7.0.20",
58
+ "@storybook/manager-api": "7.0.22",
59
+ "@storybook/preview-api": "7.0.22",
60
+ "@storybook/types": "7.0.22",
61
61
  "ts-dedent": "^2.0.0"
62
62
  },
63
63
  "devDependencies": {
@@ -85,4 +85,4 @@
85
85
  "platform": "browser"
86
86
  },
87
87
  "gitHead": "9fb2573aa274f3f69d3358050e8df9c903e8245f"
88
- }
88
+ }
@@ -0,0 +1,199 @@
1
+ import { global } from '@storybook/global';
2
+
3
+ import { LitElement, html, css } from 'lit-element';
4
+
5
+ const { CustomEvent } = global;
6
+
7
+ const demoWcCardStyle = css`
8
+ :host {
9
+ display: block;
10
+ position: relative;
11
+ width: 250px;
12
+ height: 200px;
13
+ border-radius: 10px;
14
+ transform-style: preserve-3d;
15
+ transition: all 0.8s ease;
16
+ }
17
+
18
+ .header {
19
+ font-weight: bold;
20
+ font-size: var(--demo-wc-card-header-font-size, 16px);
21
+ text-align: center;
22
+ }
23
+
24
+ .content {
25
+ padding: 20px 10px 0 10px;
26
+ flex-grow: 1;
27
+ }
28
+
29
+ .footer {
30
+ display: flex;
31
+ }
32
+
33
+ dl {
34
+ margin: 0;
35
+ text-align: left;
36
+ }
37
+
38
+ dd {
39
+ margin-left: 15px;
40
+ }
41
+
42
+ button {
43
+ border-radius: 15px;
44
+ width: 30px;
45
+ height: 30px;
46
+ background: #fff;
47
+ border: 1px solid #ccc;
48
+ color: #000;
49
+ font-size: 21px;
50
+ line-height: 27px;
51
+ font-weight: bold;
52
+ cursor: pointer;
53
+ margin: 5px;
54
+ }
55
+
56
+ .note {
57
+ flex-grow: 1;
58
+ color: #666;
59
+ font-size: 16px;
60
+ font-weight: bold;
61
+ text-align: left;
62
+ padding-top: 15px;
63
+ }
64
+
65
+ :host([back-side]) {
66
+ transform: rotateY(180deg);
67
+ }
68
+
69
+ #front,
70
+ #back {
71
+ position: absolute;
72
+ width: 250px;
73
+ box-sizing: border-box;
74
+ box-shadow: #ccc 3px 3px 2px 1px;
75
+ padding: 10px;
76
+ display: flex;
77
+ flex-flow: column;
78
+ top: 0;
79
+ left: 0;
80
+ height: 100%;
81
+ border-radius: 10px;
82
+ backface-visibility: hidden;
83
+ overflow: hidden;
84
+ }
85
+
86
+ #front {
87
+ background: linear-gradient(141deg, #aaa 25%, #eee 40%, #ddd 55%);
88
+ color: var(--demo-wc-card-front-color, #000);
89
+ }
90
+
91
+ #back {
92
+ background: linear-gradient(141deg, #333 25%, #aaa 40%, #666 55%);
93
+ color: var(--demo-wc-card-back-color, #fff);
94
+ text-align: center;
95
+ transform: rotateY(180deg) translate3d(0px, 0, 1px);
96
+ }
97
+
98
+ #back .note {
99
+ color: #fff;
100
+ }
101
+ `;
102
+
103
+ /**
104
+ * This is a container looking like a card with a back and front side you can switch
105
+ *
106
+ * @slot - This is an unnamed slot (the default slot)
107
+ * @fires side-changed - Fires whenever it switches between front/back
108
+ * @cssprop --demo-wc-card-header-font-size - Header font size
109
+ * @cssprop --demo-wc-card-front-color - Font color for front
110
+ * @cssprop --demo-wc-card-back-color - Font color for back
111
+ * @csspart front - Front of the card
112
+ * @csspart back - Back of the card
113
+ */
114
+ export class DemoWcCard extends LitElement {
115
+ static get properties() {
116
+ return {
117
+ backSide: {
118
+ type: Boolean,
119
+ reflect: true,
120
+ attribute: 'back-side',
121
+ },
122
+ header: { type: String },
123
+ rows: { type: Object },
124
+ };
125
+ }
126
+
127
+ static get styles() {
128
+ return demoWcCardStyle;
129
+ }
130
+
131
+ constructor() {
132
+ super();
133
+
134
+ /**
135
+ * Indicates that the back of the card is shown
136
+ */
137
+ this.backSide = false;
138
+
139
+ /**
140
+ * Header message
141
+ */
142
+ this.header = 'Your Message';
143
+
144
+ /**
145
+ * Data rows
146
+ */
147
+ this.rows = [];
148
+ }
149
+
150
+ toggle() {
151
+ this.backSide = !this.backSide;
152
+ }
153
+
154
+ render() {
155
+ return html`
156
+ <div id="front" part="front">
157
+ <div class="header">${this.header}</div>
158
+ <div class="content">
159
+ <slot></slot>
160
+ </div>
161
+ <div class="footer">
162
+ <div class="note">A</div>
163
+ <button @click=${this.toggle}>></button>
164
+ </div>
165
+ </div>
166
+ <div id="back" part="back">
167
+ <div class="header">${this.header}</div>
168
+
169
+ <div class="content">
170
+ ${this.rows.length === 0
171
+ ? html``
172
+ : html`
173
+ <dl>
174
+ ${this.rows.map(
175
+ (row) => html`
176
+ <dt>${row.header}</dt>
177
+ <dd>${row.value}</dd>
178
+ `
179
+ )}
180
+ </dl>
181
+ `}
182
+ </div>
183
+ <div class="footer">
184
+ <div class="note">B</div>
185
+ <button @click=${this.toggle}>></button>
186
+ </div>
187
+ </div>
188
+ `;
189
+ }
190
+
191
+ updated(changedProperties) {
192
+ if (changedProperties.has('backSide') && changedProperties.get('backSide') !== undefined) {
193
+ this.dispatchEvent(new CustomEvent('side-changed'));
194
+ }
195
+ }
196
+ }
197
+
198
+ // eslint-disable-next-line no-undef
199
+ customElements.define('input', DemoWcCard);
@@ -0,0 +1,61 @@
1
+ import { html } from 'lit';
2
+
3
+ export const Welcome = () => html`
4
+ <div class="main">
5
+ <h1>Welcome to Storybook for Web Components</h1>
6
+ <p>This is a UI component dev environment for your plain HTML snippets.</p>
7
+ <p>
8
+ We've added some basic stories inside the <code class="code">stories</code> directory.
9
+ <br />
10
+ A story is a single state of one or more UI components. You can have as many stories as you
11
+ want.
12
+ <br />
13
+ (Basically a story is like a visual test case.)
14
+ </p>
15
+ <p>
16
+ See these sample
17
+ <a class="link" href="#" data-sb-kind="Demo Card" data-sb-story="Front">stories</a>
18
+ </p>
19
+ <p>
20
+ Just like that, you can add your own snippets as stories.
21
+ <br />
22
+ You can also edit those snippets and see changes right away.
23
+ <br />
24
+ </p>
25
+ <p>
26
+ Usually we create stories with smaller UI components in the app.<br />
27
+ Have a look at the
28
+ <a class="link" href="https://storybook.js.org/basics/writing-stories" target="_blank">
29
+ Writing Stories
30
+ </a>
31
+ section in our documentation.
32
+ </p>
33
+ </div>
34
+
35
+ <style>
36
+ .main {
37
+ padding: 15px;
38
+ line-height: 1.4;
39
+ font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif;
40
+ background-color: #ffffff;
41
+ }
42
+
43
+ .logo {
44
+ width: 256px;
45
+ margin: 15px;
46
+ }
47
+
48
+ .code {
49
+ font-size: 15px;
50
+ font-weight: 600;
51
+ padding: 2px 5px;
52
+ border: 1px solid #eae9e9;
53
+ border-radius: 4px;
54
+ background-color: #f3f2f2;
55
+ color: #3a3a3a;
56
+ }
57
+ </style>
58
+ `;
59
+
60
+ // eslint-disable-next-line no-undef
61
+ customElements.define('input', Welcome);
@@ -0,0 +1,5 @@
1
+ /* eslint-disable no-underscore-dangle, @typescript-eslint/naming-convention */
2
+ declare var STORYBOOK_ENV: 'web-components';
3
+ declare var __STORYBOOK_CUSTOM_ELEMENTS_MANIFEST__: any;
4
+ declare var __STORYBOOK_CUSTOM_ELEMENTS__: any;
5
+ declare var LOGLEVEL: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent' | undefined;
@@ -51,8 +51,8 @@
51
51
  ],
52
52
  "slots": [
53
53
  {
54
- "description": "This is an unnamed slot (the default slot)",
55
- "name": ""
54
+ "name": "prefix",
55
+ "description": "Label prefix"
56
56
  }
57
57
  ],
58
58
  "members": [
@@ -69,7 +69,7 @@ export class DemoWcCard extends LitElement {
69
69
  </div>
70
70
  </div>
71
71
  <div id="back" part="back">
72
- <div class="header">${this.header}</div>
72
+ <div class="header"><slot name="prefix"></slot> ${this.header}</div>
73
73
 
74
74
  <div class="content">
75
75
  ${this.rows.length === 0
@@ -3,14 +3,22 @@ import './demo-wc-card';
3
3
 
4
4
  export default {
5
5
  component: 'demo-wc-card',
6
+ render: ({ backSide, header, rows, prefix }) =>
7
+ html`
8
+ <demo-wc-card .backSide="${backSide}" .header="${header}" .rows="${rows}"
9
+ ><span slot="prefix">${prefix}</span>A simple card</demo-wc-card
10
+ >
11
+ `,
6
12
  };
7
13
 
8
- const Template = ({ backSide, header, rows }) =>
9
- html`
10
- <demo-wc-card .backSide="${backSide}" .header="${header}" .rows="${rows}"
11
- >A simple card</demo-wc-card
12
- >
13
- `;
14
+ export const Front = {
15
+ args: { backSide: false, header: undefined, rows: [] },
16
+ };
17
+
18
+ export const Back = {
19
+ args: { backSide: true, header: undefined, rows: [] },
20
+ };
14
21
 
15
- export const Front = Template.bind({});
16
- Front.args = { backSide: false, header: undefined, rows: [] };
22
+ export const Prefix = {
23
+ args: { backSide: false, prefix: 'prefix:', header: 'my header', rows: [] },
24
+ };