@internetarchive/ia-topnav 1.1.23 → 1.1.25-alpha1

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.
Files changed (89) hide show
  1. package/.eslintrc +16 -16
  2. package/.storybook/.babelrc +15 -15
  3. package/.storybook/addons.js +7 -7
  4. package/.storybook/config.js +11 -11
  5. package/.storybook/webpack.config.js +5 -5
  6. package/LICENSE +661 -661
  7. package/README.md +144 -144
  8. package/index.d.ts +104 -105
  9. package/index.js +3 -3
  10. package/package.json +61 -61
  11. package/src/assets/img/hamburger.js +36 -36
  12. package/src/assets/img/ia-icon.js +33 -33
  13. package/src/assets/img/icon-audio.js +23 -23
  14. package/src/assets/img/icon-close.js +16 -16
  15. package/src/assets/img/icon-donate.js +15 -15
  16. package/src/assets/img/icon-ellipses.js +15 -15
  17. package/src/assets/img/icon-ia-logo.js +24 -24
  18. package/src/assets/img/icon-images.js +15 -15
  19. package/src/assets/img/icon-search.js +15 -15
  20. package/src/assets/img/icon-software.js +15 -15
  21. package/src/assets/img/icon-texts.js +15 -15
  22. package/src/assets/img/icon-upload.js +15 -15
  23. package/src/assets/img/icon-user.js +15 -15
  24. package/src/assets/img/icon-video.js +15 -15
  25. package/src/assets/img/icon-web.js +15 -15
  26. package/src/assets/img/icon.js +18 -18
  27. package/src/assets/img/icons.js +29 -29
  28. package/src/assets/img/user.js +38 -38
  29. package/src/assets/img/wordmark-stacked.js +13 -13
  30. package/src/data/menus.js +603 -603
  31. package/src/desktop-subnav.js +45 -45
  32. package/src/dropdown-menu.js +98 -98
  33. package/src/ia-topnav.js +283 -286
  34. package/src/lib/formatUrl.js +1 -1
  35. package/src/lib/location-handler.js +5 -5
  36. package/src/lib/query-handler.js +7 -7
  37. package/src/lib/toSentenceCase.js +8 -8
  38. package/src/login-button.js +79 -79
  39. package/src/media-button.js +113 -113
  40. package/src/media-menu.js +133 -133
  41. package/src/media-slider.js +104 -104
  42. package/src/media-subnav.js +112 -112
  43. package/src/more-slider.js +33 -33
  44. package/src/nav-search.js +125 -125
  45. package/src/primary-nav.js +210 -211
  46. package/src/save-page-form.js +59 -59
  47. package/src/search-menu.js +115 -115
  48. package/src/signed-out-dropdown.js +10 -10
  49. package/src/styles/base.js +48 -48
  50. package/src/styles/desktop-subnav.js +37 -37
  51. package/src/styles/dropdown-menu.js +139 -139
  52. package/src/styles/ia-topnav.js +88 -88
  53. package/src/styles/login-button.js +70 -70
  54. package/src/styles/media-button.js +153 -153
  55. package/src/styles/media-menu.js +70 -70
  56. package/src/styles/media-slider.js +81 -81
  57. package/src/styles/media-subnav.js +156 -156
  58. package/src/styles/more-slider.js +15 -15
  59. package/src/styles/nav-search.js +134 -134
  60. package/src/styles/primary-nav.js +254 -254
  61. package/src/styles/save-page-form.js +53 -53
  62. package/src/styles/search-menu.js +99 -99
  63. package/src/styles/signed-out-dropdown.js +31 -31
  64. package/src/styles/user-menu.js +31 -31
  65. package/src/styles/wayback-search.js +48 -48
  66. package/src/styles/wayback-slider.js +30 -30
  67. package/src/tracked-element.js +27 -27
  68. package/src/user-menu.js +42 -42
  69. package/src/wayback-search.js +18 -18
  70. package/src/wayback-slider.js +88 -88
  71. package/stories/topnav-element.stories.js +7 -7
  72. package/test/assets/img/hamburger.test.js +15 -15
  73. package/test/assets/img/user.test.js +15 -15
  74. package/test/data/menus.test.js +19 -19
  75. package/test/dropdown-menu.test.js +25 -25
  76. package/test/ia-icon.test.js +13 -13
  77. package/test/ia-topnav.test.js +273 -273
  78. package/test/login-button.test.js +15 -15
  79. package/test/media-button.test.js +19 -19
  80. package/test/media-menu.test.js +40 -40
  81. package/test/media-slider.test.js +57 -57
  82. package/test/more-slider.test.js +13 -13
  83. package/test/nav-search.test.js +61 -61
  84. package/test/primary-nav.test.js +82 -82
  85. package/test/save-page-form.test.js +35 -35
  86. package/test/search-menu.test.js +49 -49
  87. package/test/user-menu.test.js +33 -33
  88. package/test/wayback-slider.test.js +80 -80
  89. package/demo.html +0 -41
