Skip to content

Commit

Permalink
feat(chat-button): experimental wc (carbon-design-system#11510)
Browse files Browse the repository at this point in the history
### Related Ticket(s)

Closes carbon-design-system#11498 
### Description

create cwc chat button

### Changelog

**New**

- chat button, chat button skeleton, examples, stories, readme

<!-- React and Web Component deploy previews are enabled by default. -->
<!-- To enable additional available deploy previews, apply the following -->
<!-- labels for the corresponding package: -->
<!-- *** "test: e2e": Codesandbox examples and e2e integration tests -->
<!-- *** "package: services": Services -->
<!-- *** "package: utilities": Utilities -->
<!-- *** "RTL": React / Web Components (RTL) -->
<!-- *** "feature flag": React / Web Components (experimental) -->
  • Loading branch information
ariellalgilmore authored Feb 12, 2024
1 parent 2d22385 commit a1560a5
Show file tree
Hide file tree
Showing 24 changed files with 542 additions and 40 deletions.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"presets": [
[
"@babel/preset-env",
{
"modules": false,
"targets": [
"last 1 version",
"Firefox ESR",
"not opera > 0",
"not op_mini > 0",
"not op_mob > 0",
"not android > 0",
"not edge > 0",
"not ie > 0",
"not ie_mob > 0"
]
}
]
],
"plugins": [["@babel/plugin-transform-runtime", { "version": "7.3.0" }]]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.

# dependencies
/node_modules

# testing
/coverage

# production
/build

# misc
.DS_Store
.cache
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"includePaths": [
"node_modules",
"../../node_modules"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!--
@license
Copyright IBM Corp. 2020
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->

<html>
<head>
<title>@carbon/ibmdotcom-web-components example</title>
<meta charset="UTF-8"/>
<link rel="stylesheet"
href="https://1.www.s81c.com/common/carbon-for-ibm-dotcom/tag/v1/latest/plex.css"/>
<link rel="stylesheet" href="https://1.www.s81c.com/common/carbon/web-components/tag/v2/latest/grid.css" />
<link rel="stylesheet" href="https://1.www.s81c.com/common/carbon/web-components/tag/v2/latest/themes.css" />
<style>
/* Suppress custom element until styles are loaded */
cds-chat-button:not(:defined) {
display: none;
}
</style>
<script type="module" src="https://1.www.s81c.com/common/carbon/web-components/tag/v2/latest/chat-button.min.js"></script>
</head>
<body class="cds-theme-zone-white">
<cds-chat-button>
Chat button
</cds-chat-button>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!--
@license
Copyright IBM Corp. 2020
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->

<html>
<head>
<title>carbon-web-components example</title>
<meta charset="UTF-8" />
<link rel="stylesheet"
href="https://1.www.s81c.com/common/carbon-for-ibm-dotcom/tag/v1/latest/plex.css"/>

<link rel="stylesheet" href="src/styles.scss" />
<style>
/* Suppress custom element until styles are loaded */
cds-chat-button:not(:defined) {
display: none;
}
</style>
<script type="module" src="src/index.js"></script>
</head>
<body>
<cds-chat-button>
Chat button
</cds-chat-button>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "carbon-web-components-chat-button-example",
"version": "0.1.0",
"private": true,
"description": "Sample project for getting started with the Web Components from Carbon.",
"license": "Apache-2",
"main": "index.html",
"scripts": {
"build": "parcel build *.html --no-minify --public-url ./",
"clean": "rimraf node_modules dist .cache",
"start": "parcel index.html --port=9000 --no-hmr"
},
"dependencies": {
"@carbon/styles": "^1.34.0",
"@carbon/web-components": "latest",
"sass": "^1.64.1"
},
"devDependencies": {
"@babel/core": "^7.0.0-0",
"parcel-bundler": "1.12.3",
"rimraf": "^3.0.2"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"template": "node"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* @license
*
* Copyright IBM Corp. 2020, 2024
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/

import '@carbon/web-components/es/components/chat-button/index.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* @license
*
* Copyright IBM Corp. 2020, 2024
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/

@use '@carbon/styles/scss/reset';
@use '@carbon/styles/scss/theme';
@use '@carbon/styles/scss/themes';

@use '@carbon/styles/scss/components/button/tokens' as button-tokens;
@include theme.add-component-tokens(button-tokens.$button-tokens);


:root {
@include theme.theme(themes.$white);
background-color: var(--cds-background);
color: var(--cds-text-primary);
}
2 changes: 1 addition & 1 deletion packages/carbon-web-components/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"dependencies": {
"@babel/runtime": "^7.16.3",
"@carbon/ibm-products-styles": "2.20.1",
"@carbon/styles": "1.49.0",
"@carbon/styles": "1.50.0",
"flatpickr": "4.6.1",
"lit": "^2.7.6",
"lodash-es": "^4.17.21"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ $css--plex: true !default;
@use '@carbon/styles/scss/components/popover/index';
@use '@carbon/styles/scss/components/code-snippet/code-snippet' as *;
@use '@carbon/styles/scss/components/tooltip';
@use '@carbon/styles/scss/components/chat-button' as *;
@use '@carbon/styles/scss/layout' as *;

@include code-snippet;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @license
*
* Copyright IBM Corp. 2019, 2024
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/

import { classMap } from 'lit/directives/class-map.js';
import { LitElement, html } from 'lit';
import { property } from 'lit/decorators.js';
import { prefix } from '../../globals/settings';
import { CHAT_BUTTON_SIZE } from './defs';
import styles from './chat-button.scss';
import { carbonElement as customElement } from '../../globals/decorators/carbon-element';

export { CHAT_BUTTON_SIZE };
/**
* Chat button skeleton.
*
* @element cds-chat-button-skeleton
*/
@customElement(`${prefix}-chat-button-skeleton`)
class CDSChatButtonSkeleton extends LitElement {
/**
* Specify the size of the `ChatButtonSkeleton`, from the following list of sizes: 'sm', 'md', 'lg'
*/
@property({ reflect: true })
size = CHAT_BUTTON_SIZE.LARGE;

render() {
const skeletonClasses = classMap({
[`${prefix}--skeleton`]: true,
[`${prefix}--btn`]: true,
[`${prefix}--chat-btn`]: true,
[`${prefix}--layout--size-${this.size}`]: this.size,
});

return html` <div class="${skeletonClasses}"></div> `;
}

static styles = styles;
}

export default CDSChatButtonSkeleton;
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { Props, Description } from '@storybook/addon-docs/blocks';
import { cdnJs, cdnCss } from '../../globals/internal/storybook-cdn';

# Chat Button

> 💡 Check our
> [CodeSandbox](https://codesandbox.io/s/github/carbon-design-system/carbon-for-ibm-dotcom/tree/main/packages/carbon-web-components/examples/codesandbox/basic/components/chat-button)
> example implementation.
[![Edit carbon-web-components](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/carbon-design-system/carbon-for-ibm-dotcom/tree/main/packages/carbon-web-components/examples/codesandbox/basic/components/chat-button)

## Getting started

Here's a quick example to get you started.

### JS (via import)

```javascript
import '@carbon/web-components/es/components/chat-button/index.js';
```

<Description markdown={`${cdnJs({ components: ['chat-button'] })}`} />
<Description markdown={`${cdnCss()}`} />

```javascript
import '@carbon/web-components/es/components/chat-button/index.js';
import Add16 from '@carbon/web-components/es/icons/add/16';

function App() {
return html`<cds-chat-button>
Primary ${Add16({ slot: 'icon' })}
</cds-chat-button>`;
}
```

## `<cds-chat-button>` attributes and properties

<Props of="cds-chat-button" />
````
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// Copyright IBM Corp. 2019, 2024
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//
div[class*='test-button-'] {
margin-block-end: 4rem;

/* stylelint-disable */
& > * {
margin-inline-end: 2rem;
}
/* stylelint-enable */
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/**
* @license
*
* Copyright IBM Corp. 2019, 2024
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/

import { html } from 'lit';
import './index';
import storyDocs from './chat-button-story.mdx';
import Add16 from '@carbon/icons/lib/add/16';
import styles from './chat-button-story.scss';

export const Default = () => {
return html`
<style>
${styles}
</style>
<div class="test-button">
<div class="test-button-sizes">
<h3>Sizes</h3>
<br />
<cds-chat-button size="sm">
Primary ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button size="md">
Primary ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button size="lg">
Primary ${Add16({ slot: 'icon' })}
</cds-chat-button>
</div>
<div class="test-button-kinds">
<h3>Kinds</h3>
<br />
<cds-chat-button kind="primary">
Primary ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button kind="secondary">
Secondary ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button kind="tertiary">
Tertiary ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button kind="ghost">
Ghost ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button kind="danger">
Danger ${Add16({ slot: 'icon' })}
</cds-chat-button>
</div>
<div class="test-button-quick-action">
<h3>Quick action</h3>
<br />
<cds-chat-button is-quick-action>
Quick action ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button is-quick-action is-selected>
Selected and Enabled ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button is-quick-action is-selected disabled>
Selected and disabled ${Add16({ slot: 'icon' })}
</cds-chat-button>
<cds-chat-button is-quick-action disabled>
Disabled ${Add16({ slot: 'icon' })}
</cds-chat-button>
</div>
<div class="test-button-skeleton">
<h3>Skeleton</h3>
<br />
<cds-chat-button-skeleton size="sm"></cds-chat-button-skeleton>
<cds-chat-button-skeleton size="md"></cds-chat-button-skeleton>
<cds-chat-button-skeleton size="lg"></cds-chat-button-skeleton>
</div>
</div>
`;
};

export default {
parameters: {
...storyDocs.parameters,
},
title: 'Experimental/Chat button',
decorators: [(story) => html` ${story()} `],
};
Loading

0 comments on commit a1560a5

Please sign in to comment.