@designcrowd/fe-shared-lib 1.6.0 → 1.6.1

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 (185) hide show
  1. package/.github/workflows/claude.yml +72 -0
  2. package/.storybook/main.ts +2 -5
  3. package/CLAUDE.md +78 -55
  4. package/dist/css/tailwind-brandCrowd.css +25 -4
  5. package/dist/css/tailwind-brandPage.css +16 -3
  6. package/dist/css/tailwind-crazyDomains.css +25 -4
  7. package/dist/css/tailwind-designCom.css +25 -4
  8. package/dist/css/tailwind-designCrowd.css +25 -4
  9. package/index.js +1 -0
  10. package/package.json +36 -32
  11. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.stories.js +364 -0
  12. package/src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue +296 -0
  13. package/src/atoms/components/Button/variants/ButtonGray.vue +3 -3
  14. package/src/atoms/components/Carousel/Carousel.vue +7 -2
  15. package/src/atoms/components/Icon/Icon.stories.js +5 -7
  16. package/src/atoms/components/Icon/Icon.vue +25 -15
  17. package/src/atoms/components/Icon/icons/crown-alt.vue +5 -0
  18. package/src/atoms/components/Icon/icons/crown.vue +6 -0
  19. package/src/atoms/components/Icon/icons/home-outline.vue +6 -0
  20. package/src/atoms/components/Icon/icons/page-blank.vue +6 -0
  21. package/src/atoms/components/Icon/icons/question-alt.vue +20 -0
  22. package/src/atoms/components/Price/Price.stories.js +42 -21
  23. package/src/experiences/components/AuthFlow/SignIn.vue +10 -3
  24. package/src/experiences/components/AuthFlow/SignUp.vue +1 -1
  25. package/src/experiences/components/SideNavigationPanel/MenuCta.vue +62 -0
  26. package/src/experiences/components/SideNavigationPanel/MenuItem.vue +40 -0
  27. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.stories.js +219 -0
  28. package/src/experiences/components/SideNavigationPanel/SideNavigationPanel.vue +48 -0
  29. package/src/experiences/components/SideNavigationPanel/types.ts +7 -0
  30. package/src/experiences/components/UploadYourLogoApplication/UploadYourLogoApplication.vue +5 -3
  31. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploader.vue +8 -1
  32. package/src/experiences/components/UploadYourLogoOnBoarding/LogoUploadingLoader.vue +17 -0
  33. package/src/experiences/components/UploadYourLogoOnBoarding/UploadYourLogoOnBoarding.vue +10 -1
  34. package/src/experiences/components/WebsitesContextualUpgradeModal/WebsiteContextualUpgradeModal.vue +2 -2
  35. package/tailwind.config.js +1 -1
  36. package/vite.config.ts +4 -0
  37. package/.claude/settings.local.json +0 -56
  38. package/.storybook-static/assets/Auth-DT64t5h-.css +0 -1
  39. package/.storybook-static/assets/Auth.stories-C6eXcTSu.js +0 -490
  40. package/.storybook-static/assets/AuthCrazyDomains.stories-DGvEoWCa.js +0 -73
  41. package/.storybook-static/assets/Button-5UzSGUF6.css +0 -1
  42. package/.storybook-static/assets/Button-DKdQT6Fq.js +0 -1
  43. package/.storybook-static/assets/ButtonGroup-DDPXuhxR.css +0 -1
  44. package/.storybook-static/assets/ButtonGroup.stories-DlrYMRSk.js +0 -504
  45. package/.storybook-static/assets/ButtonPrimary-Bu6bXb_c.css +0 -1
  46. package/.storybook-static/assets/ButtonPrimary-BvWW6Duz.js +0 -1
  47. package/.storybook-static/assets/Buttons.stories-CKmd6hkZ.js +0 -761
  48. package/.storybook-static/assets/ButtonsCrazyDomains.stories-DdEuOUrn.js +0 -199
  49. package/.storybook-static/assets/Checkbox.mixin-DkHpdvGa.js +0 -1
  50. package/.storybook-static/assets/Checkbox.stories-DPBUC2Mx.js +0 -246
  51. package/.storybook-static/assets/Checktile.stories-ByaFwplD.js +0 -88
  52. package/.storybook-static/assets/CollapsiblePanel.stories-Y6q3gP9j.js +0 -56
  53. package/.storybook-static/assets/ColorPicker.stories-DdxPUB_R.js +0 -73
  54. package/.storybook-static/assets/CopyToClipboardText.stories-J9qndWxd.js +0 -32
  55. package/.storybook-static/assets/Dropdown.stories-1zKPATii.js +0 -159
  56. package/.storybook-static/assets/DropdownItem-BV-BdThU.css +0 -1
  57. package/.storybook-static/assets/DropdownItem-DA6TdpDb.js +0 -1
  58. package/.storybook-static/assets/FormControl.mixin-DcEBwrV3.js +0 -1
  59. package/.storybook-static/assets/HashRouteModal.stories-BGxvqE22.js +0 -60
  60. package/.storybook-static/assets/HelloBar-CYEZR2kQ.js +0 -1
  61. package/.storybook-static/assets/HelloBar.stories-597Kxj0W.js +0 -342
  62. package/.storybook-static/assets/Icon-C17LFvsP.js +0 -145
  63. package/.storybook-static/assets/Icon.stories-B9iAmcTU.js +0 -151
  64. package/.storybook-static/assets/Icon.stories-CR5vT9H7.js +0 -791
  65. package/.storybook-static/assets/Loader-BWGoT_xC.js +0 -1
  66. package/.storybook-static/assets/LogoBusinessBrandColours-CExzox1Z.js +0 -1
  67. package/.storybook-static/assets/LogoBusinessBrandColours-CeAaMKke.css +0 -1
  68. package/.storybook-static/assets/LogoBusinessBrandColours.stories-kuxAH8B8.js +0 -36
  69. package/.storybook-static/assets/Masonry-C2MNiGg0.css +0 -1
  70. package/.storybook-static/assets/Masonry.stories-CTXJLQ_i.js +0 -71
  71. package/.storybook-static/assets/Modal-CGwEIF5R.css +0 -1
  72. package/.storybook-static/assets/Modal-CydTNprT.js +0 -1
  73. package/.storybook-static/assets/Modal.stories-DZiG5NGM.js +0 -345
  74. package/.storybook-static/assets/Notice.stories-ChOj8CWm.js +0 -222
  75. package/.storybook-static/assets/NumberStepper-Blffv09R.css +0 -1
  76. package/.storybook-static/assets/NumberStepper.stories-CVbKJ_oJ.js +0 -64
  77. package/.storybook-static/assets/PaymentConfigList-BpUMV6cp.css +0 -1
  78. package/.storybook-static/assets/PaymentConfigList.stories-DUD7OZBS.js +0 -130
  79. package/.storybook-static/assets/Picture-B8m1I9xN.js +0 -1
  80. package/.storybook-static/assets/Picture.stories-MMzybhJ6.js +0 -119
  81. package/.storybook-static/assets/Pill-DLXZ_TL8.js +0 -1
  82. package/.storybook-static/assets/Pill.stories-DCP7szJm.js +0 -18
  83. package/.storybook-static/assets/PillBar-os4mJV3M.css +0 -1
  84. package/.storybook-static/assets/PillBar.stories-Bry-zQ6f.js +0 -41
  85. package/.storybook-static/assets/Price-C4GZbDSa.js +0 -1
  86. package/.storybook-static/assets/Price.stories-CMHly9V0.js +0 -337
  87. package/.storybook-static/assets/PromoCard.stories-xsbFtADE.js +0 -299
  88. package/.storybook-static/assets/PublishBrandPageModal-Q9-mNG1q.css +0 -1
  89. package/.storybook-static/assets/PublishBrandPageModal.stories-C9XzW_1m.js +0 -324
  90. package/.storybook-static/assets/SearchBar.stories-DaIneOSz.js +0 -12
  91. package/.storybook-static/assets/Select-DnioWQmi.css +0 -1
  92. package/.storybook-static/assets/Select.stories-BmGYB4pw.js +0 -108
  93. package/.storybook-static/assets/SellDomainNameList.fixtures-LC6fjr_b.js +0 -1
  94. package/.storybook-static/assets/SellDomainNameListModal-DH6khE10.css +0 -1
  95. package/.storybook-static/assets/SellDomainNameListModal-ymtVclFP.js +0 -1
  96. package/.storybook-static/assets/SellDomainNameListModal.stories-DvGvylgx.js +0 -71
  97. package/.storybook-static/assets/SellDomainNameListSearchResult-Cpxq0jDA.css +0 -1
  98. package/.storybook-static/assets/SellDomainNameListSearchResult-D-1CrQyf.js +0 -1
  99. package/.storybook-static/assets/SellDomainNameSearchWithResults-bX--zu97.js +0 -1
  100. package/.storybook-static/assets/SellDomainNameSearchWithResults.stories-DRUJjSdH.js +0 -37
  101. package/.storybook-static/assets/SellDomainNameWidget.stories-CC3LX10s.js +0 -36
  102. package/.storybook-static/assets/SignIn-CPjf8_2O.css +0 -1
  103. package/.storybook-static/assets/SignIn-DI0DSDFe.js +0 -1
  104. package/.storybook-static/assets/Slider-Cog2FFdj.css +0 -1
  105. package/.storybook-static/assets/Slider.stories-B2KGwnJy.js +0 -141
  106. package/.storybook-static/assets/SparkleIcon.stories-Dk904hVE.js +0 -547
  107. package/.storybook-static/assets/StarRating-BtKh7pzm.css +0 -1
  108. package/.storybook-static/assets/StarRating.stories-d2mgOuo2.js +0 -45
  109. package/.storybook-static/assets/TabMenu.stories-Cg2yenqj.js +0 -47
  110. package/.storybook-static/assets/TextCopyField-B66NKTk_.js +0 -1
  111. package/.storybook-static/assets/TextCopyField.stories-B4_ZlfLU.js +0 -47
  112. package/.storybook-static/assets/TextInput-CMoUjT_5.js +0 -1
  113. package/.storybook-static/assets/TextInput.stories-oyyxxf3j.js +0 -233
  114. package/.storybook-static/assets/Textarea.stories-BvhZR6K2.js +0 -207
  115. package/.storybook-static/assets/Toggle.stories-yT5-rL2k.js +0 -161
  116. package/.storybook-static/assets/Tooltip-DyXIgFQH.css +0 -1
  117. package/.storybook-static/assets/Tooltip-ZukyujG5.js +0 -1
  118. package/.storybook-static/assets/Tooltip.stories-sJFylRS_.js +0 -953
  119. package/.storybook-static/assets/UploadYourLogoApplication-Dmw8QcH3.css +0 -1
  120. package/.storybook-static/assets/UploadYourLogoApplication.stories-C9AvzHO_.js +0 -186
  121. package/.storybook-static/assets/UploadYourLogoDropzone-B1ffcicv.js +0 -24
  122. package/.storybook-static/assets/UploadYourLogoDropzone-DQqACf-e.css +0 -1
  123. package/.storybook-static/assets/UploadYourLogoDropzone.stories-D1Dt2ord.js +0 -55
  124. package/.storybook-static/assets/UploadedLogoSearchResultCard.stories-D8oF1Yrx.js +0 -79
  125. package/.storybook-static/assets/WebsiteContextualUpgradeModal-8u1zOZrW.css +0 -1
  126. package/.storybook-static/assets/WebsiteContextualUpgradeModal.stories-mtcvWOAg.js +0 -211
  127. package/.storybook-static/assets/_commonjsHelpers-CE1G-McA.js +0 -1
  128. package/.storybook-static/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  129. package/.storybook-static/assets/api-lSJGRrF2.js +0 -1
  130. package/.storybook-static/assets/axe-DrS73Vi2.js +0 -20
  131. package/.storybook-static/assets/brand-crowd-api.client-D45NKshX.js +0 -1
  132. package/.storybook-static/assets/bundled-translations-BoWhEDU_.js +0 -1
  133. package/.storybook-static/assets/bundled-translations.de-DE-C4lqla4O.js +0 -1
  134. package/.storybook-static/assets/bundled-translations.es-ES-BxMIllUH.js +0 -1
  135. package/.storybook-static/assets/bundled-translations.fr-CA-MxZpyz0w.js +0 -1
  136. package/.storybook-static/assets/bundled-translations.fr-FR-N7UPCZVr.js +0 -1
  137. package/.storybook-static/assets/bundled-translations.pt-BR-C8tscYuG.js +0 -1
  138. package/.storybook-static/assets/bundled-translations.pt-PT-Dszj5Xfa.js +0 -1
  139. package/.storybook-static/assets/carousel-BelyIYOK.css +0 -1
  140. package/.storybook-static/assets/carousel.stories-CJw3-Iy6.js +0 -668
  141. package/.storybook-static/assets/event-constants-CMO9VQVu.js +0 -1
  142. package/.storybook-static/assets/iframe-B3A6OXQU.js +0 -1104
  143. package/.storybook-static/assets/index-B-eiLVzF.js +0 -7
  144. package/.storybook-static/assets/index-QquxUozE.js +0 -6
  145. package/.storybook-static/assets/matchers-5TDFFDYO-HJu_DfWo.js +0 -14
  146. package/.storybook-static/assets/mediaQueryMixin-CISNqd93.js +0 -1
  147. package/.storybook-static/assets/preload-helper-PPVm8Dsz.js +0 -1
  148. package/.storybook-static/assets/tracking-ATsLLehC.js +0 -1
  149. package/.storybook-static/css/tailwind-brandCrowd.css +0 -2508
  150. package/.storybook-static/css/tailwind-brandPage.css +0 -2188
  151. package/.storybook-static/css/tailwind-crazyDomains.css +0 -2508
  152. package/.storybook-static/css/tailwind-designCom.css +0 -2508
  153. package/.storybook-static/css/tailwind-designCrowd.css +0 -2508
  154. package/.storybook-static/favicon-wrapper.svg +0 -46
  155. package/.storybook-static/favicon.svg +0 -1
  156. package/.storybook-static/iframe.html +0 -713
  157. package/.storybook-static/index.html +0 -148
  158. package/.storybook-static/index.json +0 -1
  159. package/.storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  160. package/.storybook-static/nunito-sans-bold.woff2 +0 -0
  161. package/.storybook-static/nunito-sans-italic.woff2 +0 -0
  162. package/.storybook-static/nunito-sans-regular.woff2 +0 -0
  163. package/.storybook-static/project.json +0 -1
  164. package/.storybook-static/sb-addons/a11y-1/manager-bundle.js +0 -57
  165. package/.storybook-static/sb-addons/links-2/manager-bundle.js +0 -3
  166. package/.storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +0 -628
  167. package/.storybook-static/sb-addons/themes-3/manager-bundle.js +0 -3
  168. package/.storybook-static/sb-common-assets/favicon-wrapper.svg +0 -46
  169. package/.storybook-static/sb-common-assets/favicon.svg +0 -1
  170. package/.storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  171. package/.storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  172. package/.storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  173. package/.storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  174. package/.storybook-static/sb-manager/globals-runtime.js +0 -77935
  175. package/.storybook-static/sb-manager/globals.js +0 -24
  176. package/.storybook-static/sb-manager/manager-stores.js +0 -23
  177. package/.storybook-static/sb-manager/runtime.js +0 -20404
  178. package/.storybook-static/vite-inject-mocker-entry.js +0 -2
  179. package/docs/plans/2026-01-30-upgrade-vite7-storybook10-design.md +0 -177
  180. package/docs/plans/2026-01-30-upgrade-vite7-storybook10.md +0 -388
  181. package/public/css/tailwind-brandCrowd.css +0 -2508
  182. package/public/css/tailwind-brandPage.css +0 -2188
  183. package/public/css/tailwind-crazyDomains.css +0 -2508
  184. package/public/css/tailwind-designCom.css +0 -2508
  185. package/public/css/tailwind-designCrowd.css +0 -2508