package/README.md CHANGED
@@ -1,144 +1,144 @@
1
- # The top navigation menu component for archive.org
2
-
3
- ## Update guide
4
- https://git.archive.org/www/offshoot/-/blob/main/guides/update-top-nav.md
5
- ## Installation
6
-
7
- ```bash
8
- yarn add @internetarchive/ia-topnav
9
- ```
10
-
11
- ## Usage
12
-
13
- @see [demo.html](demo.html) for the simplest example with all the defaults
14
-
15
- `yarn start` => open demo: `http://localhost:8000/demo.html`
16
-
17
- It shows a dynamic change of the logged in user name -- and how it will re-paint the menus.
18
-
19
-
20
- ```js
21
- // ia-top-nav.js
22
- import IATopNav from '@internetarchive/ia-topnav';
23
- export default IATopNav;
24
- ```
25
-
26
- ```html
27
- <!-- index.html -->
28
- <script type="module">
29
- import './ia-topnav.js';
30
- </script>
31
-
32
- <style>
33
- /* Defaults */
34
- ia-topnav {
35
- --white: #fff;
36
- --grey13: #222;
37
- --grey20: #333;
38
- --grey40: #666;
39
- --grey28: #474747;
40
- --grey60: #999;
41
- --grey66: #aaa;
42
- --grey80: #ccc;
43
- --errorYellow: #ffcd27;
44
-
45
- --linkColor: #428bca;
46
- --linkHoverColor: var(--white);
47
- --subnavLinkColor: var(--grey66);
48
- --primaryTextColor: var(--white);
49
- --inverseTextColor: var(--grey20);
50
- --lightTextColor: var(--grey60);
51
- --activeColor: var(--white);
52
- --activeButtonBg: var(--grey20);
53
- --iconFill: var(--grey60);
54
-
55
- --searchActiveBg: var(--grey20);
56
- --searchActiveInputBg: var(--white);
57
- --searchMenuBg: var(--grey20);
58
- --desktopSearchIconFill: var(--grey20);
59
-
60
- --mediaMenuBg: var(--grey13);
61
- --mediaLabelDesktopColor: var(--grey60);
62
- --activeDesktopMenuIcon: var(--grey28);
63
-
64
- --mediaSliderBg: var(--grey20);
65
- --mediaSliderDesktopBg: var(--grey28);
66
-
67
- --primaryNavBg: var(--grey13);
68
- --primaryNavBottomBorder: var(--grey20);
69
-
70
- --desktopSubnavBg: var(--grey20);
71
-
72
- --dropdownMenuBg: var(--grey20);
73
- --dropdownMenuInfoItem: var(--grey60);
74
- --dropdownMenuDivider: var(--grey40);
75
-
76
- --loginTextColor: var(--grey60);
77
-
78
- --themeFontFamily: 'Helvetica Neue', Helvetica, Arial, sans-serif;
79
- --logoWidthTablet: 263px;
80
-
81
- --savePageSubmitBg: var(--grey13);
82
- --savePageSubmitText: var(--white);
83
- --savePageInputBorder: var(--grey60);
84
- --savePageErrorText: var(--errorYellow);
85
-
86
- --topOffset: -1500px;
87
- }
88
- </style>
89
-
90
- <!--
91
- `baseHost` is the navigation base so leave emtpy for relative links
92
- `mediaBaseHost` is the base host for media like the profile picture if it's not relative
93
-
94
- NOTE:
95
- When passing in the `searchQuery` attribute from HTML, not LitElement bindings,
96
- you must base64 the value to account for any special characters.
97
- -->
98
- <ia-topnav
99
- baseHost="https://archive.org"
100
- mediaBaseHost="https://archive.org"
101
- hideSearch=${true}
102
- username="shaneriley"
103
- screenName="long_screen_name_that_gets_truncated"
104
- searchQuery="J2Zvbyc="
105
- ></ia-topnav>
106
- ```
107
-
108
-
109
- **Menus object:**
110
-
111
- Please see [src/data/menus.js](the menu objects) for our valid `menus` property.
112
-
113
- # Development
114
-
115
- ## Prerequisite
116
-
117
- ```bash
118
- yarn install
119
- ```
120
-
121
- ## Start Development Server
122
-
123
- ```bash
124
- yarn start // start development server and typescript compiler
125
- ```
126
- then open demo - http://localhost:8000/demo.html
127
-
128
- ## Testing
129
-
130
- ```bash
131
- yarn test
132
- ```
133
-
134
- ## Testing via browserstack
135
-
136
- ```bash
137
- yarn test:bs
138
- ```
139
-
140
- ## Linting
141
-
142
- ```bash
143
- yarn lint
144
- ```
1
+ # The top navigation menu component for archive.org
2
+
3
+ ## Update guide
4
+ https://git.archive.org/www/offshoot/-/blob/main/guides/update-top-nav.md
5
+ ## Installation
6
+
7
+ ```bash
8
+ yarn add @internetarchive/ia-topnav
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ @see [www/index.html](www/index.html) for the simplest example with all the defaults
14
+
15
+ `yarn start` => open demo: `http://localhost:8000/www/index.html`
16
+
17
+ It shows a dynamic change of the logged in user name -- and how it will re-paint the menus.
18
+
19
+
20
+ ```js
21
+ // ia-top-nav.js
22
+ import IATopNav from '@internetarchive/ia-topnav';
23
+ export default IATopNav;
24
+ ```
25
+
26
+ ```html
27
+ <!-- index.html -->
28
+ <script type="module">
29
+ import './ia-topnav.js';
30
+ </script>
31
+
32
+ <style>
33
+ /* Defaults */
34
+ ia-topnav {
35
+ --white: #fff;
36
+ --grey13: #222;
37
+ --grey20: #333;
38
+ --grey40: #666;
39
+ --grey28: #474747;
40
+ --grey60: #999;
41
+ --grey66: #aaa;
42
+ --grey80: #ccc;
43
+ --errorYellow: #ffcd27;
44
+
45
+ --linkColor: #428bca;
46
+ --linkHoverColor: var(--white);
47
+ --subnavLinkColor: var(--grey66);
48
+ --primaryTextColor: var(--white);
49
+ --inverseTextColor: var(--grey20);
50
+ --lightTextColor: var(--grey60);
51
+ --activeColor: var(--white);
52
+ --activeButtonBg: var(--grey20);
53
+ --iconFill: var(--grey60);
54
+
55
+ --searchActiveBg: var(--grey20);
56
+ --searchActiveInputBg: var(--white);
57
+ --searchMenuBg: var(--grey20);
58
+ --desktopSearchIconFill: var(--grey20);
59
+
60
+ --mediaMenuBg: var(--grey13);
61
+ --mediaLabelDesktopColor: var(--grey60);
62
+ --activeDesktopMenuIcon: var(--grey28);
63
+
64
+ --mediaSliderBg: var(--grey20);
65
+ --mediaSliderDesktopBg: var(--grey28);
66
+
67
+ --primaryNavBg: var(--grey13);
68
+ --primaryNavBottomBorder: var(--grey20);
69
+
70
+ --desktopSubnavBg: var(--grey20);
71
+
72
+ --dropdownMenuBg: var(--grey20);
73
+ --dropdownMenuInfoItem: var(--grey60);
74
+ --dropdownMenuDivider: var(--grey40);
75
+
76
+ --loginTextColor: var(--grey60);
77
+
78
+ --themeFontFamily: 'Helvetica Neue', Helvetica, Arial, sans-serif;
79
+ --logoWidthTablet: 263px;
80
+
81
+ --savePageSubmitBg: var(--grey13);
82
+ --savePageSubmitText: var(--white);
83
+ --savePageInputBorder: var(--grey60);
84
+ --savePageErrorText: var(--errorYellow);
85
+
86
+ --topOffset: -1500px;
87
+ }
88
+ </style>
89
+
90
+ <!--
91
+ `baseHost` is the navigation base so leave emtpy for relative links
92
+ `mediaBaseHost` is the base host for media like the profile picture if it's not relative
93
+
94
+ NOTE:
95
+ When passing in the `searchQuery` attribute from HTML, not LitElement bindings,
96
+ you must base64 the value to account for any special characters.
97
+ -->
98
+ <ia-topnav
99
+ baseHost="https://archive.org"
100
+ mediaBaseHost="https://archive.org"
101
+ hideSearch=${true}
102
+ username="shaneriley"
103
+ screenName="long_screen_name_that_gets_truncated"
104
+ searchQuery="J2Zvbyc="
105
+ ></ia-topnav>
106
+ ```
107
+
108
+
109
+ **Menus object:**
110
+
111
+ Please see [src/data/menus.js](the menu objects) for our valid `menus` property.
112
+
113
+ # Development
114
+
115
+ ## Prerequisite
116
+
117
+ ```bash
118
+ yarn install
119
+ ```
120
+
121
+ ## Start Development Server
122
+
123
+ ```bash
124
+ yarn start // start development server and typescript compiler
125
+ ```
126
+ then open demo - http://localhost:8000/www/index.html
127
+
128
+ ## Testing
129
+
130
+ ```bash
131
+ yarn test
132
+ ```
133
+
134
+ ## Testing via browserstack
135
+
136
+ ```bash
137
+ yarn test:bs
138
+ ```
139
+
140
+ ## Linting
141
+
142
+ ```bash
143
+ yarn lint
144
+ ```
package/index.d.ts CHANGED
@@ -1,105 +1,104 @@
1
- import { LitElement } from 'lit';
2
-
3
- export interface IATopNavConfig {
4
- /**
5
- * Google Analytics event category
6
- */
7
- eventCategory: string;
8
-
9
- /**
10
- * Copy to display for number of pages archived at the top of the Wayback search form
11
- *
12
- * ie. "425 billion"
13
- */
14
- waybackPagesArchived: string;
15
-
16
- /**
17
- * Array of strings representing the values of options that should be hidden from search options
18
- */
19
- hiddenSearchOptions: [];
20
- }
21
-
22
- export interface IATopNavLink {
23
- /**
24
- * Link title
25
- */
26
- title: string;
27
-
28
- /**
29
- * Link url
30
- */
31
- url?: string;
32
- }
33
-
34
- export interface IATopNavIconLink extends IATopNavLink {
35
- /**
36
- * Icon URL
37
- */
38
- icon: string;
39
- }
40
-
41
- export interface IATopNavAnalyticsLink extends IATopNavLink {
42
- /**
43
- * Google analytics event name
44
- */
45
- analyticsEvent: string;
46
- }
47
-
48
- export interface IATopNavExternalLink extends IATopNavLink {
49
- /**
50
- * Is the link external or not
51
- */
52
- external: boolean;
53
- }
54
-
55
- export interface IATopNavMediaMenu {
56
- heading: string;
57
- iconLinks: IATopNavIconLink[];
58
- featuredLinks: IATopNavLink[];
59
- links: IATopNavLink[];
60
- }
61
-
62
- export interface IATopNavWaybackMenuConfig {
63
- mobileAppsLinks: IATopNavExternalLink[];
64
- browserExtensionsLinks: IATopNavExternalLink[];
65
- archiveItLinks: IATopNavExternalLink[];
66
- }
67
-
68
- export interface IATopNavMenuConfig {
69
- audio: IATopNavMediaMenu;
70
- images: IATopNavMediaMenu;
71
- more: IATopNavLink[];
72
- signedOut: IATopNavAnalyticsLink[];
73
- software: IATopNavMediaMenu;
74
- texts: IATopNavMediaMenu;
75
- user: IATopNavAnalyticsLink[];
76
- video: IATopNavMediaMenu;
77
- web: IATopNavWaybackMenuConfig;
78
- }
79
-
80
- export type IATopNavSecondIdentitySlotMode = 'allow' | '';
81
-
82
- export declare class IATopNav extends LitElement {
83
- localLinks?: boolean;
84
- baseHost?: string;
85
- config?: IATopNavConfig;
86
- hideSearch?: boolean;
87
- mediaBaseHost?: string;
88
- menuSliderOpen?: boolean;
89
- openMenu?: string;
90
- screenName?: string;
91
- searchIn?: string;
92
- searchQuery?: string;
93
- secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;
94
- selectedMenuOption?: string;
95
- username?: string;
96
- userProfileImagePath?: string;
97
- userProfileLastModified?: string;
98
- menus: IATopNavMenuConfig;
99
- /**
100
- * Copy to display for number of pages archived at the top of the Wayback search form
101
- *
102
- * ie. "425 billion"
103
- */
104
- waybackPagesArchived?: string;
105
- }
1
+ import { LitElement } from 'lit';
2
+
3
+ export interface IATopNavConfig {
4
+ /**
5
+ * Google Analytics event category
6
+ */
7
+ eventCategory: string;
8
+
9
+ /**
10
+ * Copy to display for number of pages archived at the top of the Wayback search form
11
+ *
12
+ * ie. "425 billion"
13
+ */
14
+ waybackPagesArchived: string;
15
+
16
+ /**
17
+ * Array of strings representing the values of options that should be hidden from search options
18
+ */
19
+ hiddenSearchOptions: [];
20
+ }
21
+
22
+ export interface IATopNavLink {
23
+ /**
24
+ * Link title
25
+ */
26
+ title: string;
27
+
28
+ /**
29
+ * Link url
30
+ */
31
+ url?: string;
32
+ }
33
+
34
+ export interface IATopNavIconLink extends IATopNavLink {
35
+ /**
36
+ * Icon URL
37
+ */
38
+ icon: string;
39
+ }
40
+
41
+ export interface IATopNavAnalyticsLink extends IATopNavLink {
42
+ /**
43
+ * Google analytics event name
44
+ */
45
+ analyticsEvent: string;
46
+ }
47
+
48
+ export interface IATopNavExternalLink extends IATopNavLink {
49
+ /**
50
+ * Is the link external or not
51
+ */
52
+ external: boolean;
53
+ }
54
+
55
+ export interface IATopNavMediaMenu {
56
+ heading: string;
57
+ iconLinks: IATopNavIconLink[];
58
+ featuredLinks: IATopNavLink[];
59
+ links: IATopNavLink[];
60
+ }
61
+
62
+ export interface IATopNavWaybackMenuConfig {
63
+ mobileAppsLinks: IATopNavExternalLink[];
64
+ browserExtensionsLinks: IATopNavExternalLink[];
65
+ archiveItLinks: IATopNavExternalLink[];
66
+ }
67
+
68
+ export interface IATopNavMenuConfig {
69
+ audio: IATopNavMediaMenu;
70
+ images: IATopNavMediaMenu;
71
+ more: IATopNavLink[];
72
+ signedOut: IATopNavAnalyticsLink[];
73
+ software: IATopNavMediaMenu;
74
+ texts: IATopNavMediaMenu;
75
+ user: IATopNavAnalyticsLink[];
76
+ video: IATopNavMediaMenu;
77
+ web: IATopNavWaybackMenuConfig;
78
+ }
79
+
80
+ export type IATopNavSecondIdentitySlotMode = 'allow' | '';
81
+
82
+ export declare class IATopNav extends LitElement {
83
+ localLinks?: boolean;
84
+ baseHost?: string;
85
+ config?: IATopNavConfig;
86
+ hideSearch?: boolean;
87
+ mediaBaseHost?: string;
88
+ menuSliderOpen?: boolean;
89
+ openMenu?: string;
90
+ screenName?: string;
91
+ searchIn?: string;
92
+ searchQuery?: string;
93
+ secondIdentitySlotMode?: IATopNavSecondIdentitySlotMode;
94
+ selectedMenuOption?: string;
95
+ username?: string;
96
+ userProfileImagePath?: string;
97
+ menus: IATopNavMenuConfig;
98
+ /**
99
+ * Copy to display for number of pages archived at the top of the Wayback search form
100
+ *
101
+ * ie. "425 billion"
102
+ */
103
+ waybackPagesArchived?: string;
104
+ }
package/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import IATopNav from './src/ia-topnav';
2
-
3
- export default IATopNav;
1
+ import IATopNav from './src/ia-topnav';
2
+
3
+ export default IATopNav;
package/package.json CHANGED
@@ -1,61 +1,61 @@
1
- {
2
- "name": "@internetarchive/ia-topnav",
3
- "version": "1.1.23",
4
- "description": "Top nav for Internet Archive",
5
- "license": "AGPL-3.0-only",
6
- "main": "index.js",
7
- "module": "index.js",
8
- "types": "index.d.ts",
9
- "type": "module",
10
- "publishConfig": {
11
- "access": "public"
12
- },
13
- "scripts": {
14
- "start": "es-dev-server --app-index ./index.html --node-resolve --watch --open",
15
- "lint:eslint": "eslint --ext .js . --ignore-path .gitignore",
16
- "format:eslint": "eslint --ext .js . --fix --ignore-path .gitignore",
17
- "lint:prettier": "prettier \"**/*.js\" --check --ignore-path .gitignore",
18
- "format:prettier": "prettier \"**/*.js\" --write --ignore-path .gitignore",
19
- "lint": "npm run lint:eslint",
20
- "format": "npm run format:eslint && npm run format:prettier",
21
- "test": "ulimit -v unlimited; web-test-runner 'test/**/*.test.js' --node-resolve --coverage --puppeteer"
22
- },
23
- "dependencies": {
24
- "@internetarchive/ia-wayback-search": "^0.2.3"
25
- },
26
- "devDependencies": {
27
- "@open-wc/demoing-storybook": "^2.4.7",
28
- "@open-wc/eslint-config": "^8.0.2",
29
- "@open-wc/polyfills-loader": "^0.3.3",
30
- "@open-wc/prettier-config": "^1.1.0",
31
- "@open-wc/testing": "^3.1.6",
32
- "@storybook/react": "^6.5.12",
33
- "@web/test-runner": "^0.14.0",
34
- "@web/test-runner-puppeteer": "^0.10.5",
35
- "es-dev-server": "^2.1.0",
36
- "eslint": "^8.24.0",
37
- "eslint-plugin-lit": "^1.6.1",
38
- "gulp": "^4.0.2",
39
- "husky": "^8.0.1",
40
- "lint-staged": "^13.0.3",
41
- "sinon": "^14.0.1"
42
- },
43
- "husky": {
44
- "hooks": {
45
- "pre-commit": "lint-staged"
46
- }
47
- },
48
- "lint-staged": {
49
- "*.js": [
50
- "eslint --fix",
51
- "git add"
52
- ]
53
- },
54
- "eslintConfig": {
55
- "extends": [
56
- "@open-wc/eslint-config",
57
- "eslint-config-prettier"
58
- ]
59
- },
60
- "prettier": "@open-wc/prettier-config"
61
- }
1
+ {
2
+ "name": "@internetarchive/ia-topnav",
3
+ "version": "1.1.25-alpha1",
4
+ "description": "Top nav for Internet Archive",
5
+ "license": "AGPL-3.0-only",
6
+ "main": "index.js",
7
+ "module": "index.js",
8
+ "types": "index.d.ts",
9
+ "type": "module",
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "scripts": {
14
+ "start": "es-dev-server --app-index ./index.html --node-resolve --watch --open",
15
+ "lint:eslint": "eslint --ext .js . --ignore-path .gitignore",
16
+ "format:eslint": "eslint --ext .js . --fix --ignore-path .gitignore",
17
+ "lint:prettier": "prettier \"**/*.js\" --check --ignore-path .gitignore",
18
+ "format:prettier": "prettier \"**/*.js\" --write --ignore-path .gitignore",
19
+ "lint": "npm run lint:eslint",
20
+ "format": "npm run format:eslint && npm run format:prettier",
21
+ "test": "ulimit -v unlimited; web-test-runner 'test/**/*.test.js' --node-resolve --coverage --puppeteer"
22
+ },
23
+ "dependencies": {
24
+ "@internetarchive/ia-wayback-search": "^0.2.3"
25
+ },
26
+ "devDependencies": {
27
+ "@open-wc/demoing-storybook": "^2.4.7",
28
+ "@open-wc/eslint-config": "^8.0.2",
29
+ "@open-wc/polyfills-loader": "^0.3.3",
30
+ "@open-wc/prettier-config": "^1.1.0",
31
+ "@open-wc/testing": "^3.1.6",
32
+ "@storybook/react": "^6.5.12",
33
+ "@web/test-runner": "^0.14.0",
34
+ "@web/test-runner-puppeteer": "^0.10.5",
35
+ "es-dev-server": "^2.1.0",
36
+ "eslint": "^8.24.0",
37
+ "eslint-plugin-lit": "^1.6.1",
38
+ "gulp": "^4.0.2",
39
+ "husky": "^8.0.1",
40
+ "lint-staged": "^13.0.3",
41
+ "sinon": "^14.0.1"
42
+ },
43
+ "husky": {
44
+ "hooks": {
45
+ "pre-commit": "lint-staged"
46
+ }
47
+ },
48
+ "lint-staged": {
49
+ "*.js": [
50
+ "eslint --fix",
51
+ "git add"
52
+ ]
53
+ },
54
+ "eslintConfig": {
55
+ "extends": [
56
+ "@open-wc/eslint-config",
57
+ "eslint-config-prettier"
58
+ ]
59
+ },
60
+ "prettier": "@open-wc/prettier-config"
61
+ }