@muraldevkit/ui-toolkit 1.0.0

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/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # shared-components
2
+ Shared React components for use across the Mural platform.
3
+
4
+ - [Component standards](./docs/component-standards.md)
@@ -0,0 +1 @@
1
+ export * from "./svg";
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { AttrsObject } from '../../../utils';
3
+ import { SVGSize } from '../constants';
4
+ export interface SvgPropTypes {
5
+ /** The theme associated to an SVG Component */
6
+ theme?: string;
7
+ /** The size of an SVG Component */
8
+ size?: SVGSize;
9
+ /** The SVG object to parse into an HTML SVG element */
10
+ svg: Record<string, unknown> | string;
11
+ /**
12
+ * Applies additional HTML attributes to the `svg` element.
13
+ * When using in a framework wrapper (e.g., React), treat it as an object and don't stringify.
14
+ * Otherwise, the value object needs to be stringified to not receive `"[Object object]"`.
15
+ * Example: `attrs='{ "data-foo": "bar" }'`
16
+ */
17
+ attrs?: AttrsObject | string;
18
+ isClone?: boolean;
19
+ }
20
+ /**
21
+ * Creating and exporting component class for Mural SVG
22
+ *
23
+ * @param {SvgPropTypes} props the props for your MrlSvg
24
+ * @returns {React.ReactElement} a rendered SVG
25
+ */
26
+ export declare const MrlSvg: (props: SvgPropTypes) => React.ReactElement;
@@ -0,0 +1,114 @@
1
+ /** Storybook configurations allowed for the SVG component. */
2
+ export interface SvgArgs {
3
+ color: string;
4
+ }
5
+ export declare const storyData: {
6
+ args: {
7
+ color: string;
8
+ size: import("./constants").SVGSize;
9
+ theme: string;
10
+ };
11
+ argTypes: {
12
+ color: {
13
+ control: {
14
+ type: string;
15
+ };
16
+ };
17
+ size: {
18
+ control: {
19
+ options: string[];
20
+ type: string;
21
+ };
22
+ };
23
+ theme: {
24
+ control: {
25
+ options: string[];
26
+ type: string;
27
+ };
28
+ };
29
+ };
30
+ manifest: {
31
+ scans: {
32
+ size: string[];
33
+ };
34
+ };
35
+ title: string;
36
+ };
37
+ export declare const iconStoryData: {
38
+ args: {
39
+ theme: string;
40
+ };
41
+ argTypes: {
42
+ theme: {
43
+ control: {
44
+ options: string[];
45
+ type: string;
46
+ };
47
+ };
48
+ };
49
+ manifest: {
50
+ exclude: {
51
+ default: string[];
52
+ };
53
+ scans: {
54
+ theme: string[];
55
+ };
56
+ };
57
+ title: string;
58
+ };
59
+ export declare const pictogramStoryData: {
60
+ args: {
61
+ theme: string;
62
+ };
63
+ argTypes: {
64
+ theme: {
65
+ control: {
66
+ options: string[];
67
+ type: string;
68
+ };
69
+ };
70
+ };
71
+ manifest: {
72
+ exclude: {
73
+ default: string[];
74
+ };
75
+ scans: {
76
+ theme: string[];
77
+ };
78
+ };
79
+ title: string;
80
+ };
81
+ export declare const visualThinkingContainerStyles: {
82
+ display: string;
83
+ flexDirection: string;
84
+ };
85
+ export declare const brandContainerStyles: {
86
+ background: string;
87
+ width: string;
88
+ };
89
+ export declare const headingStyles: {
90
+ marginTop: string;
91
+ };
92
+ export declare const colorPictoStoryData: {
93
+ args: {
94
+ state: string;
95
+ };
96
+ argTypes: {
97
+ state: {
98
+ control: {
99
+ options: string[];
100
+ type: string;
101
+ };
102
+ };
103
+ };
104
+ manifest: {
105
+ exclude: {
106
+ default: string[];
107
+ };
108
+ scans: {
109
+ state: string[];
110
+ };
111
+ };
112
+ name: string;
113
+ title: string;
114
+ };
@@ -0,0 +1,23 @@
1
+ import { AttrsObject } from '../../utils';
2
+ export type SVGSize = 'small' | 'medium' | 'large' | 'auto';
3
+ export interface SVGDefaults {
4
+ attrs: AttrsObject;
5
+ size: SVGSize;
6
+ theme: string;
7
+ }
8
+ interface AllowedValues {
9
+ sizes: Array<string>;
10
+ themes: Array<string>;
11
+ }
12
+ /**
13
+ * Defines all of values allowed for attributes with limited values;
14
+ * used for Storybook and testing
15
+ */
16
+ export declare const allowedValues: AllowedValues;
17
+ /**
18
+ * Default values for props on the SVG component;
19
+ * Shared between the component and Storybook
20
+ */
21
+ export declare const defaults: SVGDefaults;
22
+ export type SVGObject = Record<string, any>;
23
+ export {};
@@ -0,0 +1,2 @@
1
+ export { MrlSvg } from "./MrlSvg/MrlSvg";
2
+ export * from './constants';
@@ -0,0 +1,2 @@
1
+ export * from "./components";
2
+ export * from "./utils";
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ !function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("react"),require("classnames"));else if("function"==typeof define&&define.amd)define(["React","classnames"],r);else{var t="object"==typeof exports?r(require("react"),require("classnames")):r(e.React,e.classnames);for(var n in t)("object"==typeof exports?exports:e)[n]=t[n]}}(self,((e,r)=>(()=>{"use strict";var t={899:(e,r,t)=>{t.d(r,{Z:()=>i});var n=t(81),a=t.n(n),o=t(645),s=t.n(o)()(a());s.push([e.id,".MrlSvg--StPVX{--mrl-svg-size: var(--mrl-spacing-07)}.MrlSvg--small--zP1On{--mrl-svg-size: var(--mrl-spacing-06)}.MrlSvg--large--HeoAa{--mrl-svg-size: var(--mrl-spacing-10)}.MrlSvg--auto--w9gVr{--mrl-svg-size: 100%}.MrlSvg--StPVX{display:inline-block;fill:currentcolor;height:var(--mrl-svg-size);width:var(--mrl-svg-size)}.MrlSvg--StPVX *{pointer-events:none}.MrlSvg--auto--w9gVr{width:100%}",""]),s.locals={MrlSvg:"MrlSvg--StPVX","MrlSvg--small":"MrlSvg--small--zP1On","MrlSvg--large":"MrlSvg--large--HeoAa","MrlSvg--auto":"MrlSvg--auto--w9gVr"};const i=s},645:e=>{e.exports=function(e){var r=[];return r.toString=function(){return this.map((function(r){var t="",n=void 0!==r[5];return r[4]&&(t+="@supports (".concat(r[4],") {")),r[2]&&(t+="@media ".concat(r[2]," {")),n&&(t+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),t+=e(r),n&&(t+="}"),r[2]&&(t+="}"),r[4]&&(t+="}"),t})).join("")},r.i=function(e,t,n,a,o){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(n)for(var i=0;i<this.length;i++){var c=this[i][0];null!=c&&(s[c]=!0)}for(var l=0;l<e.length;l++){var u=[].concat(e[l]);n&&s[u[0]]||(void 0!==o&&(void 0===u[5]||(u[1]="@layer".concat(u[5].length>0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=o),t&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=t):u[2]=t),a&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=a):u[4]="".concat(a)),r.push(u))}},r}},81:e=>{e.exports=function(e){return e[1]}},379:e=>{var r=[];function t(e){for(var t=-1,n=0;n<r.length;n++)if(r[n].identifier===e){t=n;break}return t}function n(e,n){for(var o={},s=[],i=0;i<e.length;i++){var c=e[i],l=n.base?c[0]+n.base:c[0],u=o[l]||0,f="".concat(l," ").concat(u);o[l]=u+1;var p=t(f),d={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==p)r[p].references++,r[p].updater(d);else{var v=a(d,n);n.byIndex=i,r.splice(i,0,{identifier:f,updater:v,references:1})}s.push(f)}return s}function a(e,r){var t=r.domAPI(r);return t.update(e),function(r){if(r){if(r.css===e.css&&r.media===e.media&&r.sourceMap===e.sourceMap&&r.supports===e.supports&&r.layer===e.layer)return;t.update(e=r)}else t.remove()}}e.exports=function(e,a){var o=n(e=e||[],a=a||{});return function(e){e=e||[];for(var s=0;s<o.length;s++){var i=t(o[s]);r[i].references--}for(var c=n(e,a),l=0;l<o.length;l++){var u=t(o[l]);0===r[u].references&&(r[u].updater(),r.splice(u,1))}o=c}}},569:e=>{var r={};e.exports=function(e,t){var n=function(e){if(void 0===r[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}r[e]=t}return r[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(t)}},216:e=>{e.exports=function(e){var r=document.createElement("style");return e.setAttributes(r,e.attributes),e.insert(r,e.options),r}},565:(e,r,t)=>{e.exports=function(e){var r=t.nc;r&&e.setAttribute("nonce",r)}},795:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var r=e.insertStyleElement(e);return{update:function(t){!function(e,r,t){var n="";t.supports&&(n+="@supports (".concat(t.supports,") {")),t.media&&(n+="@media ".concat(t.media," {"));var a=void 0!==t.layer;a&&(n+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),n+=t.css,a&&(n+="}"),t.media&&(n+="}"),t.supports&&(n+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),r.styleTagTransform(n,e,r.options)}(r,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(r)}}}},589:e=>{e.exports=function(e,r){if(r.styleSheet)r.styleSheet.cssText=e;else{for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(document.createTextNode(e))}}},200:e=>{e.exports=r},639:r=>{r.exports=e}},n={};function a(e){var r=n[e];if(void 0!==r)return r.exports;var o=n[e]={id:e,exports:{}};return t[e](o,o.exports,a),o.exports}a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return a.d(r,{a:r}),r},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nc=void 0;var o={};return(()=>{a.r(o),a.d(o,{MrlSvg:()=>N,allowedValues:()=>v,defaults:()=>m,getCamelCase:()=>s,getUniqueId:()=>d,isObject:()=>i,setAttributes:()=>f,setClasses:()=>u});var e=a(639),r=a.n(e),t=a(200),n=a.n(t),s=function(e){return e.trim().replace(/[-_]+/g," ").replace(/[`"',.;:?!@#$%^&*()~[\]{}|/\\<>]+/g,"").replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,(function(e,r){return 0==+e?"":0===r?e.toLowerCase():e.toUpperCase()}))},i=function(e){return(!e||!Array.isArray(e))&&e instanceof Object},c=function(){return c=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},c.apply(this,arguments)},l=function(e){try{return JSON.parse(e)}catch(r){return console.error("The attrs property is not properly-formatted JSON:"),console.error(e),console.error(r),r}},u=function(e,r){var t,n="string"==typeof e?l(e):e;return i(n)&&n.class?c(((t={})["".concat(n.class)]=void 0!==n.class&&n.class.length>0,t),r):r},f=function(e,r,t){void 0===r&&(r={});var a="string"==typeof e?l(e):e;return a?Object.assign({},r,a,{class:n()(t,a.class)}):{}},p=0,d=function(e){return void 0===e&&(e="mrl"),p++,"".concat(e,"-").concat(p)},v={sizes:["medium","small","large","auto"],themes:["classic","default"]},m={attrs:{role:"presentation"},size:"medium",theme:"default"},g=a(379),y=a.n(g),h=a(795),b=a.n(h),S=a(569),M=a.n(S),O=a(565),x=a.n(O),w=a(216),j=a.n(w),A=a(589),P=a.n(A),C=a(899),T={};T.styleTagTransform=P(),T.setAttributes=x(),T.insert=M().bind(null,"head"),T.domAPI=b(),T.insertStyleElement=j(),y()(C.Z,T);const E=C.Z&&C.Z.locals?C.Z.locals:void 0;var z=function(){return z=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var a in r=arguments[t])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e},z.apply(this,arguments)},N=function(e){var t,a=e.theme,o=e.size,c=void 0===o?"medium":o,l=e.svg,p=e.attrs,v=void 0===p?{}:p,g=e.isClone,y="There has been an issue rendering your SVG!",h=function(e,t,a){if(void 0===t&&(t={}),"text"===e.type)return e.value;var o=e.name,i=e.attributes||{};return Object.keys(i).forEach((function(e){var r="data-"===e.slice(0,5)?e:s(e);i[r]=i[e],e!==r&&delete i[e]})),"svg"===o?r().createElement("svg",z({},i,t,{className:n()(a),key:d()}),Array.isArray(e.children)&&e.children.map((function(e){return h(e)}))):r().createElement(o,z({},i,{key:d()}),Array.isArray(e.children)&&e.children.map((function(e){return h(e)})))},b=function(e,t,o,s){void 0===t&&(t={});var i=""===o?"This icon":o,c=Object.keys(e).length>0?"".concat(i," has no '").concat(a,"' theme found! Please try another SVG or theme."):"No valid themes found.";return console.warn(y),console.warn(c),r().createElement("span",z({className:n()(s)},t))};if(void 0!==g&&g)return r().createElement("span",null);if(!l)return r().createElement("span",null);var S=f(v,m.attrs),M=u(v,((t={})[E.MrlSvg]=!0,t[E["MrlSvg--".concat(c)]]="medium"!==c,t));delete S.class;var O="string"==typeof l;if(O&&!function(e){try{JSON.parse(e)}catch(r){return console.warn("".concat(y," Invalid SVG code:")),console.warn(e),!1}return!0}(l))return r().createElement("span",null);var x=O?JSON.parse(l):l,w=Object.keys(x),j=function(e){var r=e.indexOf("default")>=0,t=e.indexOf("rebrand")>=0;return"rebrand"!==a||t?a&&""!==a?a:r?"default":null:"default"}(w);return j&&""!==j?x[j]?h(x[j],S,M):i(x[w[0]])?b(x,S,x[w[0]].attributes["data-mrl-svg-name"],M):b(x):h(x,S,M)}})(),o})()));
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Takes a string and returns a camelCase version of the string
3
+ *
4
+ * @param {string} str - a string to set to camelCase
5
+ * @returns {string} - a string with special characters spaces removed, where words after a space are Uppercase leading
6
+ */
7
+ export declare const getCamelCase: (str: string) => string;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { getCamelCase } from './getCamelCase';
2
+ export { getCamelCase };
@@ -0,0 +1,3 @@
1
+ export * from './getCamelCase';
2
+ export * from './isObject';
3
+ export * from './setAttributes';
@@ -0,0 +1,2 @@
1
+ import { Item, isObject } from "./isObject";
2
+ export { type Item, isObject };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Item is passed to the `isObject` function.
3
+ * Since we want to be able to check if anything is an object, we allow
4
+ * anything to be passed to the function.
5
+ */
6
+ export type Item = unknown;
7
+ /**
8
+ * Tests that a variable is actually an object and not an array or null
9
+ * which can mistakenly be flagged as an object
10
+ *
11
+ * @param {Item} item - variable to tests
12
+ * @returns {boolean} - value if item is actually an Object
13
+ */
14
+ export declare const isObject: (item: Item) => boolean;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { AttrsObject, ClassObject, getUniqueId, setAttributes, setClasses } from './setAttributes';
2
+ export { type AttrsObject, type ClassObject, getUniqueId, setAttributes, setClasses };
@@ -0,0 +1,33 @@
1
+ export type AttrsObject = Record<string, any>;
2
+ /**
3
+ * Object that contains all of the classes that can be applied to an element
4
+ * and a condition that determines if that instance should have it
5
+ * applied or not. The structure is:
6
+ * "my-class": !theConditional
7
+ */
8
+ export type ClassObject = Record<string, boolean>;
9
+ /**
10
+ * Sets up a classObject to be used by the className prop
11
+ *
12
+ * @todo - 2563 - use setClasses across components
13
+ * @param {string} customClasses - custom classes to apply via the attrs prop
14
+ * @param {ClassObject} defaultClasses - design system component classes to apply
15
+ * @returns {ClassObject} - with all classes
16
+ */
17
+ export declare const setClasses: (customClasses: AttrsObject | string, defaultClasses: ClassObject) => ClassObject;
18
+ /**
19
+ * Set an object of attributes to be used in a given component.
20
+ *
21
+ * @param {AttrsObject | string} attributes - the custom attributes passed to the component
22
+ * @param {AttrsObject} [defaults={}] - an optional object of the default attributes of a component
23
+ * @param {string} className - default classes to apply to the component
24
+ * @returns {AttrsObject} - an object of component attributes
25
+ */
26
+ export declare const setAttributes: (attributes: AttrsObject | string, defaults?: AttrsObject, className?: string) => AttrsObject;
27
+ /**
28
+ * Generates unique identifier
29
+ *
30
+ * @param {string} prefix - prefix for identifier
31
+ * @returns {string} - prefixed unique identifier
32
+ */
33
+ export declare const getUniqueId: (prefix?: string) => string;
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "@muraldevkit/ui-toolkit",
3
+ "version": "1.0.0",
4
+ "description": "Mural's UI Toolkit",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "webpack --mode=production",
13
+ "compile": "storybook build",
14
+ "dev": "npm run compile && npm run serve",
15
+ "lint": "npm run lint:scripts && npm run lint:styles",
16
+ "lint:config": "eslint '.storybook/*.{js,jsx,ts,tsx}'",
17
+ "lint:config:fix": "eslint '.storybook/*.{js,jsx,ts,tsx}' --fix",
18
+ "lint:fix": "npm run lint:scripts:fix && npm run lint:styles:fix",
19
+ "lint:scripts": "eslint '**/*.{js,jsx,ts,tsx}'",
20
+ "lint:styles": "stylelint src/components/**/*.{css,scss}",
21
+ "lint:scripts:fix": "eslint '**/*.{js,jsx,ts,tsx}' --fix",
22
+ "lint:styles:fix": "stylelint --fix src/components/**/*.{css,scss}",
23
+ "prebuild": "rimraf dist",
24
+ "prepare": "husky install",
25
+ "publish:local": "npm run build && npm pack",
26
+ "release": "npx semantic-release",
27
+ "serve": "storybook dev -p 6006",
28
+ "test": "jest",
29
+ "test:scan": "npx test-storybook --maxWorkers=2",
30
+ "test:watch": "jest --watchAll",
31
+ "test:updateSnapshot": "jest --updateSnapshot"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "license": "https://www.mural.co/terms/developer-addendum",
37
+ "peerDependencies": {
38
+ "@muraldevkit/ds-foundation": ">=1.4.0",
39
+ "@muraldevkit/ds-icons": "1.1.0",
40
+ "@muraldevkit/ds-utilities": "1.0.3",
41
+ "classnames": "2.2.5",
42
+ "react": ">=16.9",
43
+ "react-dom": ">=16.9"
44
+ },
45
+ "devDependencies": {
46
+ "@babel/core": "7.21.4",
47
+ "@babel/node": "7.20.7",
48
+ "@babel/plugin-proposal-class-properties": "7.18.6",
49
+ "@babel/preset-env": "7.21.4",
50
+ "@babel/preset-react": "7.18.6",
51
+ "@babel/preset-typescript": "7.21.4",
52
+ "@muraldevkit/ds-foundation": "1.4.0",
53
+ "@storybook/addon-a11y": "7.0.12",
54
+ "@storybook/addon-essentials": "7.0.12",
55
+ "@storybook/addon-interactions": "7.0.12",
56
+ "@storybook/addon-links": "7.0.12",
57
+ "@storybook/blocks": "7.0.12",
58
+ "@storybook/react": "7.0.12",
59
+ "@storybook/react-webpack5": "7.0.12",
60
+ "@storybook/test-runner": "0.10.0",
61
+ "@storybook/testing-library": "0.0.14-next.2",
62
+ "@testing-library/dom": "7.31.0",
63
+ "@testing-library/jest-dom": "5.16.5",
64
+ "@testing-library/react": "12.1.2",
65
+ "@testing-library/user-event": "13.1.9",
66
+ "@types/classnames": "2.2.5",
67
+ "@types/jest": "29.5.1",
68
+ "@types/react": "16.8.25",
69
+ "@types/react-dom": "16.9.0",
70
+ "@typescript-eslint/eslint-plugin": "4.33.0",
71
+ "@typescript-eslint/parser": "4.33.0",
72
+ "axe-playwright": "1.2.3",
73
+ "babel-loader": "9.1.2",
74
+ "css-loader": "6.7.3",
75
+ "eslint": "7.32.0",
76
+ "eslint-config-prettier": "8.6.0",
77
+ "eslint-plugin-import": "2.26.0",
78
+ "eslint-plugin-jsdoc": "39.6.4",
79
+ "eslint-plugin-jsx-a11y": "6.7.1",
80
+ "eslint-plugin-prettier": "3.4.1",
81
+ "eslint-plugin-react": "7.31.11",
82
+ "eslint-plugin-react-hooks": "4.6.0",
83
+ "file-loader": "6.2.0",
84
+ "html-webpack-plugin": "5.5.1",
85
+ "husky": "^8.0.0",
86
+ "identity-obj-proxy": "3.0.0",
87
+ "jest": "29.5.0",
88
+ "jest-environment-jsdom": "29.5.0",
89
+ "path": "^0.12.7",
90
+ "prettier": "2.8.8",
91
+ "prop-types": "^15.8.1",
92
+ "rimraf": "5.0.0",
93
+ "sass": "1.62.1",
94
+ "sass-loader": "13.2.2",
95
+ "semantic-release": "19.0.5",
96
+ "storybook": "7.0.12",
97
+ "style-loader": "^3.3.2",
98
+ "stylelint": "14.16.1",
99
+ "stylelint-config-prettier": "9.0.4",
100
+ "stylelint-config-standard": "29.0.0",
101
+ "stylelint-config-standard-scss": "6.1.0",
102
+ "stylelint-order": "6.0.0",
103
+ "stylelint-sassdoc": "0.4.2",
104
+ "stylelint-scss": "4.6.0",
105
+ "ts-jest": "29.1.0",
106
+ "ts-loader": "9.4.2",
107
+ "webpack": "5.80.0",
108
+ "webpack-cli": "5.0.1",
109
+ "webpack-dev-server": "4.13.3"
110
+ },
111
+ "dependencies": {
112
+ "classnames": "2.2.5",
113
+ "react": ">=16.9",
114
+ "react-dom": ">=16.9",
115
+ "typescript": "5.0.4"
116
+ }
117
+ }