@@ -0,0 +1,72 @@
1
+ name: Claude Assistant
2
+ on:
3
+ issue_comment:
4
+ types: [created]
5
+ pull_request_review_comment:
6
+ types: [created]
7
+ issues:
8
+ types: [opened, assigned, labeled]
9
+ pull_request_review:
10
+ types: [submitted]
11
+ env:
12
+ AWS_REGION: us-east-1
13
+
14
+ permissions:
15
+ id-token: write
16
+ contents: write
17
+ pull-requests: write
18
+ issues: write
19
+ actions: read
20
+
21
+ jobs:
22
+ claude-response:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - name: Git clone the repository
26
+ uses: actions/checkout@v6
27
+
28
+ - name: Detect model from trigger
29
+ id: config
30
+ env:
31
+ COMMENT_BODY: ${{ github.event.comment.body || github.event.issue.body || github.event.review.body || '' }}
32
+ run: |
33
+ if echo "$COMMENT_BODY" | grep -qi -- '--opus'; then
34
+ echo "model=us.anthropic.claude-opus-4-6" >> "$GITHUB_OUTPUT"
35
+ elif echo "$COMMENT_BODY" | grep -qi -- '--haiku'; then
36
+ echo "model=us.anthropic.claude-haiku-4-5-20251001" >> "$GITHUB_OUTPUT"
37
+ else
38
+ echo "model=us.anthropic.claude-sonnet-4-6" >> "$GITHUB_OUTPUT"
39
+ fi
40
+
41
+ - name: Setup Node.js 20
42
+ uses: actions/setup-node@v4
43
+ with:
44
+ node-version: '20.11.0'
45
+ cache: 'npm'
46
+ cache-dependency-path: package-lock.json
47
+
48
+ - name: Configure npm for private packages
49
+ run: |
50
+ echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
51
+ echo "@designcrowd:registry=https://registry.npmjs.org/" >> ~/.npmrc
52
+
53
+ - name: Configure AWS credentials
54
+ uses: aws-actions/configure-aws-credentials@v6
55
+ with:
56
+ role-to-assume: arn:aws:iam::104415087145:role/github-claude-action-bedrock
57
+ role-session-name: GitHub_to_AWS_via_FederatedOIDC
58
+ aws-region: ${{ env.AWS_REGION }}
59
+
60
+ - uses: anthropics/claude-code-action@v1
61
+ with:
62
+ use_bedrock: "true"
63
+ claude_args: "--model ${{ steps.config.outputs.model }}"
64
+ assignee_trigger: "claude"
65
+ label_trigger: "claude"
66
+ base_branch: "master"
67
+ track_progress: "true"
68
+ use_sticky_comment: "true"
69
+ use_commit_signing: "true"
70
+ exclude_comments_by_actor: "*[bot]"
71
+ additional_permissions: |
72
+ actions: read
@@ -1,7 +1,6 @@
1
1
  import { mergeConfig } from 'vite';
