@emulsify/core 0.0.0-development
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/.cli/init.js +168 -0
- package/.editorconfig +5 -0
- package/.eslintignore +2 -0
- package/.github/ISSUE_TEMPLATE/BUG_REPORT_TEMPLATE.md +18 -0
- package/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_TEMPLATE.md +11 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +19 -0
- package/.github/dependabot.yml +6 -0
- package/.github/workflows/addtoprojects.yml +21 -0
- package/.github/workflows/contributors.yml +23 -0
- package/.github/workflows/lint.yml +22 -0
- package/.github/workflows/semantic-release.yml +24 -0
- package/.history/.releaserc_20240607133550 +11 -0
- package/.history/.releaserc_20240607134831 +18 -0
- package/.history/.releaserc_20240607135005 +11 -0
- package/.history/package_20240607132936.json +121 -0
- package/.history/package_20240607135135.json +121 -0
- package/.history/package_20240607135150.json +121 -0
- package/.history/package_20240607135242.json +124 -0
- package/.history/package_20240607135251.json +124 -0
- package/.history/package_20240607135337.json +127 -0
- package/.history/package_20240607145546.json +135 -0
- package/.husky/commit-msg +4 -0
- package/.husky/pre-commit +4 -0
- package/.nvmrc +1 -0
- package/.prettierignore +4 -0
- package/.storybook/_drupal.js +27 -0
- package/.storybook/emulsifyTheme.js +38 -0
- package/.storybook/main.js +22 -0
- package/.storybook/manager-head.html +122 -0
- package/.storybook/manager.js +15 -0
- package/.storybook/preview.js +40 -0
- package/.storybook/setupTwig.js +59 -0
- package/.storybook/setupTwig.test.js +33 -0
- package/.storybook/webpack.config.js +67 -0
- package/CODE_OF_CONDUCT.md +56 -0
- package/LICENSE +674 -0
- package/README.md +72 -0
- package/assets/images/corner-bkg.png +0 -0
- package/assets/images/emulsify-logo-sb.svg +8 -0
- package/assets/images/logo.png +0 -0
- package/commitlint.config.js +3 -0
- package/config/.prettierrc.json +4 -0
- package/config/.stylelintrc.json +61 -0
- package/config/a11y.config.js +61 -0
- package/config/babel.config.js +18 -0
- package/config/eslintrc.config.json +68 -0
- package/config/jest.config.js +19 -0
- package/config/postcss.config.js +5 -0
- package/config/webpack/app.js +1 -0
- package/config/webpack/css/style.js +1 -0
- package/config/webpack/css.js +1 -0
- package/config/webpack/loaders.js +87 -0
- package/config/webpack/plugins.js +48 -0
- package/config/webpack/svgSprite.js +5 -0
- package/config/webpack/webpack.common.js +72 -0
- package/config/webpack/webpack.dev.js +7 -0
- package/config/webpack/webpack.prod.js +6 -0
- package/package.json +136 -0
- package/release.config.js +11 -0
- package/scripts/a11y.js +92 -0
- package/scripts/a11y.test.js +159 -0
- package/scripts/loadYaml.js +17 -0
- package/scripts/loadYaml.test.js +30 -0
package/.cli/init.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Returns a boolean indicating whether or not the given object is a literal object.
|
|
9
|
+
*
|
|
10
|
+
* @param {any} obj object who's type will be checked.
|
|
11
|
+
* @returns {boolean} boolean indicating whether or not the given obj is a literal object.
|
|
12
|
+
*/
|
|
13
|
+
const isObjectLiteral = (obj) =>
|
|
14
|
+
obj != null && obj.constructor.name === 'Object';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Attempts to require the project.emulsify.json file.
|
|
18
|
+
*
|
|
19
|
+
* @returns parsed project.emulsify.json file.
|
|
20
|
+
*/
|
|
21
|
+
const getEmulsifyConfig = () => {
|
|
22
|
+
try {
|
|
23
|
+
return require('../config/project.emulsify.json');
|
|
24
|
+
} catch (e) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
`Unable to load an Emulsify project config file (project.emulsify.json): ${String(
|
|
27
|
+
e,
|
|
28
|
+
)}`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Throws if the given emulsify config file is invalid.
|
|
35
|
+
*
|
|
36
|
+
* @param {*} config emulsify project config, as loaded from a project.emulsify.json file.
|
|
37
|
+
*/
|
|
38
|
+
const validateEmulsifyConfig = (config) => {
|
|
39
|
+
const prefix = 'Invalid project.emulsify.json config file';
|
|
40
|
+
const example = JSON.stringify({
|
|
41
|
+
project: {
|
|
42
|
+
name: 'Example Project',
|
|
43
|
+
machineName: 'example-project',
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
if (!config) {
|
|
48
|
+
throw new Error(`${prefix}.`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (!config.project || !isObjectLiteral(config.project)) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`${prefix}: Must contain a "project" key, with a name and machineName property. ${example}`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (typeof config.project.name !== 'string') {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`${prefix}: the "project" object must contain a "name" key with a string value. ${example}`,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (typeof config.project.machineName !== 'string') {
|
|
64
|
+
throw new Error(
|
|
65
|
+
`${prefix}: the "project" object must contain a "machineName" key with a string value. ${example}`,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Takes an array of objects describing the origin and destination of a given file,
|
|
72
|
+
* then moves each specified file according to it's to/from properties.
|
|
73
|
+
*
|
|
74
|
+
* @param {Array<{ to: string, from: string }>} files array of objects depicting the origin and destination of a given file.
|
|
75
|
+
* @returns void.
|
|
76
|
+
*/
|
|
77
|
+
const renameFiles = (files) =>
|
|
78
|
+
files.map(({ from, to }) =>
|
|
79
|
+
fs.renameSync(path.join(__dirname, from), path.join(__dirname, to)),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Takes a machineName, and returns a fn that, when called with a str,
|
|
84
|
+
* replaces all instances of `emulsify` with the given machineName.
|
|
85
|
+
*
|
|
86
|
+
* @param {string} machineName string that should replace emulsify.
|
|
87
|
+
* @returns {function} fn that when called with a str, replaces all instances of `emulsify` with the given machineName.
|
|
88
|
+
*/
|
|
89
|
+
const strReplaceEmulsify = (machineName) => (str) =>
|
|
90
|
+
str.replace(/emulsify/g, machineName);
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Loads a yml file at filePath, applies the functor to the contents of the file, and writes it.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} filePath path to the file that should be loaded, modified, and re-saved.
|
|
96
|
+
* @param {fn} functor fn that should return the new contents of the file, to be saved.
|
|
97
|
+
* @returns void.
|
|
98
|
+
*/
|
|
99
|
+
const applyToYmlFile = (filePath, functor) => {
|
|
100
|
+
if (!filePath || typeof filePath !== `string`) {
|
|
101
|
+
throw new Error(
|
|
102
|
+
`Cannot modify a file without knowing how to access it: ${filePath}`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
if (typeof functor !== 'function') {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const file = yaml.load(fs.readFileSync(filePath, 'utf8'));
|
|
110
|
+
fs.writeFileSync(filePath, yaml.dump(functor(file)));
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const main = () => {
|
|
114
|
+
// Load up config file, throw if none exists.
|
|
115
|
+
const config = getEmulsifyConfig();
|
|
116
|
+
|
|
117
|
+
// Validate config file, throw if it is missing
|
|
118
|
+
//properties or is otherwise malformed.
|
|
119
|
+
validateEmulsifyConfig(config);
|
|
120
|
+
|
|
121
|
+
const {
|
|
122
|
+
project: { machineName, name },
|
|
123
|
+
} = config;
|
|
124
|
+
|
|
125
|
+
// Move all files to their correct location.
|
|
126
|
+
renameFiles([
|
|
127
|
+
{
|
|
128
|
+
from: '../emulsify.info.yml',
|
|
129
|
+
to: `../${machineName}.info.yml`,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
from: '../emulsify.theme',
|
|
133
|
+
to: `../${machineName}.theme`,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
from: '../emulsify.breakpoints.yml',
|
|
137
|
+
to: `../${machineName}.breakpoints.yml`,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
from: '../emulsify.libraries.yml',
|
|
141
|
+
to: `../${machineName}.libraries.yml`,
|
|
142
|
+
},
|
|
143
|
+
]);
|
|
144
|
+
|
|
145
|
+
// Update info.yml file.
|
|
146
|
+
applyToYmlFile(
|
|
147
|
+
path.join(__dirname, `../${machineName}.info.yml`),
|
|
148
|
+
(info) => ({
|
|
149
|
+
...info,
|
|
150
|
+
name: machineName,
|
|
151
|
+
libraries: info.libraries.map(strReplaceEmulsify(machineName)),
|
|
152
|
+
}),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
// Update breakpoint.yml file.
|
|
156
|
+
applyToYmlFile(
|
|
157
|
+
path.join(__dirname, `../${machineName}.breakpoints.yml`),
|
|
158
|
+
(breakpoints) => {
|
|
159
|
+
const newBps = {};
|
|
160
|
+
for (const prop of Object.keys(breakpoints)) {
|
|
161
|
+
newBps[strReplaceEmulsify(machineName)(prop)] = breakpoints[prop];
|
|
162
|
+
}
|
|
163
|
+
return newBps;
|
|
164
|
+
},
|
|
165
|
+
);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
main();
|
package/.editorconfig
ADDED
package/.eslintignore
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
### Describe the bug
|
|
2
|
+
_A clear and concise description of what the bug is._
|
|
3
|
+
|
|
4
|
+
### Steps to reproduce the bug
|
|
5
|
+
Steps to reproduce the behavior:
|
|
6
|
+
1. Go to '...'
|
|
7
|
+
2. Click on '....'
|
|
8
|
+
3. Scroll down to '....'
|
|
9
|
+
4. See error
|
|
10
|
+
|
|
11
|
+
### Expected behavior
|
|
12
|
+
A clear and concise description of what you expected to happen.
|
|
13
|
+
|
|
14
|
+
### Suggested solution or approach:
|
|
15
|
+
_(optional) Describe a solution or approach to your request that may help with implementation._
|
|
16
|
+
|
|
17
|
+
### Additional context
|
|
18
|
+
_(optional) Add any other context or screenshots about the feature request here._
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
### Emulsify Core Version:
|
|
2
|
+
- [1.0.0](https://github.com/emulsify-ds/emulsify-core/releases)):
|
|
3
|
+
|
|
4
|
+
### Description of the feature request:
|
|
5
|
+
_Please give as much information as possible_
|
|
6
|
+
|
|
7
|
+
### Suggested solution or approach:
|
|
8
|
+
_(optional) Describe a solution or approach to your request that may help with implementation._
|
|
9
|
+
|
|
10
|
+
### Additional context:
|
|
11
|
+
_(optional) Add any other context or screenshots about the feature request here._
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
**This PR does the following:**
|
|
2
|
+
- Adds functionality bullet item
|
|
3
|
+
- Fixes this or that bullet item
|
|
4
|
+
|
|
5
|
+
### Related Issue(s)
|
|
6
|
+
- [Title of the issue](https://github.com/emulsify-ds/emulsify-core/issues/1)
|
|
7
|
+
|
|
8
|
+
### Notes:
|
|
9
|
+
- (optional) Document any intentionally unfinished parts or known issues within this PR
|
|
10
|
+
|
|
11
|
+
### Functional Testing:
|
|
12
|
+
- [ ] Document steps that allow someone to fully test your code changes. Include screenshot and links when appropriate.
|
|
13
|
+
|
|
14
|
+
### Security
|
|
15
|
+
_Security checks that should be reviewed_
|
|
16
|
+
|
|
17
|
+
### Accessibility
|
|
18
|
+
_Should this be checked for this feature?_
|
|
19
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Add to projects
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issues:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
pull_request:
|
|
8
|
+
types:
|
|
9
|
+
- opened
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
add-to-project:
|
|
13
|
+
name: Add issue to project
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/add-to-project@v0.3.0
|
|
17
|
+
with:
|
|
18
|
+
# You can target a repository in a different organization
|
|
19
|
+
# to the issue
|
|
20
|
+
project-url: https://github.com/orgs/emulsify-ds/projects/6
|
|
21
|
+
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Add contributors
|
|
2
|
+
on:
|
|
3
|
+
schedule:
|
|
4
|
+
- cron: "20 20 * * *"
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- master
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
add-contributors:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v2
|
|
14
|
+
- uses: BobAnkh/add-contributors@master
|
|
15
|
+
with:
|
|
16
|
+
CONTRIBUTOR: "### Contributors"
|
|
17
|
+
COLUMN_PER_ROW: "6"
|
|
18
|
+
ACCESS_TOKEN: ${{secrets.ADD_TO_PROJECT_PAT}}
|
|
19
|
+
IMG_WIDTH: "100"
|
|
20
|
+
FONT_SIZE: "14"
|
|
21
|
+
PATH: "/README.md"
|
|
22
|
+
COMMIT_MESSAGE: "docs(README): update contributors"
|
|
23
|
+
AVATAR_SHAPE: "round"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [develop, main]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [develop, main]
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- name: Checkout
|
|
12
|
+
uses: actions/checkout@v2
|
|
13
|
+
with:
|
|
14
|
+
fetch-depth: 0
|
|
15
|
+
- name: Install Node.js
|
|
16
|
+
uses: actions/setup-node@v2
|
|
17
|
+
with:
|
|
18
|
+
node-version: 20
|
|
19
|
+
- name: Install
|
|
20
|
+
run: npm install
|
|
21
|
+
- name: Lint
|
|
22
|
+
run: npm run lint
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Semantic Release on Merge
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
jobs:
|
|
6
|
+
release:
|
|
7
|
+
name: Attempt Semantic Release
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- name: Checkout
|
|
11
|
+
uses: actions/checkout@v2
|
|
12
|
+
with:
|
|
13
|
+
fetch-depth: 0
|
|
14
|
+
- name: Install Node.js
|
|
15
|
+
uses: actions/setup-node@v2
|
|
16
|
+
with:
|
|
17
|
+
node-version: 20
|
|
18
|
+
- name: Install
|
|
19
|
+
run: npm install
|
|
20
|
+
- name: Release
|
|
21
|
+
env:
|
|
22
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
23
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
24
|
+
run: npm run semantic-release
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
tagFormat: '${version}',
|
|
3
|
+
branches: ['main'],
|
|
4
|
+
repositoryUrl: 'git@github.com:emulsify-ds/emulsify-core.git',
|
|
5
|
+
plugins: [
|
|
6
|
+
'@semantic-release/commit-analyzer',
|
|
7
|
+
'@semantic-release/release-notes-generator',
|
|
8
|
+
['@semantic-release/npm', { npmPublish: false }],
|
|
9
|
+
'@semantic-release/github',
|
|
10
|
+
],
|
|
11
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tagFormat": "${version}",
|
|
3
|
+
"branches": [
|
|
4
|
+
"main"
|
|
5
|
+
],
|
|
6
|
+
"repositoryUrl": "git@github.com:emulsify-ds/emulsify-core.git",
|
|
7
|
+
"plugins": [
|
|
8
|
+
"@semantic-release/commit-analyzer",
|
|
9
|
+
"@semantic-release/release-notes-generator",
|
|
10
|
+
[
|
|
11
|
+
"@semantic-release/npm",
|
|
12
|
+
{
|
|
13
|
+
"npmPublish": false
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"@semantic-release/github"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
tagFormat: '${version}',
|
|
3
|
+
branches: ['main'],
|
|
4
|
+
repositoryUrl: 'git@github.com:emulsify-ds/emulsify-core.git',
|
|
5
|
+
plugins: [
|
|
6
|
+
'@semantic-release/commit-analyzer',
|
|
7
|
+
'@semantic-release/release-notes-generator',
|
|
8
|
+
['@semantic-release/npm', { npmPublish: false }],
|
|
9
|
+
'@semantic-release/github',
|
|
10
|
+
],
|
|
11
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "emulsify-core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Storybook development + Webpack Build",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"component library",
|
|
7
|
+
"design system",
|
|
8
|
+
"drupal",
|
|
9
|
+
"pattern library",
|
|
10
|
+
"storybook",
|
|
11
|
+
"styleguide"
|
|
12
|
+
],
|
|
13
|
+
"author": "Four Kitchens <shout@fourkitchens.com>",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"coverage": "npm run test && open-cli .coverage/lcov-report/index.html",
|
|
17
|
+
"format": "npm run lint-fix; npm run prettier-fix",
|
|
18
|
+
"husky:commit-msg": "commitlint --edit $1",
|
|
19
|
+
"husky:pre-commit": "npm run lint",
|
|
20
|
+
"lint": "npm run lint-js",
|
|
21
|
+
"lint-fix": "npm run lint-js -- --fix",
|
|
22
|
+
"lint-js": "eslint --config config/eslintrc.config.json --no-error-on-unmatched-pattern ./config ./storybook",
|
|
23
|
+
"lint-staged": "lint-staged",
|
|
24
|
+
"prepare": "[ -d '.git' ] && (husky install) || true",
|
|
25
|
+
"prettier": "prettier --config config/prettierrc.json --ignore-unknown \"**/*.{js,yml,scss,md}\"",
|
|
26
|
+
"prettier-fix": "prettier --config config/prettierrc.json --write --ignore-unknown \"**/*.{js,yml,scss,md}\"",
|
|
27
|
+
"semantic-release": "semantic-release",
|
|
28
|
+
"storybook": "storybook dev --ci -s ../../dist,../../assets/images,../../assets/icons,../../assets/videos -p 6006",
|
|
29
|
+
"storybook-build": "storybook build -s ../../dist,../../assets/images,../../assets/icons,../../assets/videos -o .out",
|
|
30
|
+
"storybook-deploy": "storybook-to-ghpages -o .out",
|
|
31
|
+
"test": "jest --coverage --config ./config/jest.config.js",
|
|
32
|
+
"twatch": "jest --no-coverage --watch --verbose"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@babel/core": "^7.24.0",
|
|
36
|
+
"@babel/eslint-parser": "^7.23.10",
|
|
37
|
+
"@emulsify/cli": "^1.6.0",
|
|
38
|
+
"@storybook/addon-a11y": "^7.6.17",
|
|
39
|
+
"@storybook/addon-actions": "^7.6.17",
|
|
40
|
+
"@storybook/addon-essentials": "^7.6.17",
|
|
41
|
+
"@storybook/addon-links": "^7.6.17",
|
|
42
|
+
"@storybook/addon-styling-webpack": "^1.0.0",
|
|
43
|
+
"@storybook/addon-themes": "^7.6.17",
|
|
44
|
+
"@storybook/html": "^7.6.17",
|
|
45
|
+
"@storybook/html-webpack5": "^7.6.17",
|
|
46
|
+
"add-attributes-twig-extension": "^0.1.0",
|
|
47
|
+
"autoprefixer": "^10.4.19",
|
|
48
|
+
"babel-loader": "^9.1.3",
|
|
49
|
+
"babel-preset-minify": "^0.5.2",
|
|
50
|
+
"bem-twig-extension": "^0.1.1",
|
|
51
|
+
"breakpoint-sass": "^3.0.0",
|
|
52
|
+
"chalk": "^5.2.0",
|
|
53
|
+
"clean-webpack-plugin": "^4.0.0",
|
|
54
|
+
"concurrently": "^8.2.2",
|
|
55
|
+
"css-loader": "^7.1.1",
|
|
56
|
+
"eslint": "^8.57.0",
|
|
57
|
+
"eslint-config-airbnb-base": "^15.0.0",
|
|
58
|
+
"eslint-config-prettier": "^9.1.0",
|
|
59
|
+
"eslint-plugin-import": "^2.29.1",
|
|
60
|
+
"eslint-plugin-jest": "^27.9.0",
|
|
61
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
62
|
+
"eslint-plugin-security": "^2.1.1",
|
|
63
|
+
"eslint-plugin-storybook": "^0.8.0",
|
|
64
|
+
"eslint-webpack-plugin": "^4.1.0",
|
|
65
|
+
"file-loader": "^6.2.0",
|
|
66
|
+
"fs-extra": "^11.2.0",
|
|
67
|
+
"glob": "^10.3.12",
|
|
68
|
+
"graceful-fs": "^4.2.11",
|
|
69
|
+
"html-webpack-plugin": "^5.6.0",
|
|
70
|
+
"imagemin-webpack-plugin": "^2.4.2",
|
|
71
|
+
"jest": "^29.7.0",
|
|
72
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
73
|
+
"js-yaml": "^4.1.0",
|
|
74
|
+
"js-yaml-loader": "^1.2.2",
|
|
75
|
+
"lint-staged": "^15.2.2",
|
|
76
|
+
"mini-css-extract-plugin": "^2.9.0",
|
|
77
|
+
"node-sass-glob-importer": "^5.3.3",
|
|
78
|
+
"normalize.css": "^8.0.1",
|
|
79
|
+
"open-cli": "^8.0.0",
|
|
80
|
+
"pa11y": "^7.0.0",
|
|
81
|
+
"postcss": "^8.4.38",
|
|
82
|
+
"postcss-loader": "^8.1.1",
|
|
83
|
+
"postcss-scss": "^4.0.9",
|
|
84
|
+
"ramda": "^0.29.1",
|
|
85
|
+
"react": "^18.2.0",
|
|
86
|
+
"react-dom": "^18.2.0",
|
|
87
|
+
"regenerator-runtime": "^0.14.1",
|
|
88
|
+
"sass": "^1.75.0",
|
|
89
|
+
"sass-loader": "^14.2.1",
|
|
90
|
+
"storybook": "^7.6.17",
|
|
91
|
+
"style-dictionary": "^3.9.2",
|
|
92
|
+
"stylelint": "^16.3.1",
|
|
93
|
+
"stylelint-config-standard-scss": "^13.1.0",
|
|
94
|
+
"stylelint-prettier": "^5.0.0",
|
|
95
|
+
"stylelint-selector-bem-pattern": "^4.0.0",
|
|
96
|
+
"stylelint-webpack-plugin": "^5.0.0",
|
|
97
|
+
"svg-sprite-loader": "^6.0.11",
|
|
98
|
+
"token-transformer": "^0.0.33",
|
|
99
|
+
"twig-drupal-filters": "^3.2.0",
|
|
100
|
+
"twig-loader": "github:fourkitchens/twig-loader",
|
|
101
|
+
"twig-testing-library": "^1.2.0",
|
|
102
|
+
"webpack": "^5.91.0",
|
|
103
|
+
"webpack-cli": "^5.1.4",
|
|
104
|
+
"webpack-merge": "^5.10.0",
|
|
105
|
+
"yaml": "^2.4.1"
|
|
106
|
+
},
|
|
107
|
+
"devDependencies": {
|
|
108
|
+
"@commitlint/cli": "^19.2.0",
|
|
109
|
+
"@commitlint/config-conventional": "^19.1.0",
|
|
110
|
+
"@semantic-release/changelog": "^6.0.2",
|
|
111
|
+
"@semantic-release/commit-analyzer": "^11.1.0",
|
|
112
|
+
"@semantic-release/git": "^10.0.1",
|
|
113
|
+
"@semantic-release/github": "^10.0.2",
|
|
114
|
+
"@semantic-release/release-notes-generator": "^12.1.0",
|
|
115
|
+
"husky": "^9.0.11",
|
|
116
|
+
"semantic-release": "^23.0.4"
|
|
117
|
+
},
|
|
118
|
+
"overrides": {
|
|
119
|
+
"graceful-fs": "^4.2.11"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@emulsify/core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Storybook development + Webpack Build",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"component library",
|
|
7
|
+
"design system",
|
|
8
|
+
"drupal",
|
|
9
|
+
"pattern library",
|
|
10
|
+
"storybook",
|
|
11
|
+
"styleguide"
|
|
12
|
+
],
|
|
13
|
+
"author": "Four Kitchens <shout@fourkitchens.com>",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"coverage": "npm run test && open-cli .coverage/lcov-report/index.html",
|
|
17
|
+
"format": "npm run lint-fix; npm run prettier-fix",
|
|
18
|
+
"husky:commit-msg": "commitlint --edit $1",
|
|
19
|
+
"husky:pre-commit": "npm run lint",
|
|
20
|
+
"lint": "npm run lint-js",
|
|
21
|
+
"lint-fix": "npm run lint-js -- --fix",
|
|
22
|
+
"lint-js": "eslint --config config/eslintrc.config.json --no-error-on-unmatched-pattern ./config ./storybook",
|
|
23
|
+
"lint-staged": "lint-staged",
|
|
24
|
+
"prepare": "[ -d '.git' ] && (husky install) || true",
|
|
25
|
+
"prettier": "prettier --config config/prettierrc.json --ignore-unknown \"**/*.{js,yml,scss,md}\"",
|
|
26
|
+
"prettier-fix": "prettier --config config/prettierrc.json --write --ignore-unknown \"**/*.{js,yml,scss,md}\"",
|
|
27
|
+
"semantic-release": "semantic-release",
|
|
28
|
+
"storybook": "storybook dev --ci -s ../../dist,../../assets/images,../../assets/icons,../../assets/videos -p 6006",
|
|
29
|
+
"storybook-build": "storybook build -s ../../dist,../../assets/images,../../assets/icons,../../assets/videos -o .out",
|
|
30
|
+
"storybook-deploy": "storybook-to-ghpages -o .out",
|
|
31
|
+
"test": "jest --coverage --config ./config/jest.config.js",
|
|
32
|
+
"twatch": "jest --no-coverage --watch --verbose"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@babel/core": "^7.24.0",
|
|
36
|
+
"@babel/eslint-parser": "^7.23.10",
|
|
37
|
+
"@emulsify/cli": "^1.6.0",
|
|
38
|
+
"@storybook/addon-a11y": "^7.6.17",
|
|
39
|
+
"@storybook/addon-actions": "^7.6.17",
|
|
40
|
+
"@storybook/addon-essentials": "^7.6.17",
|
|
41
|
+
"@storybook/addon-links": "^7.6.17",
|
|
42
|
+
"@storybook/addon-styling-webpack": "^1.0.0",
|
|
43
|
+
"@storybook/addon-themes": "^7.6.17",
|
|
44
|
+
"@storybook/html": "^7.6.17",
|
|
45
|
+
"@storybook/html-webpack5": "^7.6.17",
|
|
46
|
+
"add-attributes-twig-extension": "^0.1.0",
|
|
47
|
+
"autoprefixer": "^10.4.19",
|
|
48
|
+
"babel-loader": "^9.1.3",
|
|
49
|
+
"babel-preset-minify": "^0.5.2",
|
|
50
|
+
"bem-twig-extension": "^0.1.1",
|
|
51
|
+
"breakpoint-sass": "^3.0.0",
|
|
52
|
+
"chalk": "^5.2.0",
|
|
53
|
+
"clean-webpack-plugin": "^4.0.0",
|
|
54
|
+
"concurrently": "^8.2.2",
|
|
55
|
+
"css-loader": "^7.1.1",
|
|
56
|
+
"eslint": "^8.57.0",
|
|
57
|
+
"eslint-config-airbnb-base": "^15.0.0",
|
|
58
|
+
"eslint-config-prettier": "^9.1.0",
|
|
59
|
+
"eslint-plugin-import": "^2.29.1",
|
|
60
|
+
"eslint-plugin-jest": "^27.9.0",
|
|
61
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
62
|
+
"eslint-plugin-security": "^2.1.1",
|
|
63
|
+
"eslint-plugin-storybook": "^0.8.0",
|
|
64
|
+
"eslint-webpack-plugin": "^4.1.0",
|
|
65
|
+
"file-loader": "^6.2.0",
|
|
66
|
+
"fs-extra": "^11.2.0",
|
|
67
|
+
"glob": "^10.3.12",
|
|
68
|
+
"graceful-fs": "^4.2.11",
|
|
69
|
+
"html-webpack-plugin": "^5.6.0",
|
|
70
|
+
"imagemin-webpack-plugin": "^2.4.2",
|
|
71
|
+
"jest": "^29.7.0",
|
|
72
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
73
|
+
"js-yaml": "^4.1.0",
|
|
74
|
+
"js-yaml-loader": "^1.2.2",
|
|
75
|
+
"lint-staged": "^15.2.2",
|
|
76
|
+
"mini-css-extract-plugin": "^2.9.0",
|
|
77
|
+
"node-sass-glob-importer": "^5.3.3",
|
|
78
|
+
"normalize.css": "^8.0.1",
|
|
79
|
+
"open-cli": "^8.0.0",
|
|
80
|
+
"pa11y": "^7.0.0",
|
|
81
|
+
"postcss": "^8.4.38",
|
|
82
|
+
"postcss-loader": "^8.1.1",
|
|
83
|
+
"postcss-scss": "^4.0.9",
|
|
84
|
+
"ramda": "^0.29.1",
|
|
85
|
+
"react": "^18.2.0",
|
|
86
|
+
"react-dom": "^18.2.0",
|
|
87
|
+
"regenerator-runtime": "^0.14.1",
|
|
88
|
+
"sass": "^1.75.0",
|
|
89
|
+
"sass-loader": "^14.2.1",
|
|
90
|
+
"storybook": "^7.6.17",
|
|
91
|
+
"style-dictionary": "^3.9.2",
|
|
92
|
+
"stylelint": "^16.3.1",
|
|
93
|
+
"stylelint-config-standard-scss": "^13.1.0",
|
|
94
|
+
"stylelint-prettier": "^5.0.0",
|
|
95
|
+
"stylelint-selector-bem-pattern": "^4.0.0",
|
|
96
|
+
"stylelint-webpack-plugin": "^5.0.0",
|
|
97
|
+
"svg-sprite-loader": "^6.0.11",
|
|
98
|
+
"token-transformer": "^0.0.33",
|
|
99
|
+
"twig-drupal-filters": "^3.2.0",
|
|
100
|
+
"twig-loader": "github:fourkitchens/twig-loader",
|
|
101
|
+
"twig-testing-library": "^1.2.0",
|
|
102
|
+
"webpack": "^5.91.0",
|
|
103
|
+
"webpack-cli": "^5.1.4",
|
|
104
|
+
"webpack-merge": "^5.10.0",
|
|
105
|
+
"yaml": "^2.4.1"
|
|
106
|
+
},
|
|
107
|
+
"devDependencies": {
|
|
108
|
+
"@commitlint/cli": "^19.2.0",
|
|
109
|
+
"@commitlint/config-conventional": "^19.1.0",
|
|
110
|
+
"@semantic-release/changelog": "^6.0.2",
|
|
111
|
+
"@semantic-release/commit-analyzer": "^11.1.0",
|
|
112
|
+
"@semantic-release/git": "^10.0.1",
|
|
113
|
+
"@semantic-release/github": "^10.0.2",
|
|
114
|
+
"@semantic-release/release-notes-generator": "^12.1.0",
|
|
115
|
+
"husky": "^9.0.11",
|
|
116
|
+
"semantic-release": "^23.0.4"
|
|
117
|
+
},
|
|
118
|
+
"overrides": {
|
|
119
|
+
"graceful-fs": "^4.2.11"
|
|
120
|
+
}
|
|
121
|
+
}
|