tide-design-system 2.0.22 → 2.0.24

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 (304) hide show
  1. package/.eslintrc.cjs +90 -0
  2. package/.storybook/main.ts +60 -0
  3. package/.storybook/preview.ts +252 -0
  4. package/dist/IconAccountBalance-0a430d19.cjs +2 -0
  5. package/dist/IconAdd-91de604b.cjs +2 -0
  6. package/dist/IconAiDescription-674cca6d.cjs +2 -0
  7. package/dist/IconAlignSpace-7ee811f8.cjs +2 -0
  8. package/dist/IconApplePay-92395240.cjs +2 -0
  9. package/dist/IconArrowBack-3d47d166.cjs +2 -0
  10. package/dist/IconArrowForward-613e128c.cjs +2 -0
  11. package/dist/IconArrowRight-9f39cdbb.cjs +2 -0
  12. package/dist/IconAssignment-915702cc.cjs +2 -0
  13. package/dist/IconAwardStar-447cf4fc.cjs +2 -0
  14. package/dist/IconBookmark-3f6454d9.cjs +2 -0
  15. package/dist/IconCalendarMonth-bb5bbb9b.cjs +2 -0
  16. package/dist/IconCall-08f3119f.cjs +2 -0
  17. package/dist/IconCheck-910929df.cjs +2 -0
  18. package/dist/IconChevronLeft-6626777e.cjs +2 -0
  19. package/dist/IconChevronRight-91bc7ad1.cjs +2 -0
  20. package/dist/IconClear-489c5a46.cjs +2 -0
  21. package/dist/IconClose-538a540f.cjs +2 -0
  22. package/dist/IconCycle-7b7c7325.cjs +2 -0
  23. package/dist/IconDelete-5cc224a1.cjs +2 -0
  24. package/dist/IconDiamond-4e736f5f.cjs +2 -0
  25. package/dist/IconDraft-26850369.cjs +2 -0
  26. package/dist/IconEdit-b4d5f175.cjs +2 -0
  27. package/dist/IconError-4ad48be1.cjs +2 -0
  28. package/dist/IconExpandContent-03a28bfb.cjs +2 -0
  29. package/dist/IconExpandLess-59a80211.cjs +2 -0
  30. package/dist/IconExpandMore-edf55cdd.cjs +2 -0
  31. package/dist/IconFacebook-9c43095a.cjs +2 -0
  32. package/dist/IconFavorite-43091cef.cjs +2 -0
  33. package/dist/IconFavoriteFilled-71277849.cjs +2 -0
  34. package/dist/IconFormatBold-4faa5f99.cjs +2 -0
  35. package/dist/IconFormatItalic-fee490fc.cjs +2 -0
  36. package/dist/IconFormatListBulleted-d0a77d0e.cjs +2 -0
  37. package/dist/IconForum-22217aa0.cjs +2 -0
  38. package/dist/IconGavel-aacae653.cjs +2 -0
  39. package/dist/IconGoogle-77ec192e.cjs +2 -0
  40. package/dist/IconGooglePay-049e93ec.cjs +2 -0
  41. package/dist/IconGrid-1693599f.cjs +2 -0
  42. package/dist/IconHeight-d8ee424f.cjs +2 -0
  43. package/dist/IconHelp-43137a66.cjs +2 -0
  44. package/dist/IconInfo-2d14575c.cjs +2 -0
  45. package/dist/IconInsertText-14c80b9a.cjs +2 -0
  46. package/dist/IconInstagram-43bb02ea.cjs +2 -0
  47. package/dist/IconIosShare-526a016a.cjs +2 -0
  48. package/dist/IconLayout-e663120e.cjs +2 -0
  49. package/dist/IconLinkedIn-088a3792.cjs +2 -0
  50. package/dist/IconLocalShipping-9bca5a95.cjs +2 -0
  51. package/dist/IconLock-1c996287.cjs +2 -0
  52. package/dist/IconMail-f2b8fee4.cjs +2 -0
  53. package/dist/IconMenu-c7c2b143.cjs +2 -0
  54. package/dist/IconMoreHoriz-2c82da62.cjs +2 -0
  55. package/dist/IconNotifications-01f7658b.cjs +2 -0
  56. package/dist/IconOpenInNew-9032f1db.cjs +2 -0
  57. package/dist/IconPalette-269c7286.cjs +2 -0
  58. package/dist/IconPaypal-427e8667.cjs +2 -0
  59. package/dist/IconPerson-ee87961e.cjs +2 -0
  60. package/dist/IconPhotoCamera-56cb060d.cjs +2 -0
  61. package/dist/IconPinterest-87034fbf.cjs +2 -0
  62. package/dist/IconPlayArrow-80f601bf.cjs +2 -0
  63. package/dist/IconRemove-73b05132.cjs +2 -0
  64. package/dist/IconRoundedCorners-53cb2cfc.cjs +2 -0
  65. package/dist/IconRuler-5feb5a83.cjs +2 -0
  66. package/dist/IconSearch-45b2c0e5.cjs +2 -0
  67. package/dist/IconSeating-bc19b98f.cjs +2 -0
  68. package/dist/IconSell-bcede586.cjs +2 -0
  69. package/dist/IconShare-ff50a973.cjs +2 -0
  70. package/dist/IconShoppingCart-eee95744.cjs +2 -0
  71. package/dist/IconSms-0575f458.cjs +2 -0
  72. package/dist/IconStar-e2a88836.cjs +2 -0
  73. package/dist/IconSwapVert-29258e96.cjs +2 -0
  74. package/dist/IconThreeDRotation-7be89ff8.cjs +2 -0
  75. package/dist/IconTrophy-4d05eb75.cjs +2 -0
  76. package/dist/IconTune-1276696d.cjs +2 -0
  77. package/dist/IconTwitter-55b8ba63.cjs +2 -0
  78. package/dist/IconVideocam-f5b07935.cjs +2 -0
  79. package/dist/IconViewInAr-a583aff8.cjs +2 -0
  80. package/dist/IconVisibility-4984bcac.cjs +2 -0
  81. package/dist/IconVolumeOff-35d350ee.cjs +2 -0
  82. package/dist/IconVolumeOn-386ad18b.cjs +2 -0
  83. package/dist/IconWarning-54f3a9ac.cjs +2 -0
  84. package/dist/IconWeight-c6ddd367.cjs +2 -0
  85. package/dist/IconWidth-a556befc.cjs +2 -0
  86. package/dist/IconWidth-c81dbc7a.js +16 -0
  87. package/dist/IconYoutube-ed951c21.cjs +2 -0
  88. package/dist/css/grid-layout.css +6 -2
  89. package/dist/tide-design-system.cjs +2 -0
  90. package/dist/tide-design-system.esm.d.ts +1925 -0
  91. package/dist/tide-design-system.esm.js +2168 -0
  92. package/index.ts +122 -0
  93. package/package.json +8 -12
  94. package/src/assets/css/animation.css +14 -0
  95. package/src/assets/css/dynamic-buttons.css +79 -0
  96. package/src/assets/css/dynamic-utilities.css +39 -0
  97. package/src/assets/css/grid-layout.css +71 -0
  98. package/src/assets/css/main.css +5 -0
  99. package/src/assets/css/realm/aero.css +42 -0
  100. package/src/assets/css/realm/atv.css +43 -0
  101. package/src/assets/css/realm/boatmart.css +42 -0
  102. package/src/assets/css/realm/cycle.css +42 -0
  103. package/src/assets/css/realm/equip.css +42 -0
  104. package/src/assets/css/realm/pwc.css +42 -0
  105. package/src/assets/css/realm/rv.css +50 -0
  106. package/src/assets/css/realm/snow.css +42 -0
  107. package/src/assets/css/realm/truck.css +42 -0
  108. package/src/assets/css/reset.css +79 -0
  109. package/src/assets/css/storybook.css +9 -0
  110. package/src/assets/css/utilities.css +1602 -0
  111. package/src/assets/css/variables.css +118 -0
  112. package/src/assets/svg/icons/IconAccountBalance.svg +5 -0
  113. package/src/assets/svg/icons/IconAdd.svg +3 -0
  114. package/src/assets/svg/icons/IconAiDescription.svg +7 -0
  115. package/src/assets/svg/icons/IconAlignSpace.svg +3 -0
  116. package/src/assets/svg/icons/IconApplePay.svg +5 -0
  117. package/src/assets/svg/icons/IconArrowBack.svg +3 -0
  118. package/src/assets/svg/icons/IconArrowForward.svg +3 -0
  119. package/src/assets/svg/icons/IconArrowRight.svg +3 -0
  120. package/src/assets/svg/icons/IconAssignment.svg +5 -0
  121. package/src/assets/svg/icons/IconAwardStar.svg +5 -0
  122. package/src/assets/svg/icons/IconBookmark.svg +5 -0
  123. package/src/assets/svg/icons/IconCalendarMonth.svg +5 -0
  124. package/src/assets/svg/icons/IconCall.svg +5 -0
  125. package/src/assets/svg/icons/IconCheck.svg +3 -0
  126. package/src/assets/svg/icons/IconChevronLeft.svg +3 -0
  127. package/src/assets/svg/icons/IconChevronRight.svg +3 -0
  128. package/src/assets/svg/icons/IconClear.svg +5 -0
  129. package/src/assets/svg/icons/IconClose.svg +3 -0
  130. package/src/assets/svg/icons/IconCycle.svg +5 -0
  131. package/src/assets/svg/icons/IconDelete.svg +5 -0
  132. package/src/assets/svg/icons/IconDiamond.svg +5 -0
  133. package/src/assets/svg/icons/IconDraft.svg +3 -0
  134. package/src/assets/svg/icons/IconEdit.svg +5 -0
  135. package/src/assets/svg/icons/IconError.svg +5 -0
  136. package/src/assets/svg/icons/IconExpandContent.svg +3 -0
  137. package/src/assets/svg/icons/IconExpandLess.svg +3 -0
  138. package/src/assets/svg/icons/IconExpandMore.svg +3 -0
  139. package/src/assets/svg/icons/IconFacebook.svg +5 -0
  140. package/src/assets/svg/icons/IconFavorite.svg +5 -0
  141. package/src/assets/svg/icons/IconFavoriteFilled.svg +5 -0
  142. package/src/assets/svg/icons/IconFormatBold.svg +5 -0
  143. package/src/assets/svg/icons/IconFormatItalic.svg +3 -0
  144. package/src/assets/svg/icons/IconFormatListBulleted.svg +5 -0
  145. package/src/assets/svg/icons/IconForum.svg +5 -0
  146. package/src/assets/svg/icons/IconGavel.svg +5 -0
  147. package/src/assets/svg/icons/IconGoogle.svg +18 -0
  148. package/src/assets/svg/icons/IconGooglePay.svg +5 -0
  149. package/src/assets/svg/icons/IconGrid.svg +3 -0
  150. package/src/assets/svg/icons/IconHeight.svg +3 -0
  151. package/src/assets/svg/icons/IconHelp.svg +5 -0
  152. package/src/assets/svg/icons/IconInfo.svg +5 -0
  153. package/src/assets/svg/icons/IconInsertText.svg +5 -0
  154. package/src/assets/svg/icons/IconInstagram.svg +5 -0
  155. package/src/assets/svg/icons/IconIosShare.svg +5 -0
  156. package/src/assets/svg/icons/IconLayout.svg +5 -0
  157. package/src/assets/svg/icons/IconLinkedIn.svg +5 -0
  158. package/src/assets/svg/icons/IconLocalShipping.svg +5 -0
  159. package/src/assets/svg/icons/IconLock.svg +5 -0
  160. package/src/assets/svg/icons/IconMail.svg +5 -0
  161. package/src/assets/svg/icons/IconMenu.svg +3 -0
  162. package/src/assets/svg/icons/IconMoreHoriz.svg +5 -0
  163. package/src/assets/svg/icons/IconNotifications.svg +5 -0
  164. package/src/assets/svg/icons/IconOpenInNew.svg +5 -0
  165. package/src/assets/svg/icons/IconPalette.svg +5 -0
  166. package/src/assets/svg/icons/IconPaypal.svg +5 -0
  167. package/src/assets/svg/icons/IconPerson.svg +5 -0
  168. package/src/assets/svg/icons/IconPhotoCamera.svg +5 -0
  169. package/src/assets/svg/icons/IconPinterest.svg +5 -0
  170. package/src/assets/svg/icons/IconPlayArrow.svg +3 -0
  171. package/src/assets/svg/icons/IconRemove.svg +3 -0
  172. package/src/assets/svg/icons/IconRoundedCorners.svg +5 -0
  173. package/src/assets/svg/icons/IconRuler.svg +3 -0
  174. package/src/assets/svg/icons/IconSearch.svg +5 -0
  175. package/src/assets/svg/icons/IconSeating.svg +3 -0
  176. package/src/assets/svg/icons/IconSell.svg +5 -0
  177. package/src/assets/svg/icons/IconShare.svg +5 -0
  178. package/src/assets/svg/icons/IconShoppingCart.svg +5 -0
  179. package/src/assets/svg/icons/IconSms.svg +5 -0
  180. package/src/assets/svg/icons/IconStar.svg +5 -0
  181. package/src/assets/svg/icons/IconSwapVert.svg +5 -0
  182. package/src/assets/svg/icons/IconThreeDRotation.svg +18 -0
  183. package/src/assets/svg/icons/IconTrophy.svg +5 -0
  184. package/src/assets/svg/icons/IconTune.svg +5 -0
  185. package/src/assets/svg/icons/IconTwitter.svg +5 -0
  186. package/src/assets/svg/icons/IconVideocam.svg +5 -0
  187. package/src/assets/svg/icons/IconViewInAr.svg +5 -0
  188. package/src/assets/svg/icons/IconVisibility.svg +5 -0
  189. package/src/assets/svg/icons/IconVolumeOff.svg +5 -0
  190. package/src/assets/svg/icons/IconVolumeOn.svg +5 -0
  191. package/src/assets/svg/icons/IconWarning.svg +5 -0
  192. package/src/assets/svg/icons/IconWeight.svg +3 -0
  193. package/src/assets/svg/icons/IconWidth.svg +3 -0
  194. package/src/assets/svg/icons/IconYoutube.svg +5 -0
  195. package/src/components/TideAccordionItem.vue +105 -0
  196. package/src/components/TideAlert.vue +124 -0
  197. package/src/components/TideBackgroundImage.vue +44 -0
  198. package/src/components/TideBadge.vue +30 -0
  199. package/src/components/TideBadgePremium.vue +31 -0
  200. package/src/components/TideBadgeTrustedPartner.vue +38 -0
  201. package/src/components/TideBreadCrumbs.vue +53 -0
  202. package/src/components/TideButton.vue +67 -0
  203. package/src/components/TideButtonIcon.vue +52 -0
  204. package/src/components/TideButtonPagination.vue +71 -0
  205. package/src/components/TideCard.vue +19 -0
  206. package/src/components/TideCarousel.vue +188 -0
  207. package/src/components/TideChipAction.vue +48 -0
  208. package/src/components/TideChipFilter.vue +55 -0
  209. package/src/components/TideChipInput.vue +44 -0
  210. package/src/components/TideColumns.vue +53 -0
  211. package/src/components/TideDivider.vue +24 -0
  212. package/src/components/TideIcon.vue +58 -0
  213. package/src/components/TideImage.vue +44 -0
  214. package/src/components/TideIndicator.vue +57 -0
  215. package/src/components/TideInputCheckbox.vue +145 -0
  216. package/src/components/TideInputRadio.vue +87 -0
  217. package/src/components/TideInputSelect.vue +204 -0
  218. package/src/components/TideInputText.vue +292 -0
  219. package/src/components/TideInputTextarea.vue +196 -0
  220. package/src/components/TideLink.vue +66 -0
  221. package/src/components/TideModal.vue +187 -0
  222. package/src/components/TidePagination.vue +67 -0
  223. package/src/components/TideSeoLinks.vue +58 -0
  224. package/src/components/TideTabs.vue +89 -0
  225. package/src/components/TideToggle.vue +95 -0
  226. package/src/docs/development.md +51 -0
  227. package/src/docs/integration.md +79 -0
  228. package/src/docs/storybook.md +39 -0
  229. package/src/stories/DemoCssUtilities.stories.ts +154 -0
  230. package/src/stories/DemoCssUtilitiesByTextInput.stories.ts +61 -0
  231. package/src/stories/FoundationsBorder.stories.ts +230 -0
  232. package/src/stories/FoundationsGap.stories.ts +180 -0
  233. package/src/stories/FoundationsMargin.stories.ts +155 -0
  234. package/src/stories/FoundationsPadding.stories.ts +108 -0
  235. package/src/stories/FoundationsShadow.stories.ts +84 -0
  236. package/src/stories/FoundationsTypography.stories.ts +172 -0
  237. package/src/stories/Template.stories.ts +71 -0
  238. package/src/stories/TideAccordionItem.stories.ts +68 -0
  239. package/src/stories/TideAlert.stories.ts +58 -0
  240. package/src/stories/TideBackgroundImage.stories.ts +53 -0
  241. package/src/stories/TideBadge.stories.ts +31 -0
  242. package/src/stories/TideBadgePremium.stories.ts +31 -0
  243. package/src/stories/TideBadgeTrustedPartner.stories.ts +33 -0
  244. package/src/stories/TideBreadCrumbs.stories.ts +43 -0
  245. package/src/stories/TideButton.stories.ts +118 -0
  246. package/src/stories/TideButtonIcon.stories.ts +103 -0
  247. package/src/stories/TideButtonPagination.stories.ts +99 -0
  248. package/src/stories/TideCard.stories.ts +38 -0
  249. package/src/stories/TideCarousel.stories.ts +130 -0
  250. package/src/stories/TideChipAction.stories.ts +46 -0
  251. package/src/stories/TideChipFilter.stories.ts +59 -0
  252. package/src/stories/TideChipInput.stories.ts +42 -0
  253. package/src/stories/TideColumns.stories.ts +90 -0
  254. package/src/stories/TideDivider.stories.ts +46 -0
  255. package/src/stories/TideIcon.stories.ts +29 -0
  256. package/src/stories/TideIndicator.stories.ts +31 -0
  257. package/src/stories/TideInputCheckbox.stories.ts +86 -0
  258. package/src/stories/TideInputRadio.stories.ts +71 -0
  259. package/src/stories/TideInputSelect.stories.ts +145 -0
  260. package/src/stories/TideInputText.stories.ts +181 -0
  261. package/src/stories/TideInputTextarea.stories.ts +116 -0
  262. package/src/stories/TideLink.stories.ts +137 -0
  263. package/src/stories/TideModal.stories.ts +122 -0
  264. package/src/stories/TidePagination.stories.ts +83 -0
  265. package/src/stories/TideSeoLinks.stories.ts +67 -0
  266. package/src/stories/TideTabs.stories.ts +100 -0
  267. package/src/stories/TideToggle.stories.ts +69 -0
  268. package/src/stories/Welcome.mdx +17 -0
  269. package/src/utilities/format.ts +184 -0
  270. package/src/utilities/storybook.ts +295 -0
  271. package/src/utilities/validation.ts +197 -0
  272. package/tests/utilities-format.spec.ts +430 -0
  273. package/tsconfig.app.json +14 -0
  274. package/tsconfig.config.json +12 -0
  275. package/tsconfig.json +22 -0
  276. package/tsconfig.vitest.json +10 -0
  277. package/vite.config.ts +43 -0
  278. package/dist/IconWidth-023f69f2.js +0 -16
  279. package/dist/tide-design-system.js +0 -2168
  280. /package/{dist → src}/types/Alert.ts +0 -0
  281. /package/{dist → src}/types/Badge.ts +0 -0
  282. /package/{dist → src}/types/BreadCrumb.ts +0 -0
  283. /package/{dist → src}/types/Detail.ts +0 -0
  284. /package/{dist → src}/types/Element.ts +0 -0
  285. /package/{dist → src}/types/FacetRange.ts +0 -0
  286. /package/{dist → src}/types/Field.ts +0 -0
  287. /package/{dist → src}/types/Form.ts +0 -0
  288. /package/{dist → src}/types/Formatted.ts +0 -0
  289. /package/{dist → src}/types/Icon.ts +0 -0
  290. /package/{dist → src}/types/Link.ts +0 -0
  291. /package/{dist → src}/types/ListingMedia.ts +0 -0
  292. /package/{dist → src}/types/Orientation.ts +0 -0
  293. /package/{dist → src}/types/Priority.ts +0 -0
  294. /package/{dist → src}/types/Raw.ts +0 -0
  295. /package/{dist → src}/types/Realm.ts +0 -0
  296. /package/{dist → src}/types/RealmConfig.ts +0 -0
  297. /package/{dist → src}/types/Select.ts +0 -0
  298. /package/{dist → src}/types/Size.ts +0 -0
  299. /package/{dist → src}/types/Storybook.ts +0 -0
  300. /package/{dist → src}/types/Styles.ts +0 -0
  301. /package/{dist → src}/types/Tab.ts +0 -0
  302. /package/{dist → src}/types/Target.ts +0 -0
  303. /package/{dist → src}/types/TextInput.ts +0 -0
  304. /package/{dist → src}/types/Validation.ts +0 -0