2
- import type { StorybookConfig } from '@storybook/vue3-vite';
3
2
 
4
- const config: StorybookConfig = {
3
+ module.exports = {
5
4
  stories: ['../src/**/components/**/*.stories.@(js|jsx|ts|tsx)'],
6
5
  addons: [
7
6
  '@storybook/addon-a11y',
@@ -21,7 +20,7 @@ const config: StorybookConfig = {
21
20
  docs: {
22
21
  autodocs: true,
23
22
  },
24
- async viteFinal(config) {
23
+ async viteFinal(config, options) {
25
24
  const configExtension = {
26
25
  optimizeDeps: {
27
26
  include: ['deepmerge'],
@@ -35,5 +34,3 @@ const config: StorybookConfig = {
35
34
  return mergeConfig(config, configExtension);
36
35
  },
37
36
  };
38
-
39
- export default config;
package/CLAUDE.md CHANGED
@@ -2,70 +2,93 @@
2
2
 
3
3
  This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
4
 
5
- ## Development Commands
5
+ ## Project Overview
6
6
 
7
- ### Starting Development
8
- - `npm start` - Builds Tailwind CSS files for all themes and launches Storybook development server on port 6006
9
- - `npm run storybook` - Same as `npm start` (alias)
7
+ `@designcrowd/fe-shared-lib` is a shared Vue 3 component library and design system for DesignCrowd's frontend applications (BrandCrowd, Design.com, CrazyDomains, DesignCrowd, BrandPage). Published to NPM as a scoped package.
10
8
 
11
- ### Building
12
- - `npm run build` - Builds production CSS using Tailwind
13
- - `npm run build:css` - Builds CSS files using tailwind.build.js
14
- - `npm run build:storybook` - Builds static Storybook for deployment
9
+ - **Default branch**: `master`
10
+ - **Node**: 20.x
11
+ - **Framework**: Vue 3 + Vite + Storybook 9
15
12
 
16
- ### Code Quality
17
- - `npm run lint` - Runs ESLint on TypeScript, JavaScript, and Vue files in src/
18
- - `npm run lint:fix` - Automatically fixes linting issues where possible
13
+ ## Commands
19
14
 
20
- ### Testing in UAT Environment
21
- To test experimental versions without publishing to production:
22
- 1. Update package.json version to `[current]-[description]`
23
- 2. Run `docker build . --build-arg NPM_TOKEN=$NPM_TOKEN`
24
- 3. Update consumer package reference to the new version
15
+ ```bash
16
+ npm start # Build Tailwind CSS + launch Storybook on port 6006
17
+ npm run build # Build production CSS (all themes)
18
+ npm run build:storybook # Build static Storybook for S3 deployment
19
+ npm run lint # ESLint check (src/ directory)
20
+ npm run lint:fix # ESLint auto-fix
21
+ ```
25
22
 
26
- ## Architecture Overview
23
+ **No test runner is configured.** Vue Test Utils (`@vue/test-utils`) is installed as a dev dependency but there is no Vitest/Jest setup and no `npm test` script. Do not attempt to run tests.
27
24
 
28
- This is a shared component library and design system for DesignCrowd's frontend applications, published as `@designcrowd/fe-shared-lib`.
25
+ ## Architecture
29
26
 
30
27
  ### Project Structure
31
- - **`src/atoms/`** - Reusable UI components (Button, Modal, Icon, etc.)
32
- - **`src/experiences/`** - Complex, business-specific components (AuthFlow, PaymentConfig, etc.)
33
- - **`src/themes/`** - Tailwind CSS theme configurations for different brands
34
- - **`src/css/`** - Global CSS and Tailwind configuration
35
- - **`public/css/`** - Generated CSS output files
36
-
37
- ### Theme System
38
- The library supports multiple brand themes through Tailwind CSS:
39
- - **BrandCrowd** (`bc.js`)
40
- - **BrandPage** (`bp.js`)
41
- - **CrazyDomains** (`cd.js`)
42
- - **DesignCrowd** (`dc.js`)
43
- - **Design.com** (`dcom.js`)
44
-
45
- Themes are built using `tailwind.themes.js` and exported via `src/themes/themes.js`.
28
+ - **`src/atoms/`** Reusable UI components (Button, Modal, Icon, Dropdown, TextInput, etc.)
29
+ - **`src/experiences/`** Complex business-specific components (AuthFlow, PaymentConfig, UploadLogo, etc.)
30
+ - **`src/themes/`** Tailwind CSS theme configurations per brand
31
+ - **`src/css/`** Global CSS and Tailwind entry point
32
+ - **`src/bundles/`** Generated i18n translation bundles
33
+
34
+ ### Theme System (5 brands)
35
+ Each brand has its own Tailwind theme extending a shared base:
36
+ - `bc.js` (BrandCrowd), `dcom.js` (Design.com), `dc.js` (DesignCrowd), `cd.js` (CrazyDomains), `bp.js` (BrandPage)
37
+
38
+ Themes are compiled into separate CSS files via `tailwind.build.js` → `dist/css/tailwind-[theme].css`
46
39
 
47
40
  ### Component Organization
48
- - **Atoms**: Basic UI components with stories in Storybook
49
- - **Experiences**: Complex components combining multiple atoms for specific workflows
50
- - **Icons**: Extensive icon library with brand-specific variants
51
- - **Mixins**: Reusable Vue.js mixins for common functionality
41
+ - **Atoms**: Simple, reusable UI primitives with Storybook stories
42
+ - **Experiences**: Complex multi-atom components for specific workflows (auth, payments, uploads)
43
+ - **Icons**: Extensive icon library in `src/atoms/components/Icon/` with brand-specific variants
52
44
 
53
45
  ### Key Files
54
- - `index.js` - Main export file exposing all components
55
- - `tailwind.config.js` - Tailwind CSS configuration
56
- - `vite.config.ts` - Vite build configuration for development
57
-
58
- ### Local Development Workflow
59
- Use `npm link` in this directory and `npm link @designcrowd/fe-shared-lib` in consumer projects for local development.
60
-
61
- ### Storybook
62
- - Development server runs on port 6006
63
- - Live Storybook: https://brandcrowd-storybook.s3.amazonaws.com/fe-shared-lib/live/index.html
64
- - Stories are co-located with components (`.stories.js` files)
65
-
66
- ### Brand Page Integration
67
- For changes affecting BrandPage Tab in BC.NET:
68
- 1. Update app.maker's reference to this library
69
- 2. Bump app.maker version
70
- 3. Run `npm run docker:publish:bp`
71
- 4. Update BC.NET's reference to the new app.maker version
46
+ - `index.js` / `index.cjs` Main exports (dual ESM/CJS)
47
+ - `tailwind.config.js` Tailwind CSS configuration
48
+ - `tailwind.build.js` CSS build script (multi-theme)
49
+ - `vite.config.ts` — Vite dev configuration
50
+
51
+ ## Coding Standards
52
+
53
+ ### Formatting (Prettier)
54
+ - Single quotes (`singleQuote: true`)
55
+ - Print width: 120 characters
56
+ - Trailing commas: all
57
+ - Arrow parens: always
58
+
59
+ ### Linting (ESLint)
60
+ - Extends: `plugin:vue/recommended`, `@vue/airbnb`, `@vue/prettier`
61
+ - `no-console`: warn in production
62
+ - `import/prefer-default-export`: off
63
+
64
+ ### Styling
65
+ - **Tailwind CSS** with `tw-` prefix for utility classes
66
+ - No SCSS — PostCSS only
67
+ - Theme-specific styles via the multi-brand theme system
68
+
69
+ ### Vue Components
70
+ - Vue 3 Single File Components (`.vue`)
71
+ - Stories co-located with components (`.stories.js` files)
72
+ - Mixins in `src/atoms/mixin/` and `src/experiences/mixins/`
73
+
74
+ ## Storybook
75
+
76
+ - Dev server: `npm start` → http://localhost:6006
77
+ - Live: https://brandcrowd-storybook.s3.amazonaws.com/fe-shared-lib/live/index.html
78
+ - Stories pattern: `src/**/components/**/*.stories.@(js|jsx|ts|tsx)`
79
+ - Supports theme switching (5 brands) and locale switching (8 languages)
80
+
81
+ ## Local Development
82
+
83
+ Use `npm link` for local development with consumer projects:
84
+ ```bash
85
+ npm link # in this directory
86
+ npm link @designcrowd/fe-shared-lib # in consumer project
87
+ ```
88
+
89
+ ## Publishing (UAT)
90
+
91
+ To test experimental versions without publishing to production:
92
+ 1. Update `package.json` version to `[current]-[description]`
93
+ 2. Run `docker build . --build-arg NPM_TOKEN=$NPM_TOKEN`
94
+ 3. Update consumer package reference to the new version
@@ -946,6 +946,9 @@ video {
946
946
  .tw-w-96 {
947
947
  width: 24rem;
948
948
  }
949
+ .tw-w-\[14rem\] {
950
+ width: 14rem;
951
+ }
949
952
  .tw-w-auto {
950
953
  width: auto;
951
954
  }
@@ -1210,6 +1213,9 @@ video {
1210
1213
  .tw-rounded-full {
1211
1214
  border-radius: 9999px;
1212
1215
  }
1216
+ .tw-rounded-lg {
1217
+ border-radius: 0.5rem;
1218
+ }
1213
1219
  .tw-rounded-md {
1214
1220
  border-radius: 0.375rem;
1215
1221
  }
@@ -1851,6 +1857,9 @@ video {
1851
1857
  .tw-font-bold {
1852
1858
  font-weight: 700;
1853
1859
  }
1860
+ .tw-font-medium {
1861
+ font-weight: 500;
1862
+ }
1854
1863
  .tw-font-normal {
1855
1864
  font-weight: 400;
1856
1865
  }
@@ -2062,6 +2071,10 @@ video {
2062
2071
  --tw-border-opacity: 1;
2063
2072
  border-color: rgb(230 230 230 / var(--tw-border-opacity));
2064
2073
  }
2074
+ .hover\:tw-border-grayscale-500:hover {
2075
+ --tw-border-opacity: 1;
2076
+ border-color: rgb(208 208 208 / var(--tw-border-opacity));
2077
+ }
2065
2078
  .hover\:tw-border-info-600:hover {
2066
2079
  --tw-border-opacity: 1;
2067
2080
  border-color: rgb(0 121 172 / var(--tw-border-opacity));
@@ -2098,6 +2111,10 @@ video {
2098
2111
  --tw-bg-opacity: 1;
2099
2112
  background-color: rgb(230 230 230 / var(--tw-bg-opacity));
2100
2113
  }
2114
+ .hover\:tw-bg-grayscale-500:hover {
2115
+ --tw-bg-opacity: 1;
2116
+ background-color: rgb(208 208 208 / var(--tw-bg-opacity));
2117
+ }
2101
2118
  .hover\:tw-bg-info-100:hover {
2102
2119
  --tw-bg-opacity: 1;
2103
2120
  background-color: rgb(204 234 247 / var(--tw-bg-opacity));
@@ -2122,6 +2139,10 @@ video {
2122
2139
  --tw-bg-opacity: 1;
2123
2140
  background-color: rgb(194 22 50 / var(--tw-bg-opacity));
2124
2141
  }
2142
+ .hover\:tw-bg-primary-700:hover {
2143
+ --tw-bg-opacity: 1;
2144
+ background-color: rgb(145 16 38 / var(--tw-bg-opacity));
2145
+ }
2125
2146
  .hover\:tw-bg-secondary-100:hover {
2126
2147
  --tw-bg-opacity: 1;
2127
2148
  background-color: rgb(222 222 222 / var(--tw-bg-opacity));
@@ -2138,6 +2159,10 @@ video {
2138
2159
  --tw-bg-opacity: 1;
2139
2160
  background-color: rgb(71 71 71 / var(--tw-bg-opacity));
2140
2161
  }
2162
+ .hover\:tw-bg-secondary-700:hover {
2163
+ --tw-bg-opacity: 1;
2164
+ background-color: rgb(53 53 53 / var(--tw-bg-opacity));
2165
+ }
2141
2166
  .hover\:tw-bg-success-100:hover {
2142
2167
  --tw-bg-opacity: 1;
2143
2168
  background-color: rgb(211 238 207 / var(--tw-bg-opacity));
@@ -2150,10 +2175,6 @@ video {
2150
2175
  --tw-bg-opacity: 1;
2151
2176
  background-color: rgb(194 140 34 / var(--tw-bg-opacity));
2152
2177
  }
2153
- .hover\:tw-text-grayscale-800:hover {
2154
- --tw-text-opacity: 1;
2155
- color: rgb(17 21 23 / var(--tw-text-opacity));
2156
- }
2157
2178
  .hover\:tw-text-primary-600:hover {
2158
2179
  --tw-text-opacity: 1;
2159
2180
  color: rgb(194 22 50 / var(--tw-text-opacity));
@@ -946,6 +946,9 @@ video {
946
946
  .tw-w-96 {
947
947
  width: 24rem;
948
948
  }
949
+ .tw-w-\[14rem\] {
950
+ width: 14rem;
951
+ }
949
952
  .tw-w-auto {
950
953
  width: auto;
951
954
  }
@@ -1210,6 +1213,9 @@ video {
1210
1213
  .tw-rounded-full {
1211
1214
  border-radius: 9999px;
1212
1215
  }
1216
+ .tw-rounded-lg {
1217
+ border-radius: 0.5rem;
1218
+ }
1213
1219
  .tw-rounded-md {
1214
1220
  border-radius: 0.375rem;
1215
1221
  }
@@ -1699,6 +1705,9 @@ video {
1699
1705
  .tw-font-bold {
1700
1706
  font-weight: 700;
1701
1707
  }
1708
+ .tw-font-medium {
1709
+ font-weight: 500;
1710
+ }
1702
1711
  .tw-font-normal {
1703
1712
  font-weight: 400;
1704
1713
  }
@@ -1850,6 +1859,10 @@ video {
1850
1859
  --tw-border-opacity: 1;
1851
1860
  border-color: rgb(230 230 230 / var(--tw-border-opacity));
1852
1861
  }
1862
+ .hover\:tw-border-grayscale-500:hover {
1863
+ --tw-border-opacity: 1;
1864
+ border-color: rgb(208 208 208 / var(--tw-border-opacity));
1865
+ }
1853
1866
  .hover\:tw-bg-grayscale-200:hover {
1854
1867
  --tw-bg-opacity: 1;
1855
1868
  background-color: rgb(244 244 244 / var(--tw-bg-opacity));
@@ -1862,9 +1875,9 @@ video {
1862
1875
  --tw-bg-opacity: 1;
1863
1876
  background-color: rgb(230 230 230 / var(--tw-bg-opacity));
1864
1877
  }
1865
- .hover\:tw-text-grayscale-800:hover {
1866
- --tw-text-opacity: 1;
1867
- color: rgb(17 21 23 / var(--tw-text-opacity));
1878
+ .hover\:tw-bg-grayscale-500:hover {
1879
+ --tw-bg-opacity: 1;
1880
+ background-color: rgb(208 208 208 / var(--tw-bg-opacity));
1868
1881
  }
1869
1882
  .hover\:tw-text-white:hover {
1870
1883
  --tw-text-opacity: 1;
@@ -946,6 +946,9 @@ video {
946
946
  .tw-w-96 {
947
947
  width: 24rem;
948
948
  }
949
+ .tw-w-\[14rem\] {
950
+ width: 14rem;
951
+ }
949
952
  .tw-w-auto {
950
953
  width: auto;
951
954
  }
@@ -1210,6 +1213,9 @@ video {
1210
1213
  .tw-rounded-full {
1211
1214
  border-radius: 9999px;
1212
1215
  }
1216
+ .tw-rounded-lg {
1217
+ border-radius: 0.5rem;
1218
+ }
1213
1219
  .tw-rounded-md {
1214
1220
  border-radius: 0.375rem;
1215
1221
  }
@@ -1851,6 +1857,9 @@ video {
1851
1857
  .tw-font-bold {
1852
1858
  font-weight: 700;
1853
1859
  }
1860
+ .tw-font-medium {
1861
+ font-weight: 500;
1862
+ }
1854
1863
  .tw-font-normal {
1855
1864
  font-weight: 400;
1856
1865
  }
@@ -2062,6 +2071,10 @@ video {
2062
2071
  --tw-border-opacity: 1;
2063
2072
  border-color: rgb(235 238 243 / var(--tw-border-opacity));
2064
2073
  }
2074
+ .hover\:tw-border-grayscale-500:hover {
2075
+ --tw-border-opacity: 1;
2076
+ border-color: rgb(199 204 207 / var(--tw-border-opacity));
2077
+ }
2065
2078
  .hover\:tw-border-info-600:hover {
2066
2079
  --tw-border-opacity: 1;
2067
2080
  border-color: rgb(0 129 191 / var(--tw-border-opacity));
@@ -2098,6 +2111,10 @@ video {
2098
2111
  --tw-bg-opacity: 1;
2099
2112
  background-color: rgb(235 238 243 / var(--tw-bg-opacity));
2100
2113
  }
2114
+ .hover\:tw-bg-grayscale-500:hover {
2115
+ --tw-bg-opacity: 1;
2116
+ background-color: rgb(199 204 207 / var(--tw-bg-opacity));
2117
+ }
2101
2118
  .hover\:tw-bg-info-100:hover {
2102
2119
  --tw-bg-opacity: 1;
2103
2120
  background-color: rgb(230 246 253 / var(--tw-bg-opacity));
@@ -2122,6 +2139,10 @@ video {
2122
2139
  --tw-bg-opacity: 1;
2123
2140
  background-color: rgb(89 138 38 / var(--tw-bg-opacity));
2124
2141
  }
2142
+ .hover\:tw-bg-primary-700:hover {
2143
+ --tw-bg-opacity: 1;
2144
+ background-color: rgb(67 103 28 / var(--tw-bg-opacity));
2145
+ }
2125
2146
  .hover\:tw-bg-secondary-100:hover {
2126
2147
  --tw-bg-opacity: 1;
2127
2148
  background-color: rgb(218 218 218 / var(--tw-bg-opacity));
@@ -2138,6 +2159,10 @@ video {
2138
2159
  --tw-bg-opacity: 1;
2139
2160
  background-color: rgb(58 58 58 / var(--tw-bg-opacity));
2140
2161
  }
2162
+ .hover\:tw-bg-secondary-700:hover {
2163
+ --tw-bg-opacity: 1;
2164
+ background-color: rgb(43 43 43 / var(--tw-bg-opacity));
2165
+ }
2141
2166
  .hover\:tw-bg-success-100:hover {
2142
2167
  --tw-bg-opacity: 1;
2143
2168
  background-color: rgb(226 238 213 / var(--tw-bg-opacity));
@@ -2150,10 +2175,6 @@ video {
2150
2175
  --tw-bg-opacity: 1;
2151
2176
  background-color: rgb(194 145 33 / var(--tw-bg-opacity));
2152
2177
  }
2153
- .hover\:tw-text-grayscale-800:hover {
2154
- --tw-text-opacity: 1;
2155
- color: rgb(79 89 92 / var(--tw-text-opacity));
2156
- }
2157
2178
  .hover\:tw-text-primary-600:hover {
2158
2179
  --tw-text-opacity: 1;
2159
2180
  color: rgb(89 138 38 / var(--tw-text-opacity));
@@ -946,6 +946,9 @@ video {
946
946
  .tw-w-96 {
947
947
  width: 24rem;
948
948
  }
949
+ .tw-w-\[14rem\] {
950
+ width: 14rem;
951
+ }
949
952
  .tw-w-auto {
950
953
  width: auto;
951
954
  }
@@ -1210,6 +1213,9 @@ video {
1210
1213
  .tw-rounded-full {
1211
1214
  border-radius: 9999px;
1212
1215
  }
1216
+ .tw-rounded-lg {
1217
+ border-radius: 0.75rem;
1218
+ }
1213
1219
  .tw-rounded-md {
1214
1220
  border-radius: 0.375rem;
1215
1221
  }
@@ -1851,6 +1857,9 @@ video {
1851
1857
  .tw-font-bold {
1852
1858
  font-weight: 700;
1853
1859
  }
1860
+ .tw-font-medium {
1861
+ font-weight: 500;
1862
+ }
1854
1863
  .tw-font-normal {
1855
1864
  font-weight: 400;
1856
1865
  }
@@ -2062,6 +2071,10 @@ video {
2062
2071
  --tw-border-opacity: 1;
2063
2072
  border-color: rgb(227 227 227 / var(--tw-border-opacity));
2064
2073
  }
2074
+ .hover\:tw-border-grayscale-500:hover {
2075
+ --tw-border-opacity: 1;
2076
+ border-color: rgb(209 209 209 / var(--tw-border-opacity));
2077
+ }
2065
2078
  .hover\:tw-border-info-600:hover {
2066
2079
  --tw-border-opacity: 1;
2067
2080
  border-color: rgb(50 71 197 / var(--tw-border-opacity));
@@ -2098,6 +2111,10 @@ video {
2098
2111
  --tw-bg-opacity: 1;
2099
2112
  background-color: rgb(227 227 227 / var(--tw-bg-opacity));
2100
2113
  }
2114
+ .hover\:tw-bg-grayscale-500:hover {
2115
+ --tw-bg-opacity: 1;
2116
+ background-color: rgb(209 209 209 / var(--tw-bg-opacity));
2117
+ }
2101
2118
  .hover\:tw-bg-info-100:hover {
2102
2119
  --tw-bg-opacity: 1;
2103
2120
  background-color: rgb(236 238 254 / var(--tw-bg-opacity));
@@ -2122,6 +2139,10 @@ video {
2122
2139
  --tw-bg-opacity: 1;
2123
2140
  background-color: rgb(50 71 197 / var(--tw-bg-opacity));
2124
2141
  }
2142
+ .hover\:tw-bg-primary-700:hover {
2143
+ --tw-bg-opacity: 1;
2144
+ background-color: rgb(38 53 148 / var(--tw-bg-opacity));
2145
+ }
2125
2146
  .hover\:tw-bg-secondary-100:hover {
2126
2147
  --tw-bg-opacity: 1;
2127
2148
  background-color: rgb(236 236 236 / var(--tw-bg-opacity));
@@ -2138,6 +2159,10 @@ video {
2138
2159
  --tw-bg-opacity: 1;
2139
2160
  background-color: rgb(49 49 49 / var(--tw-bg-opacity));
2140
2161
  }
2162
+ .hover\:tw-bg-secondary-700:hover {
2163
+ --tw-bg-opacity: 1;
2164
+ background-color: rgb(37 37 37 / var(--tw-bg-opacity));
2165
+ }
2141
2166
  .hover\:tw-bg-success-100:hover {
2142
2167
  --tw-bg-opacity: 1;
2143
2168
  background-color: rgb(236 238 254 / var(--tw-bg-opacity));
@@ -2150,10 +2175,6 @@ video {
2150
2175
  --tw-bg-opacity: 1;
2151
2176
  background-color: rgb(182 128 6 / var(--tw-bg-opacity));
2152
2177
  }
2153
- .hover\:tw-text-grayscale-800:hover {
2154
- --tw-text-opacity: 1;
2155
- color: rgb(23 23 23 / var(--tw-text-opacity));
2156
- }
2157
2178
  .hover\:tw-text-primary-600:hover {
2158
2179
  --tw-text-opacity: 1;
2159
2180
  color: rgb(50 71 197 / var(--tw-text-opacity));
@@ -946,6 +946,9 @@ video {
946
946
  .tw-w-96 {
947
947
  width: 24rem;
948
948
  }
949
+ .tw-w-\[14rem\] {
950
+ width: 14rem;
951
+ }
949
952
  .tw-w-auto {
950
953
  width: auto;
951
954
  }
@@ -1210,6 +1213,9 @@ video {
1210
1213
  .tw-rounded-full {
1211
1214
  border-radius: 9999px;
1212
1215
  }
1216
+ .tw-rounded-lg {
1217
+ border-radius: 0.5rem;
1218
+ }
1213
1219
  .tw-rounded-md {
1214
1220
  border-radius: 0.375rem;
1215
1221
  }
@@ -1851,6 +1857,9 @@ video {
1851
1857
  .tw-font-bold {
1852
1858
  font-weight: 700;
1853
1859
  }
1860
+ .tw-font-medium {
1861
+ font-weight: 500;
1862
+ }
1854
1863
  .tw-font-normal {
1855
1864
  font-weight: 400;
1856
1865
  }
@@ -2062,6 +2071,10 @@ video {
2062
2071
  --tw-border-opacity: 1;
2063
2072
  border-color: rgb(230 230 230 / var(--tw-border-opacity));
2064
2073
  }
2074
+ .hover\:tw-border-grayscale-500:hover {
2075
+ --tw-border-opacity: 1;
2076
+ border-color: rgb(204 204 204 / var(--tw-border-opacity));
2077
+ }
2065
2078
  .hover\:tw-border-info-600:hover {
2066
2079
  --tw-border-opacity: 1;
2067
2080
  border-color: rgb(14 121 188 / var(--tw-border-opacity));
@@ -2098,6 +2111,10 @@ video {
2098
2111
  --tw-bg-opacity: 1;
2099
2112
  background-color: rgb(230 230 230 / var(--tw-bg-opacity));
2100
2113
  }
2114
+ .hover\:tw-bg-grayscale-500:hover {
2115
+ --tw-bg-opacity: 1;
2116
+ background-color: rgb(204 204 204 / var(--tw-bg-opacity));
2117
+ }
2101
2118
  .hover\:tw-bg-info-100:hover {
2102
2119
  --tw-bg-opacity: 1;
2103
2120
  background-color: rgb(207 234 251 / var(--tw-bg-opacity));
@@ -2122,6 +2139,10 @@ video {
2122
2139
  --tw-bg-opacity: 1;
2123
2140
  background-color: rgb(14 121 188 / var(--tw-bg-opacity));
2124
2141
  }
2142
+ .hover\:tw-bg-primary-700:hover {
2143
+ --tw-bg-opacity: 1;
2144
+ background-color: rgb(10 91 141 / var(--tw-bg-opacity));
2145
+ }
2125
2146
  .hover\:tw-bg-secondary-100:hover {
2126
2147
  --tw-bg-opacity: 1;
2127
2148
  background-color: rgb(223 226 230 / var(--tw-bg-opacity));
@@ -2138,6 +2159,10 @@ video {
2138
2159
  --tw-bg-opacity: 1;
2139
2160
  background-color: rgb(74 87 103 / var(--tw-bg-opacity));
2140
2161
  }
2162
+ .hover\:tw-bg-secondary-700:hover {
2163
+ --tw-bg-opacity: 1;
2164
+ background-color: rgb(56 65 77 / var(--tw-bg-opacity));
2165
+ }
2141
2166
  .hover\:tw-bg-success-100:hover {
2142
2167
  --tw-bg-opacity: 1;
2143
2168
  background-color: rgb(213 242 223 / var(--tw-bg-opacity));
@@ -2150,10 +2175,6 @@ video {
2150
2175
  --tw-bg-opacity: 1;
2151
2176
  background-color: rgb(194 140 34 / var(--tw-bg-opacity));
2152
2177
  }
2153
- .hover\:tw-text-grayscale-800:hover {
2154
- --tw-text-opacity: 1;
2155
- color: rgb(39 52 56 / var(--tw-text-opacity));
2156
- }
2157
2178
  .hover\:tw-text-primary-600:hover {
2158
2179
  --tw-text-opacity: 1;
2159
2180
  color: rgb(14 121 188 / var(--tw-text-opacity));
package/index.js CHANGED
@@ -31,6 +31,7 @@ export { default as Icon } from './src/atoms/components/Icon/Icon.vue';
31
31
  export { default as DcomIcon } from './src/atoms/components/design-com/Icon/Icon.vue';
32
32
  export { default as Modal } from './src/atoms/components/Modal/Modal.vue';
33
33
  export { default as Loader } from './src/atoms/components/Loader/Loader.vue';
34
+ export { default as AiPoweredLoader } from './src/atoms/components/AiPoweredLoader/AiPoweredLoader.vue';
34
35
  export { default as Tooltip } from './src/atoms/components/Tooltip/Tooltip.vue';
35
36
  export { default as Picture } from './src/atoms/components/Picture/Picture.vue';
36
37
  export { default as HelloBar } from './src/atoms/components/HelloBar/HelloBar.vue';