@@ -0,0 +1,154 @@
1
+ /* eslint vue/sort-keys: 0 */
2
+
3
+ import type { StoryContext } from '@storybook/vue3';
4
+
5
+ import * as STYLES from '@/types/Storybook';
6
+ import Border from '@/stories/FoundationsBorder.stories';
7
+ import Gap from '@/stories/FoundationsGap.stories';
8
+ import Margin from '@/stories/FoundationsMargin.stories';
9
+ import Padding from '@/stories/FoundationsPadding.stories';
10
+ import Shadow from '@/stories/FoundationsShadow.stories';
11
+ import { argTypeDimension, formatArgType, prependKeyValue, prependNoneAsEmpty } from '@/utilities/storybook';
12
+
13
+ const BORDER_RADIUS = prependNoneAsEmpty(STYLES.BORDER_RADIUS);
14
+ const BORDER_SIDE = prependNoneAsEmpty(STYLES.BORDER_SIDE);
15
+ const BORDER_WIDTH = prependNoneAsEmpty(STYLES.BORDER_WIDTH);
16
+ const DISPLAY = prependKeyValue(STYLES.DISPLAY, { 'None (Unspecified)': '' });
17
+ const FLEX_AXIS1 = prependNoneAsEmpty(STYLES.FLEX_AXIS1);
18
+ const FLEX_AXIS2 = prependNoneAsEmpty(STYLES.FLEX_AXIS2);
19
+ const FLEX_DIRECTION = prependNoneAsEmpty(STYLES.FLEX_DIRECTION);
20
+ const GAP = prependNoneAsEmpty(STYLES.GAP);
21
+ const MARGIN = prependNoneAsEmpty(STYLES.MARGIN);
22
+ const PADDING = prependNoneAsEmpty(STYLES.PADDING);
23
+ const SHADOW = prependNoneAsEmpty(STYLES.SHADOW);
24
+ const TYPOGRAPHY = prependNoneAsEmpty(STYLES.TYPOGRAPHY);
25
+
26
+ const formatArgs = (args: any) => {
27
+ args.class = formatClassNames(args);
28
+ args.style = formatStyles(args);
29
+
30
+ return { args };
31
+ };
32
+
33
+ const formatClassNames = (args: any) => {
34
+ const classNames: string[] = [];
35
+
36
+ if (args.borderRadius) classNames.push(args.borderRadius);
37
+ if (args.display) classNames.push(args.display);
38
+ if (args.flexAxis1) classNames.push(args.flexAxis1);
39
+ if (args.flexAxis2) classNames.push(args.flexAxis2);
40
+ if (args.flexDirection) classNames.push(args.flexDirection);
41
+ if (args.flexGap) classNames.push(args.flexGap);
42
+ if (args.flexWrap) classNames.push('tide-flex-wrap');
43
+ if (args.typography) classNames.push(args.typography.join(' '));
44
+ if (args.margin) classNames.push(args.margin);
45
+ if (args.padding) classNames.push(args.padding);
46
+ if (args.shadow) classNames.push(args.shadow);
47
+
48
+ if (args.borderSide && args.borderWidth) {
49
+ classNames.push(`${args.borderSide}${args.borderWidth}`);
50
+ }
51
+
52
+ return classNames.join(' ');
53
+ };
54
+
55
+ const formatSnippet = (code: string, context: StoryContext) => {
56
+ const { args } = context;
57
+ const styles = formatStyles(args);
58
+ const styleAttribute = styles ? ` style="${styles}"` : '';
59
+
60
+ return `<div class="${formatClassNames(args)}"${styleAttribute}>${args.children}</div>`;
61
+ };
62
+
63
+ const formatStyles = (args: any) => {
64
+ const styles: string[] = [];
65
+
66
+ if (args.width) styles.push(`width: ${args.width}px;`);
67
+ if (args.height) styles.push(`height: ${args.height}px;`);
68
+
69
+ return styles.length > 0 ? styles.join(' ') : null;
70
+ };
71
+
72
+ const parameters = {
73
+ docs: {
74
+ source: {
75
+ format: false,
76
+ language: 'html',
77
+ transform: formatSnippet,
78
+ },
79
+ },
80
+ };
81
+
82
+ const render = (args: any) => ({
83
+ setup() {
84
+ return formatArgs(args);
85
+ },
86
+ template: `<div v-bind="args">${args.children}</div>`,
87
+ updated() {
88
+ return formatArgs(args);
89
+ },
90
+ });
91
+
92
+ export default {
93
+ argTypes: {
94
+ ...Border.argTypes,
95
+ ...Shadow.argTypes,
96
+ ...Gap.argTypes,
97
+ ...Padding.argTypes,
98
+ children: {
99
+ control: 'text',
100
+ defaultValue: 'Demo',
101
+ description: 'Markup or text content<br />(See "Demo" story for updatable preview)',
102
+ name: 'Children',
103
+ table: {
104
+ defaultValue: { summary: 'None' },
105
+ type: { summary: 'HTML' },
106
+ },
107
+ },
108
+ display: {
109
+ ...formatArgType({ DISPLAY }),
110
+ description: 'Dictates layout rules that govern relationship between element, parent, and/or children',
111
+ name: 'Display',
112
+ },
113
+ height: {
114
+ ...argTypeDimension,
115
+ description: 'Apply a "height" to the style attribute<br />(for demonstration purposes only)',
116
+ name: 'Height',
117
+ },
118
+ margin: {
119
+ ...Margin.argTypes.margin,
120
+ },
121
+ typography: {
122
+ ...formatArgType({ TYPOGRAPHY }),
123
+ description: `Applies font rules`,
124
+ name: 'Typography',
125
+ },
126
+ width: {
127
+ ...argTypeDimension,
128
+ description: 'Apply a "width" to the style attribute<br />(for demonstration purposes only)',
129
+ name: 'Width',
130
+ },
131
+ },
132
+ args: {
133
+ borderRadius: BORDER_RADIUS.None,
134
+ borderSide: BORDER_SIDE.None,
135
+ borderWidth: BORDER_WIDTH.None,
136
+ children: 'Demo',
137
+ display: DISPLAY['None (Unspecified)'],
138
+ flexAxis1: FLEX_AXIS1.None,
139
+ flexAxis2: FLEX_AXIS2.None,
140
+ flexDirection: FLEX_DIRECTION.None,
141
+ flexGap: GAP.None,
142
+ flexWrap: undefined,
143
+ typography: TYPOGRAPHY.None,
144
+ margin: MARGIN.None,
145
+ padding: PADDING.None,
146
+ shadow: SHADOW.None,
147
+ },
148
+ parameters,
149
+ render,
150
+ tags: ['autodocs'],
151
+ title: 'Proof of Concept/CSS Utilities Demo',
152
+ };
153
+
154
+ export const Demo = {};
@@ -0,0 +1,61 @@
1
+ import type { StoryContext } from '@storybook/vue3';
2
+
3
+ const formatArgs = (args: any) => {
4
+ const classNames: string[] = [];
5
+
6
+ if (args.utilities) classNames.push(args.utilities);
7
+
8
+ if (classNames.length > 0) {
9
+ // TODO: Add custom class name sorting?!
10
+
11
+ args.class = classNames.join(' ');
12
+ }
13
+
14
+ return { args };
15
+ };
16
+
17
+ const formatSnippet = (code: string, context: StoryContext) => {
18
+ const { args } = context;
19
+
20
+ const classNames = args.classNames || '';
21
+
22
+ return `<div class="${classNames}">Demo</div>`;
23
+ };
24
+
25
+ export default {
26
+ argTypes: {
27
+ utilities: {
28
+ control: 'text',
29
+ isCss: true,
30
+ table: {
31
+ defaultValue: { summary: 'None' },
32
+ type: { summary: 'string' },
33
+ },
34
+ },
35
+ },
36
+ args: {
37
+ utilities: '',
38
+ },
39
+ parameters: {
40
+ docs: {
41
+ source: {
42
+ format: false,
43
+ language: 'html',
44
+ transform: formatSnippet,
45
+ },
46
+ },
47
+ },
48
+ render: (args: any) => ({
49
+ setup() {
50
+ return formatArgs(args);
51
+ },
52
+ template: '<div v-bind="args">Demo</div>',
53
+ updated() {
54
+ return formatArgs(args);
55
+ },
56
+ }),
57
+ tags: ['autodocs'],
58
+ title: 'Proof of Concept/CSS Utilities By Text Input',
59
+ };
60
+
61
+ export const Demo = {};
@@ -0,0 +1,230 @@
1
+ import type { StoryContext } from '@storybook/vue3';
2
+
3
+ import * as STYLES from '@/types/Storybook';
4
+ import { formatArgType, getConstantsByValues, prependNoneAsEmpty } from '@/utilities/storybook';
5
+
6
+ const BORDER_RADIUS = prependNoneAsEmpty(STYLES.BORDER_RADIUS);
7
+ const BORDER_SIDE = prependNoneAsEmpty(STYLES.BORDER_SIDE);
8
+ const BORDER_WIDTH = prependNoneAsEmpty(STYLES.BORDER_WIDTH);
9
+
10
+ const formatArgs = (args: any) => {
11
+ args.class = formatClassNames(args).join(' ');
12
+
13
+ return { args };
14
+ };
15
+
16
+ const formatClassNames = (args: any) => {
17
+ const classNames: string[] = [];
18
+
19
+ if (args.borderSide === BORDER_SIDE.Full && args.borderWidth !== BORDER_WIDTH.None && args.borderRadius) {
20
+ classNames.push(args.borderRadius);
21
+ }
22
+
23
+ if (args.borderSide && args.borderWidth) {
24
+ classNames.push(`${args.borderSide}-${args.borderWidth}`);
25
+ }
26
+
27
+ return classNames;
28
+ };
29
+
30
+ const formatClassNamesSnippet = (args: any) => {
31
+ const classNames = formatClassNames(args);
32
+
33
+ return getConstantsByValues(classNames);
34
+ };
35
+
36
+ const formatSnippet = (code: string, context: StoryContext) => {
37
+ const { args } = context;
38
+ const classNames = formatClassNamesSnippet(args);
39
+
40
+ return classNames.length ? `<div :class="[${classNames.join(', ')}]">Demo</div>` : '<div>Demo</div>';
41
+ };
42
+
43
+ const parameters = {
44
+ docs: {
45
+ source: {
46
+ format: false,
47
+ language: 'html',
48
+ transform: formatSnippet,
49
+ },
50
+ },
51
+ };
52
+
53
+ const render = (args: any) => ({
54
+ setup() {
55
+ return formatArgs(args);
56
+ },
57
+ template: '<div class="tide-display-inline-block tide-padding-1" v-bind="args">Demo</div>',
58
+ updated() {
59
+ return formatArgs(args);
60
+ },
61
+ });
62
+
63
+ export default {
64
+ argTypes: {
65
+ borderRadius: {
66
+ ...formatArgType({ BORDER_RADIUS }),
67
+ description: 'Dictates severity of rounded corners',
68
+ if: { arg: 'borderSide', eq: BORDER_SIDE.Full },
69
+ name: 'Border Radius',
70
+ },
71
+ borderSide: {
72
+ ...formatArgType({ BORDER_SIDE }),
73
+ description: 'Dictates to which edge(s) the border applies',
74
+ if: { arg: 'borderWidth', neq: BORDER_WIDTH.None },
75
+ name: 'Border Side',
76
+ },
77
+ borderWidth: {
78
+ ...formatArgType({ BORDER_WIDTH }),
79
+ description: 'Applies a border width',
80
+ name: 'Border Width',
81
+ },
82
+ },
83
+ args: {
84
+ borderRadius: BORDER_RADIUS.None,
85
+ borderSide: BORDER_SIDE.None,
86
+ borderWidth: BORDER_WIDTH.None,
87
+ },
88
+ parameters,
89
+ render,
90
+ tags: ['autodocs'],
91
+ title: 'Foundations/Border',
92
+ };
93
+
94
+ export const Default = {};
95
+
96
+ export const BorderTop1px = {
97
+ args: {
98
+ borderSide: BORDER_SIDE.Top,
99
+ borderWidth: BORDER_WIDTH['1px'],
100
+ },
101
+ name: 'Border Top 1px',
102
+ };
103
+
104
+ export const BorderRight1px = {
105
+ args: {
106
+ borderSide: BORDER_SIDE.Right,
107
+ borderWidth: BORDER_WIDTH['1px'],
108
+ },
109
+ name: 'Border Right 1px',
110
+ };
111
+
112
+ export const BorderBottom1px = {
113
+ args: {
114
+ borderSide: BORDER_SIDE.Bottom,
115
+ borderWidth: BORDER_WIDTH['1px'],
116
+ },
117
+ name: 'Border Bottom 1px',
118
+ };
119
+
120
+ export const BorderLeft1px = {
121
+ args: {
122
+ borderSide: BORDER_SIDE.Left,
123
+ borderWidth: BORDER_WIDTH['1px'],
124
+ },
125
+ name: 'Border Left 1px',
126
+ };
127
+
128
+ export const BorderFull1px = {
129
+ args: {
130
+ borderSide: BORDER_SIDE.Full,
131
+ borderWidth: BORDER_WIDTH['1px'],
132
+ },
133
+ name: 'Border Full 1px',
134
+ };
135
+
136
+ export const BorderTop2px = {
137
+ args: {
138
+ borderSide: BORDER_SIDE.Top,
139
+ borderWidth: BORDER_WIDTH['2px'],
140
+ },
141
+ name: 'Border Top 2px',
142
+ };
143
+
144
+ export const BorderRight2px = {
145
+ args: {
146
+ borderSide: BORDER_SIDE.Right,
147
+ borderWidth: BORDER_WIDTH['2px'],
148
+ },
149
+ name: 'Border Right 2px',
150
+ };
151
+
152
+ export const BorderBottom2px = {
153
+ args: {
154
+ borderSide: BORDER_SIDE.Bottom,
155
+ borderWidth: BORDER_WIDTH['2px'],
156
+ },
157
+ name: 'Border Bottom 2px',
158
+ };
159
+
160
+ export const BorderLeft2px = {
161
+ args: {
162
+ borderSide: BORDER_SIDE.Left,
163
+ borderWidth: BORDER_WIDTH['2px'],
164
+ },
165
+ name: 'Border Left 2px',
166
+ };
167
+
168
+ export const BorderFull2px = {
169
+ args: {
170
+ borderSide: BORDER_SIDE.Full,
171
+ borderWidth: BORDER_WIDTH['2px'],
172
+ },
173
+ name: 'Border Full 2px',
174
+ };
175
+
176
+ export const RadiusQuarter = {
177
+ args: {
178
+ borderRadius: BORDER_RADIUS['0.25 REM'],
179
+ borderSide: BORDER_SIDE.Full,
180
+ borderWidth: BORDER_WIDTH['1px'],
181
+ },
182
+ name: 'Border Radius 0.25 REM',
183
+ };
184
+
185
+ export const RadiusHalf = {
186
+ args: {
187
+ borderRadius: BORDER_RADIUS['0.5 REM'],
188
+ borderSide: BORDER_SIDE.Full,
189
+ borderWidth: BORDER_WIDTH['1px'],
190
+ },
191
+ name: 'Border Radius 0.5 REM',
192
+ };
193
+
194
+ export const Radius1 = {
195
+ args: {
196
+ borderRadius: BORDER_RADIUS['1 REM'],
197
+ borderSide: BORDER_SIDE.Full,
198
+ borderWidth: BORDER_WIDTH['1px'],
199
+ },
200
+ name: 'Border Radius 1 REM',
201
+ };
202
+
203
+ export const RadiusFull = {
204
+ args: {
205
+ borderRadius: BORDER_RADIUS.Full,
206
+ borderSide: BORDER_SIDE.Full,
207
+ borderWidth: BORDER_WIDTH['1px'],
208
+ },
209
+ name: 'Border Radius Full',
210
+ };
211
+
212
+ export const Circle = {
213
+ args: {
214
+ borderRadius: BORDER_RADIUS.Full,
215
+ borderSide: BORDER_SIDE.Full,
216
+ borderWidth: BORDER_WIDTH['1px'],
217
+ },
218
+ name: 'Border Radius Full (1/1 Aspect Ratio)',
219
+ parameters,
220
+ render: (args: any) => ({
221
+ setup() {
222
+ return formatArgs(args);
223
+ },
224
+ template:
225
+ '<div class="tide-display-inline-flex tide-axis1-center tide-axis2-center tide-padding-1" style="width: 100px; height: 100px;" v-bind="args">Demo</div>',
226
+ updated() {
227
+ return formatArgs(args);
228
+ },
229
+ }),
230
+ };
@@ -0,0 +1,180 @@
1
+ import type { StoryContext } from '@storybook/vue3';
2
+
3
+ import * as STYLES from '@/types/Storybook';
4
+ import { argTypeBooleanUnrequired } from '@/utilities/storybook';
5
+ import { formatArgType, getConstantsByValues, prependNoneAsEmpty } from '@/utilities/storybook';
6
+
7
+ const FLEX_AXIS1 = prependNoneAsEmpty(STYLES.FLEX_AXIS1);
8
+ const FLEX_AXIS2 = prependNoneAsEmpty(STYLES.FLEX_AXIS2);
9
+ const FLEX_DIRECTION = prependNoneAsEmpty(STYLES.FLEX_DIRECTION);
10
+ const GAP = prependNoneAsEmpty(STYLES.GAP);
11
+
12
+ const formatArgs = (args: any) => {
13
+ args.class = formatClassNames(args).join(' ');
14
+
15
+ return { args };
16
+ };
17
+
18
+ const formatClassNames = (args: any) => {
19
+ const classNames: string[] = ['tide-display-flex'];
20
+
21
+ if (args.flexAxis1) classNames.push(args.flexAxis1);
22
+ if (args.flexAxis2) classNames.push(args.flexAxis2);
23
+ if (args.flexDirection) classNames.push(args.flexDirection);
24
+ if (args.flexGap) classNames.push(args.flexGap);
25
+ if (args.flexWrap) classNames.push('tide-flex-wrap');
26
+
27
+ return classNames;
28
+ };
29
+
30
+ const formatClassNamesSnippet = (args: any) => {
31
+ const classNames = formatClassNames(args);
32
+
33
+ return getConstantsByValues(classNames);
34
+ };
35
+
36
+ const formatSnippet = (code: string, context: StoryContext) => {
37
+ const { args } = context;
38
+ const classNames = formatClassNamesSnippet(args);
39
+
40
+ return classNames.length ? `<div :class="[${classNames.join(', ')}]">Demo</div>` : '<div>Demo</div>';
41
+ };
42
+
43
+ const parameters = {
44
+ docs: {
45
+ source: {
46
+ format: false,
47
+ language: 'html',
48
+ transform: formatSnippet,
49
+ },
50
+ },
51
+ };
52
+
53
+ const render = (args: any) => ({
54
+ setup() {
55
+ return formatArgs(args);
56
+ },
57
+ template:
58
+ '<div class="tide-display-inline-flex tide-max-width-full sb-bg-blue-light tide-x-scroll" v-bind="args"><div :key="index" class="tide-border-1 tide-padding-1 sb-bg-white tide-whitespace-nowrap" v-for="(_child, index) in new Array(10)">Demo {{ index + 1 }}</div></div>',
59
+ updated() {
60
+ return formatArgs(args);
61
+ },
62
+ });
63
+
64
+ export default {
65
+ argTypes: {
66
+ flexAxis1: {
67
+ ...formatArgType({ FLEX_AXIS1 }),
68
+ description: 'Dictates alignment of children along primary axis',
69
+ name: 'Flex Axis Primary',
70
+ },
71
+ flexAxis2: {
72
+ ...formatArgType({ FLEX_AXIS2 }),
73
+ description: 'Dictates alignment of children along secondary axis',
74
+ name: 'Flex Axis Secondary',
75
+ },
76
+ flexDirection: {
77
+ ...formatArgType({ FLEX_DIRECTION }),
78
+ description: 'Dictates whether children form a column or a row',
79
+ name: 'Flex Direction',
80
+ },
81
+ flexGap: {
82
+ ...formatArgType({ GAP }),
83
+ description: 'Dictates vertical and/or horizontal spacing between elements within a flexbox container',
84
+ name: 'Flex Gap',
85
+ },
86
+ flexWrap: {
87
+ ...argTypeBooleanUnrequired,
88
+ description: 'Dictates whether overflow content should drop to a new line',
89
+ name: 'Flex Wrap',
90
+ },
91
+ },
92
+ args: {
93
+ flexAxis1: FLEX_AXIS1.None,
94
+ flexAxis2: FLEX_AXIS2.None,
95
+ flexDirection: FLEX_DIRECTION.None,
96
+ flexGap: GAP.None,
97
+ flexWrap: undefined,
98
+ },
99
+ parameters,
100
+ render,
101
+ tags: ['autodocs'],
102
+ title: 'Foundations/Gap',
103
+ };
104
+
105
+ export const Default = {};
106
+
107
+ export const Gap4NoWrap = {
108
+ args: {
109
+ flexGap: GAP['4 REM'],
110
+ },
111
+ name: 'Gap 4 REM (No Wrap)',
112
+ };
113
+
114
+ export const Gap2NoWrap = {
115
+ args: {
116
+ flexGap: GAP['2 REM'],
117
+ },
118
+ name: 'Gap 2 REM (No Wrap)',
119
+ };
120
+
121
+ export const Gap1NoWrap = {
122
+ args: {
123
+ flexGap: GAP['1 REM'],
124
+ },
125
+ name: 'Gap 1 REM (No Wrap)',
126
+ };
127
+
128
+ export const GapHalfNoWrap = {
129
+ args: {
130
+ flexGap: GAP['0.5 REM'],
131
+ },
132
+ name: 'Gap 0.5 REM (No Wrap)',
133
+ };
134
+
135
+ export const GapQuarterNoWrap = {
136
+ args: {
137
+ flexGap: GAP['0.25 REM'],
138
+ },
139
+ name: 'Gap 0.25 REM (No Wrap)',
140
+ };
141
+
142
+ export const Gap4Wrap = {
143
+ args: {
144
+ flexGap: GAP['4 REM'],
145
+ flexWrap: true,
146
+ },
147
+ name: 'Gap 4 REM (Wrap)',
148
+ };
149
+
150
+ export const Gap2Wrap = {
151
+ args: {
152
+ flexGap: GAP['2 REM'],
153
+ flexWrap: true,
154
+ },
155
+ name: 'Gap 2 REM (Wrap)',
156
+ };
157
+
158
+ export const Gap1Wrap = {
159
+ args: {
160
+ flexGap: GAP['1 REM'],
161
+ flexWrap: true,
162
+ },
163
+ name: 'Gap 1 REM (Wrap)',
164
+ };
165
+
166
+ export const GapHalfWrap = {
167
+ args: {
168
+ flexGap: GAP['0.5 REM'],
169
+ flexWrap: true,
170
+ },
171
+ name: 'Gap 0.5 REM (Wrap)',
172
+ };
173
+
174
+ export const GapQuarterWrap = {
175
+ args: {
176
+ flexGap: GAP['0.25 REM'],
177
+ flexWrap: true,
178
+ },
179
+ name: 'Gap 0.25 REM (Wrap)',
180
+ };