@ippon-ui/ui 0.0.2

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 (246) hide show
  1. package/.agents/agents/component-library-create-from-pattern-library.agent.md +37 -0
  2. package/.agents/agents/patten-library-create-component.agent.md +30 -0
  3. package/.agents/skills/component-library/SKILL.md +169 -0
  4. package/.agents/skills/pattern-library/SKILL.md +277 -0
  5. package/.github/workflows/build.yml +34 -0
  6. package/.gitlab-ci.yml +12 -0
  7. package/.prettierignore +6 -0
  8. package/AGENTS.md +50 -0
  9. package/LICENSE +202 -0
  10. package/ci/build.yml +15 -0
  11. package/ci/common.yml +42 -0
  12. package/ci/deploy.yml +20 -0
  13. package/icons/LICENCE +202 -0
  14. package/icons/index.ts +69 -0
  15. package/icons/package.json +25 -0
  16. package/icons/tsconfig.json +11 -0
  17. package/lefthook.yml +10 -0
  18. package/mise.toml +55 -0
  19. package/package.json +26 -0
  20. package/pnpm-workspace.yaml +9 -0
  21. package/prettier.config.mts +8 -0
  22. package/react/LICENCE +202 -0
  23. package/react/README.md +75 -0
  24. package/react/eslint.config.js +22 -0
  25. package/react/package.json +63 -0
  26. package/react/src/CAP.ts +14 -0
  27. package/react/src/Card.ts +2 -0
  28. package/react/src/DataSelectable.ts +7 -0
  29. package/react/src/Grid.ts +33 -0
  30. package/react/src/IpponBadge.tsx +62 -0
  31. package/react/src/IpponButton.tsx +93 -0
  32. package/react/src/IpponButtonCard.tsx +34 -0
  33. package/react/src/IpponCard.tsx +30 -0
  34. package/react/src/IpponContainer.tsx +15 -0
  35. package/react/src/IpponGrid.tsx +56 -0
  36. package/react/src/IpponHSpace.tsx +56 -0
  37. package/react/src/IpponIcon.tsx +15 -0
  38. package/react/src/IpponImportFile.tsx +128 -0
  39. package/react/src/IpponIon.tsx +45 -0
  40. package/react/src/IpponMeter.tsx +43 -0
  41. package/react/src/IpponProgress.tsx +45 -0
  42. package/react/src/IpponText.tsx +56 -0
  43. package/react/src/IpponTitle.tsx +45 -0
  44. package/react/src/IpponVSpace.tsx +43 -0
  45. package/react/src/Optional.ts +177 -0
  46. package/react/src/Tokens.ts +36 -0
  47. package/react/src/index.ts +16 -0
  48. package/react/test/File.fixture.ts +13 -0
  49. package/react/test/IpponBadge.spec.tsx +245 -0
  50. package/react/test/IpponButton.spec.tsx +666 -0
  51. package/react/test/IpponButtonCard.spec.tsx +162 -0
  52. package/react/test/IpponCard.spec.tsx +133 -0
  53. package/react/test/IpponContainer.spec.tsx +56 -0
  54. package/react/test/IpponGrid.spec.tsx +140 -0
  55. package/react/test/IpponHSpace.spec.tsx +107 -0
  56. package/react/test/IpponIcon.spec.tsx +37 -0
  57. package/react/test/IpponImportFile.spec.tsx +431 -0
  58. package/react/test/IpponIon.spec.tsx +52 -0
  59. package/react/test/IpponMeter.spec.tsx +59 -0
  60. package/react/test/IpponProgress.spec.tsx +68 -0
  61. package/react/test/IpponText.spec.tsx +149 -0
  62. package/react/test/IpponTitle.spec.tsx +242 -0
  63. package/react/test/IpponVSpace.spec.tsx +91 -0
  64. package/react/tsconfig.app.json +24 -0
  65. package/react/tsconfig.json +4 -0
  66. package/react/tsconfig.node.json +23 -0
  67. package/react/vite.config.ts +30 -0
  68. package/react/vitest.config.ts +21 -0
  69. package/styles/.editorconfig +12 -0
  70. package/styles/.stylelintrc.json +75 -0
  71. package/styles/LICENCE +202 -0
  72. package/styles/README.md +107 -0
  73. package/styles/logo.svg +26 -0
  74. package/styles/package.json +67 -0
  75. package/styles/src/atom/_atom.scss +9 -0
  76. package/styles/src/atom/atom.pug +34 -0
  77. package/styles/src/atom/badge/_badge.scss +108 -0
  78. package/styles/src/atom/badge/badge.code.pug +29 -0
  79. package/styles/src/atom/badge/badge.md +1 -0
  80. package/styles/src/atom/badge/badge.mixin.pug +24 -0
  81. package/styles/src/atom/badge/badge.render.pug +7 -0
  82. package/styles/src/atom/button/_button.scss +242 -0
  83. package/styles/src/atom/button/button.code.pug +38 -0
  84. package/styles/src/atom/button/button.md +31 -0
  85. package/styles/src/atom/button/button.mixin.pug +30 -0
  86. package/styles/src/atom/button/button.render.pug +13 -0
  87. package/styles/src/atom/icon/_icon.scss +8 -0
  88. package/styles/src/atom/icon/icon.code.pug +5 -0
  89. package/styles/src/atom/icon/icon.md +11 -0
  90. package/styles/src/atom/icon/icon.mixin.pug +8 -0
  91. package/styles/src/atom/icon/icon.render.pug +7 -0
  92. package/styles/src/atom/ion/ion.code.pug +8 -0
  93. package/styles/src/atom/ion/ion.md +11 -0
  94. package/styles/src/atom/ion/ion.mixin.pug +8 -0
  95. package/styles/src/atom/ion/ion.render.pug +7 -0
  96. package/styles/src/atom/meter/_meter.scss +23 -0
  97. package/styles/src/atom/meter/meter.code.pug +8 -0
  98. package/styles/src/atom/meter/meter.md +7 -0
  99. package/styles/src/atom/meter/meter.mixin.pug +12 -0
  100. package/styles/src/atom/meter/meter.render.pug +5 -0
  101. package/styles/src/atom/progress/_progress.scss +23 -0
  102. package/styles/src/atom/progress/progress.code.pug +8 -0
  103. package/styles/src/atom/progress/progress.md +7 -0
  104. package/styles/src/atom/progress/progress.mixin.pug +14 -0
  105. package/styles/src/atom/progress/progress.render.pug +5 -0
  106. package/styles/src/atom/tab/_tab.scss +48 -0
  107. package/styles/src/atom/tab/tab.code.pug +5 -0
  108. package/styles/src/atom/tab/tab.md +1 -0
  109. package/styles/src/atom/tab/tab.mixin.pug +14 -0
  110. package/styles/src/atom/tab/tab.render.pug +4 -0
  111. package/styles/src/atom/text/_text.scss +74 -0
  112. package/styles/src/atom/text/text.code.pug +19 -0
  113. package/styles/src/atom/text/text.md +5 -0
  114. package/styles/src/atom/text/text.mixin.pug +12 -0
  115. package/styles/src/atom/text/text.render.pug +7 -0
  116. package/styles/src/atom/title/_title.scss +68 -0
  117. package/styles/src/atom/title/title.code.pug +25 -0
  118. package/styles/src/atom/title/title.md +9 -0
  119. package/styles/src/atom/title/title.mixin.pug +12 -0
  120. package/styles/src/atom/title/title.render.pug +5 -0
  121. package/styles/src/atom/title-display/_title-display.scss +26 -0
  122. package/styles/src/atom/title-display/title-display.code.pug +9 -0
  123. package/styles/src/atom/title-display/title-display.md +5 -0
  124. package/styles/src/atom/title-display/title-display.mixin.pug +6 -0
  125. package/styles/src/atom/title-display/title-display.render.pug +4 -0
  126. package/styles/src/doc.scss +2 -0
  127. package/styles/src/favicon.ico +0 -0
  128. package/styles/src/function/_conversion.scss +9 -0
  129. package/styles/src/index.pug +59 -0
  130. package/styles/src/layout-documentation.pug +14 -0
  131. package/styles/src/layout.pug +17 -0
  132. package/styles/src/molecule/_molecule.scss +2 -0
  133. package/styles/src/molecule/import-file/_import-file.scss +38 -0
  134. package/styles/src/molecule/import-file/import-file.code.pug +4 -0
  135. package/styles/src/molecule/import-file/import-file.md +1 -0
  136. package/styles/src/molecule/import-file/import-file.mixin.pug +15 -0
  137. package/styles/src/molecule/import-file/import-file.render.pug +5 -0
  138. package/styles/src/molecule/molecule.pug +20 -0
  139. package/styles/src/molecule/tabs/_tabs.scss +4 -0
  140. package/styles/src/molecule/tabs/tabs.code.pug +9 -0
  141. package/styles/src/molecule/tabs/tabs.md +1 -0
  142. package/styles/src/molecule/tabs/tabs.mixin.pug +4 -0
  143. package/styles/src/molecule/tabs/tabs.render.pug +4 -0
  144. package/styles/src/molecule/toggle/_toggle.scss +68 -0
  145. package/styles/src/molecule/toggle/toggle.code.pug +26 -0
  146. package/styles/src/molecule/toggle/toggle.md +1 -0
  147. package/styles/src/molecule/toggle/toggle.mixin.pug +36 -0
  148. package/styles/src/molecule/toggle/toggle.render.pug +5 -0
  149. package/styles/src/organism/_abstract-card.scss +36 -0
  150. package/styles/src/organism/_docorganism.scss +1 -0
  151. package/styles/src/organism/_organism.scss +8 -0
  152. package/styles/src/organism/button-card/_button-card.scss +22 -0
  153. package/styles/src/organism/button-card/button-card.code.pug +31 -0
  154. package/styles/src/organism/button-card/button-card.md +28 -0
  155. package/styles/src/organism/button-card/button-card.mixin.pug +8 -0
  156. package/styles/src/organism/button-card/button-card.render.pug +7 -0
  157. package/styles/src/organism/card/_card.scss +6 -0
  158. package/styles/src/organism/card/card.code.pug +9 -0
  159. package/styles/src/organism/card/card.md +23 -0
  160. package/styles/src/organism/card/card.mixin.pug +7 -0
  161. package/styles/src/organism/card/card.render.pug +7 -0
  162. package/styles/src/organism/container/_container.scss +3 -0
  163. package/styles/src/organism/container/container.code.pug +13 -0
  164. package/styles/src/organism/container/container.md +5 -0
  165. package/styles/src/organism/container/container.mixin.pug +3 -0
  166. package/styles/src/organism/container/container.render.pug +4 -0
  167. package/styles/src/organism/grid/_docgrid.scss +11 -0
  168. package/styles/src/organism/grid/_grid.scss +84 -0
  169. package/styles/src/organism/grid/grid.code.pug +25 -0
  170. package/styles/src/organism/grid/grid.md +1 -0
  171. package/styles/src/organism/grid/grid.mixin.pug +7 -0
  172. package/styles/src/organism/grid/grid.render.pug +5 -0
  173. package/styles/src/organism/h-space/_h-space.scss +49 -0
  174. package/styles/src/organism/h-space/h-space.code.pug +56 -0
  175. package/styles/src/organism/h-space/h-space.md +22 -0
  176. package/styles/src/organism/h-space/h-space.mixin.pug +14 -0
  177. package/styles/src/organism/h-space/h-space.render.pug +5 -0
  178. package/styles/src/organism/header/_header.scss +8 -0
  179. package/styles/src/organism/header/header.code.pug +14 -0
  180. package/styles/src/organism/header/header.md +1 -0
  181. package/styles/src/organism/header/header.mixin.pug +7 -0
  182. package/styles/src/organism/header/header.render.pug +4 -0
  183. package/styles/src/organism/modal/_modal.scss +58 -0
  184. package/styles/src/organism/modal/modal.code.pug +68 -0
  185. package/styles/src/organism/modal/modal.md +1 -0
  186. package/styles/src/organism/modal/modal.mixin.pug +25 -0
  187. package/styles/src/organism/modal/modal.render.pug +4 -0
  188. package/styles/src/organism/organism.pug +30 -0
  189. package/styles/src/organism/v-space/_v-space.scss +45 -0
  190. package/styles/src/organism/v-space/v-space.code.pug +41 -0
  191. package/styles/src/organism/v-space/v-space.md +20 -0
  192. package/styles/src/organism/v-space/v-space.mixin.pug +7 -0
  193. package/styles/src/organism/v-space/v-space.render.pug +5 -0
  194. package/styles/src/quark/_breakpoint.scss +12 -0
  195. package/styles/src/quark/_font.scss +38 -0
  196. package/styles/src/quark/_gap.scss +34 -0
  197. package/styles/src/quark/_placeholder.scss +27 -0
  198. package/styles/src/quark/_shadow.scss +13 -0
  199. package/styles/src/quark/_typography.scss +146 -0
  200. package/styles/src/template/_template.scss +1 -0
  201. package/styles/src/template/layout/_layout.scss +20 -0
  202. package/styles/src/template/layout/layout.code.pug +11 -0
  203. package/styles/src/template/layout/layout.md +1 -0
  204. package/styles/src/template/layout/layout.mixin.pug +11 -0
  205. package/styles/src/template/layout/layout.render.pug +4 -0
  206. package/styles/src/template/template.pug +16 -0
  207. package/styles/src/tikui.scss +5 -0
  208. package/styles/src/token/_doctable.scss +14 -0
  209. package/styles/src/token/_doctoken.scss +1 -0
  210. package/styles/src/token/_size.scss +9 -0
  211. package/styles/src/token/_token.scss +5 -0
  212. package/styles/src/token/color/_color.scss +9 -0
  213. package/styles/src/token/color/color/_base.scss +65 -0
  214. package/styles/src/token/color/color/_brand.scss +13 -0
  215. package/styles/src/token/color/color/_error.scss +13 -0
  216. package/styles/src/token/color/color/_information-2.scss +13 -0
  217. package/styles/src/token/color/color/_information.scss +13 -0
  218. package/styles/src/token/color/color/_neutral.scss +20 -0
  219. package/styles/src/token/color/color/_semantic.scss +69 -0
  220. package/styles/src/token/color/color/_success.scss +13 -0
  221. package/styles/src/token/color/color/_warning.scss +13 -0
  222. package/styles/src/token/color/color.js +31 -0
  223. package/styles/src/token/color/color.mixin.pug +19 -0
  224. package/styles/src/token/color/color.pug +9 -0
  225. package/styles/src/token/color/color.render.pug +13 -0
  226. package/styles/src/token/radius/_radius.scss +8 -0
  227. package/styles/src/token/radius/radius.js +54 -0
  228. package/styles/src/token/radius/radius.mixin.pug +14 -0
  229. package/styles/src/token/radius/radius.pug +9 -0
  230. package/styles/src/token/radius/radius.render.pug +11 -0
  231. package/styles/src/token/shadow/_shadow.scss +22 -0
  232. package/styles/src/token/shadow/shadow.js +45 -0
  233. package/styles/src/token/shadow/shadow.mixin.pug +13 -0
  234. package/styles/src/token/shadow/shadow.pug +9 -0
  235. package/styles/src/token/shadow/shadow.render.pug +9 -0
  236. package/styles/src/token/token.js +38 -0
  237. package/styles/src/token/token.pug +25 -0
  238. package/styles/src/token/typography/_typography.scss +103 -0
  239. package/styles/src/token/typography/typography.js +32 -0
  240. package/styles/src/token/typography/typography.mixin.pug +17 -0
  241. package/styles/src/token/typography/typography.pug +9 -0
  242. package/styles/src/token/typography/typography.render.pug +19 -0
  243. package/styles/test/function/conversion.test.scss +20 -0
  244. package/styles/test/function/sass.spec.ts +6 -0
  245. package/styles/tikuiconfig.json +14 -0
  246. package/styles/tsconfig.json +10 -0
@@ -0,0 +1,74 @@
1
+ @use '../../quark/typography';
2
+ @use '../../quark/font';
3
+ @use '../../quark/placeholder';
4
+
5
+ .ippon-text {
6
+ @include font.colors;
7
+
8
+ margin: 0;
9
+ padding: 0;
10
+
11
+ &.-placeholder {
12
+ min-width: 10rem;
13
+ }
14
+
15
+ &.-body {
16
+ @include typography.body-medium;
17
+
18
+ &.-placeholder {
19
+ @include placeholder.placeholder(var(--ippon-typography-body-medium-line-height));
20
+ }
21
+
22
+ &.-bold {
23
+ @include typography.body-medium-bold;
24
+ }
25
+
26
+ &.-small {
27
+ @include typography.body-small;
28
+
29
+ &.-placeholder {
30
+ @include placeholder.placeholder(var(--ippon-typography-body-small-line-height));
31
+ }
32
+
33
+ &.-bold {
34
+ @include typography.body-small-bold;
35
+ }
36
+ }
37
+
38
+ &.-large {
39
+ @include typography.body-large;
40
+
41
+ &.-placeholder {
42
+ @include placeholder.placeholder(var(--ippon-typography-body-large-line-height));
43
+ }
44
+
45
+ &.-bold {
46
+ @include typography.body-large-bold;
47
+ }
48
+ }
49
+ }
50
+
51
+ &.-label {
52
+ @include typography.label-medium;
53
+
54
+ &.-placeholder {
55
+ @include placeholder.placeholder(var(--ippon-typography-label-medium-line-height));
56
+ }
57
+
58
+ &.-small {
59
+ @include typography.label-small;
60
+
61
+ &.-placeholder {
62
+ @include placeholder.placeholder(var(--ippon-typography-label-small-line-height));
63
+ }
64
+ }
65
+
66
+ &.-large {
67
+ @include typography.label-large;
68
+
69
+ &.-placeholder {
70
+ @include placeholder.placeholder(var(--ippon-typography-label-large-line-height));
71
+ }
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,19 @@
1
+ include text.mixin.pug
2
+
3
+ +ippon-text({ variant: 'body', size: 'small' }) Body Small
4
+ +ippon-text({ variant: 'body', size: 'small', weight: 'bold' }) Body Small bold
5
+ +ippon-text({ variant: 'body' }) Body Medium
6
+ +ippon-text({ variant: 'body', weight: 'bold' }) Body Medium bold
7
+ +ippon-text({ variant: 'body', size: 'large' }) Body Large
8
+ +ippon-text({ variant: 'body', size: 'large', weight: 'bold' }) Body Large bold
9
+ +ippon-text({ variant: 'label', size: 'small' }) Label Small
10
+ +ippon-text({ variant: 'label', size: 'small', weight: 'bold' }) Label Small bold
11
+ +ippon-text({ variant: 'label' }) Label Medium
12
+ +ippon-text({ variant: 'label', weight: 'bold' }) Label Medium bold
13
+ +ippon-text({ variant: 'label', size: 'large' }) Label Large
14
+ +ippon-text({ variant: 'label', size: 'large', weight: 'bold' }) Label Large bold
15
+ +ippon-text({ variant: 'body', color: 'neutral-tertiary-inversed' }) Color Neutral Tertiary Inversed
16
+ +ippon-text({ variant: 'body', size: 'small', placeholder: true })
17
+ +ippon-text({ variant: 'body', placeholder: true })
18
+ +ippon-text({ variant: 'body', size: 'large', placeholder: true })
19
+ +ippon-text({ variant: 'label', placeholder: true })
@@ -0,0 +1,5 @@
1
+ ## Text
2
+
3
+ **Placeholder (Loading State)**
4
+
5
+ The `-placeholder` alternative displays a shimmer animation, typically used during content loading.
@@ -0,0 +1,12 @@
1
+ mixin ippon-text(options)
2
+ - const { size, variant, weight, color, tag, placeholder } = options || {};
3
+ - const sizeClass = size ? `-${size}` : null;
4
+ - const variantClass = variant ? `-${variant}` : null;
5
+ - const weightClass = weight ? `-${weight}` : null;
6
+ - const colorClass = color ? `-color-${color}` : null;
7
+ - const placeholderClass = placeholder ? '-placeholder' : null;
8
+ #{tag || 'span'}.ippon-text(
9
+ class=[sizeClass, variantClass, weightClass, colorClass, placeholderClass]
10
+ )
11
+ if !placeholder
12
+ block
@@ -0,0 +1,7 @@
1
+ extends /layout
2
+
3
+ block body
4
+ div(
5
+ style='display: grid; gap: 1rem; grid-template-columns: repeat(4, 1fr); align-items: center; justify-items: left'
6
+ )
7
+ include text.code.pug
@@ -0,0 +1,68 @@
1
+ @use '../../quark/typography';
2
+ @use '../../quark/placeholder';
3
+
4
+ @mixin ippon-title($level) {
5
+ $tag: h#{$level};
6
+ $alternative: -l#{$level};
7
+ #{$tag}.ippon-title,
8
+ .ippon-title.#{$alternative} {
9
+ @content;
10
+ }
11
+ }
12
+
13
+ @mixin ippon-title-placeholder($level) {
14
+ $tag: h#{$level};
15
+ $alternative: -l#{$level};
16
+ #{$tag}.ippon-title.-placeholder,
17
+ .ippon-title.#{$alternative}.-placeholder {
18
+ @content;
19
+ }
20
+ }
21
+
22
+ .ippon-title {
23
+ margin: 0;
24
+
25
+ &.-placeholder {
26
+ min-width: 12rem;
27
+ }
28
+ }
29
+
30
+ @include ippon-title(1) {
31
+ @include typography.title-1;
32
+ }
33
+
34
+ @include ippon-title-placeholder(1) {
35
+ @include placeholder.placeholder(var(--ippon-typography-title-1-line-height));
36
+ }
37
+
38
+ @include ippon-title(2) {
39
+ @include typography.title-2;
40
+ }
41
+
42
+ @include ippon-title-placeholder(2) {
43
+ @include placeholder.placeholder(var(--ippon-typography-title-2-line-height));
44
+ }
45
+
46
+ @include ippon-title(3) {
47
+ @include typography.title-3;
48
+ }
49
+
50
+ @include ippon-title-placeholder(3) {
51
+ @include placeholder.placeholder(var(--ippon-typography-title-3-line-height));
52
+ }
53
+
54
+ @include ippon-title(4) {
55
+ @include typography.title-4;
56
+ }
57
+
58
+ @include ippon-title-placeholder(4) {
59
+ @include placeholder.placeholder(var(--ippon-typography-title-4-line-height));
60
+ }
61
+
62
+ @include ippon-title(5) {
63
+ @include typography.title-5;
64
+ }
65
+
66
+ @include ippon-title-placeholder(5) {
67
+ @include placeholder.placeholder(var(--ippon-typography-title-5-line-height));
68
+ }
@@ -0,0 +1,25 @@
1
+ include title.mixin.pug
2
+
3
+ +ippon-title({ tag: 'h1' })
4
+ +ippon-title({ tag: 'h2' })
5
+ +ippon-title({ tag: 'h3' })
6
+ +ippon-title({ tag: 'h4' })
7
+ +ippon-title({ tag: 'h5' })
8
+
9
+ +ippon-title({ tag: 'h2', level: 1 })
10
+ +ippon-title({ tag: 'h1', level: 2 })
11
+ +ippon-title({ tag: 'h5', level: 3 })
12
+ +ippon-title({ tag: 'h2', level: 4 })
13
+ +ippon-title({ tag: 'h3', level: 5 })
14
+
15
+ +ippon-title({ tag: 'h1', placeholder: true })
16
+ +ippon-title({ tag: 'h2', placeholder: true })
17
+ +ippon-title({ tag: 'h3', placeholder: true })
18
+ +ippon-title({ tag: 'h4', placeholder: true })
19
+ +ippon-title({ tag: 'h5', placeholder: true })
20
+
21
+ +ippon-title({ tag: 'h2', level: 1, placeholder: true })
22
+ +ippon-title({ tag: 'h1', level: 2, placeholder: true })
23
+ +ippon-title({ tag: 'h5', level: 3, placeholder: true })
24
+ +ippon-title({ tag: 'h2', level: 4, placeholder: true })
25
+ +ippon-title({ tag: 'h3', level: 5, placeholder: true })
@@ -0,0 +1,9 @@
1
+ ## Title
2
+
3
+ The `title` will have an associated size depending on the heading level (e.g., `h1`, `h2`, …).
4
+
5
+ Alternatives classes can be used to change the **level** using alternative classes (e.g., `-l1`, `-l2`, …).
6
+
7
+ **Placeholder (Loading State)**
8
+
9
+ The `-placeholder` alternative displays a shimmer animation, typically used during content loading.
@@ -0,0 +1,12 @@
1
+ mixin ippon-title(options)
2
+ - const { tag = 'div', level, placeholder } = options || {};
3
+ - const titleTag = `Title ${tag}`;
4
+ - const titleName = level ? `${titleTag} (alternative level ${level})` : titleTag;
5
+ - const alternativeClass = level ? `-l${level}` : null;
6
+ - const placeholderClass = placeholder ? '-placeholder' : null;
7
+ #{tag}.ippon-title(class=[alternativeClass, placeholderClass])
8
+ if !placeholder
9
+ if block
10
+ block
11
+ else
12
+ | #{ titleName }
@@ -0,0 +1,5 @@
1
+ extends /layout
2
+
3
+ block body
4
+ div(style='display: flex; flex-direction: column; gap: 0.5rem; align-items: flex-start')
5
+ include title.code.pug
@@ -0,0 +1,26 @@
1
+ @use '../../quark/typography';
2
+
3
+ @mixin ippon-title-display($level, $size) {
4
+ $tag: h#{$level};
5
+ $alternative: -#{$size};
6
+ #{$tag}.ippon-title-display,
7
+ .ippon-title-display.#{$alternative} {
8
+ @content;
9
+ }
10
+ }
11
+
12
+ .ippon-title-display {
13
+ margin: 0;
14
+ }
15
+
16
+ @include ippon-title-display(1, 'large') {
17
+ @include typography.display-large;
18
+ }
19
+
20
+ @include ippon-title-display(2, 'medium') {
21
+ @include typography.display-medium;
22
+ }
23
+
24
+ @include ippon-title-display(3, 'small') {
25
+ @include typography.display-small;
26
+ }
@@ -0,0 +1,9 @@
1
+ include title-display.mixin.pug
2
+
3
+ +ippon-title-display({ tag: 'h1' })
4
+ +ippon-title-display({ tag: 'h2' })
5
+ +ippon-title-display({ tag: 'h3' })
6
+
7
+ +ippon-title-display({ tag: 'h2', size: 'large' })
8
+ +ippon-title-display({ tag: 'h1', size: 'medium' })
9
+ +ippon-title-display({ tag: 'h5', size: 'small' })
@@ -0,0 +1,5 @@
1
+ ## Title display
2
+
3
+ The `title-display` will have an associated size depending on the heading level (e.g., `h1`, `h2`, …).
4
+
5
+ Alternatives classes can be used to change the size using alternative classes (e.g., `-large`, `-medium`, …).
@@ -0,0 +1,6 @@
1
+ mixin ippon-title-display(options)
2
+ - const { tag = 'div', size } = options || {};
3
+ - const displayTag = `Title display ${tag}`;
4
+ - const displayName = size ? `${displayTag} (alternative ${size})` : displayTag;
5
+ - const alternativeClass = size ? `-${size}` : null;
6
+ #{tag}.ippon-title-display(class=[alternativeClass])= displayName
@@ -0,0 +1,4 @@
1
+ extends /layout
2
+
3
+ block body
4
+ include title-display.code.pug
@@ -0,0 +1,2 @@
1
+ @use 'token/doctoken';
2
+ @use 'organism/docorganism';
Binary file
@@ -0,0 +1,9 @@
1
+ @use 'sass:math';
2
+
3
+ @function to-rem($value) {
4
+ @if $value == 0 {
5
+ @return 0;
6
+ }
7
+
8
+ @return math.div($value, 16px) * 1rem;
9
+ }
@@ -0,0 +1,59 @@
1
+ extends /layout-documentation
2
+
3
+ block title
4
+ title Tikui
5
+
6
+ block content
7
+ .tikui-vertical-spacing.-s32
8
+ .tikui-vertical-spacing--line
9
+ h1.tikui-title-main Tikui pattern library
10
+ .tikui-vertical-spacing--line
11
+ .tikui-vertical-spacing.-s24
12
+ .tikui-vertical-spacing--line
13
+ h2.tikui-title-section Use
14
+ .tikui-vertical-spacing--line
15
+ p.tikui-paragraph Import style using #[strong <link>] tag and replace #[strong {DOMAIN}] with the current domain:
16
+ .tikui-vertical-spacing--line
17
+ p.tikui-paragraph
18
+ em HTML
19
+ .tikui-vertical-spacing--line
20
+ pre
21
+ code.language-html
22
+ | #{ '<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />' }
23
+ |
24
+ | #{ '<link href="{DOMAIN}/fonts/open-sans/400.css" rel="stylesheet" />' }
25
+ | #{ '<link href="{DOMAIN}/fonts/open-sans/600.css" rel="stylesheet" />' }
26
+ | #{ '<link href="{DOMAIN}/fonts/open-sans/700.css" rel="stylesheet" />' }
27
+ | #{ '<link href="{DOMAIN}/fonts/saira-extra-condensed/700.css" rel="stylesheet" />' }
28
+ | #{ '<link href="{DOMAIN}/icons/ionicons.css" rel="stylesheet" />' }
29
+ | #{ '<link rel="stylesheet" href="{DOMAIN}/tikui.css" />' }
30
+ .tikui-vertical-spacing--line
31
+ p.tikui-paragraph
32
+ em Pug
33
+ .tikui-vertical-spacing--line
34
+ pre
35
+ code.language-pug.
36
+ meta(name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no')
37
+
38
+ link(href='{DOMAIN}/fonts/open-sans/400.css' rel='stylesheet')
39
+ link(href='{DOMAIN}/fonts/open-sans/600.css' rel='stylesheet')
40
+ link(href='{DOMAIN}/fonts/open-sans/700.css' rel='stylesheet')
41
+ link(href='{DOMAIN}/fonts/saira-extra-condensed/700.css' rel='stylesheet')
42
+ link(href='{DOMAIN}/icons/ionicons.css' rel='stylesheet')
43
+ link(rel='stylesheet' href='{DOMAIN}/tikui.css')
44
+ .tikui-vertical-spacing--line
45
+ h2.tikui-title-section Documentation
46
+ .tikui-vertical-spacing--line
47
+ p.tikui-paragraph The Style have an #[a.tikui-link(href='http://atomicdesign.bradfrost.com', target='_blank') Atomic Design] structure.
48
+ .tikui-vertical-spacing--line
49
+ ul.tikui-list
50
+ li
51
+ a.tikui-link(href='[[TIKUI_BASEPATH]]token/token.html') Tokens
52
+ li
53
+ a.tikui-link(href='[[TIKUI_BASEPATH]]atom/atom.html') Atoms
54
+ li
55
+ a.tikui-link(href='[[TIKUI_BASEPATH]]molecule/molecule.html') Molecules
56
+ li
57
+ a.tikui-link(href='[[TIKUI_BASEPATH]]organism/organism.html') Organisms
58
+ li
59
+ a.tikui-link(href='[[TIKUI_BASEPATH]]template/template.html') Templates
@@ -0,0 +1,14 @@
1
+ extends /documentation/layout-atomic
2
+
3
+ include /documentation/mixin
4
+
5
+ block header
6
+ block vars
7
+ - let active = '';
8
+ - const isActive = (current) => current === active;
9
+ +tikui-navbar('[[TIKUI_BASEPATH]]index.html', 'Tikui')
10
+ +tikui-navbar-item('[[TIKUI_BASEPATH]]token/token.html', 'Tokens', isActive('token'))
11
+ +tikui-navbar-item('[[TIKUI_BASEPATH]]atom/atom.html', 'Atoms', isActive('atom'))
12
+ +tikui-navbar-item('[[TIKUI_BASEPATH]]molecule/molecule.html', 'Molecules', isActive('molecule'))
13
+ +tikui-navbar-item('[[TIKUI_BASEPATH]]organism/organism.html', 'Organisms', isActive('organism'))
14
+ +tikui-navbar-item('[[TIKUI_BASEPATH]]template/template.html', 'Templates', isActive('template'))
@@ -0,0 +1,17 @@
1
+ doctype html
2
+ html
3
+ head
4
+ meta(charset='utf-8')
5
+ meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no')
6
+ block title
7
+ title Tikui
8
+ link(href='[[TIKUI_BASEPATH]]fonts/open-sans/400.css', rel='stylesheet')
9
+ link(href='[[TIKUI_BASEPATH]]fonts/open-sans/600.css', rel='stylesheet')
10
+ link(href='[[TIKUI_BASEPATH]]fonts/open-sans/700.css', rel='stylesheet')
11
+ link(href='[[TIKUI_BASEPATH]]fonts/saira-extra-condensed/700.css', rel='stylesheet')
12
+ link(href='[[TIKUI_BASEPATH]]icons/ionicons.css', rel='stylesheet')
13
+ link(href='[[TIKUI_BASEPATH]]tikui.css', rel='stylesheet')
14
+ link(href='[[TIKUI_BASEPATH]]doc.css', rel='stylesheet')
15
+ body
16
+ block body
17
+ p Please include a body here.
@@ -0,0 +1,2 @@
1
+ @use 'import-file/import-file';
2
+ @use 'toggle/toggle';
@@ -0,0 +1,38 @@
1
+ .ippon-import-file {
2
+ --_border-width: 2px;
3
+ --_padding-inline: calc(var(--ippon-size-32) - var(--_border-width));
4
+ --_icon-background-color: var(--ippon-color-neutral-surface-secondary);
5
+ --_icon-color: var(--ippon-color-neutral-text-icon-on-secondary);
6
+
7
+ box-sizing: border-box;
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ justify-content: center;
12
+ border: var(--_border-width) dashed var(--ippon-color-neutral-border);
13
+ border-radius: var(--ippon-radius-m);
14
+ padding: var(--_padding-inline);
15
+ cursor: pointer;
16
+
17
+ &--input {
18
+ display: none;
19
+ }
20
+
21
+ &--icon {
22
+ border-radius: var(--ippon-radius-pill);
23
+ background-color: var(--_icon-background-color);
24
+ padding: var(--ippon-size-12);
25
+ line-height: 0;
26
+ color: var(--_icon-color);
27
+ }
28
+
29
+ &:hover,
30
+ &.-dragover {
31
+ --_border-width: 1px;
32
+ --_icon-background-color: var(--ippon-color-information-2-surface-primary);
33
+ --_icon-color: var(--ippon-color-information-2-text-icon-on-primary);
34
+
35
+ border: var(--_border-width) dashed var(--ippon-color-information-2-border);
36
+ background-color: var(--ippon-color-information-2-surface-secondary);
37
+ }
38
+ }
@@ -0,0 +1,4 @@
1
+ include import-file.mixin.pug
2
+
3
+ +ippon-import-file
4
+ +ippon-import-file({ dragover: true })
@@ -0,0 +1 @@
1
+ ## Import File
@@ -0,0 +1,15 @@
1
+ include /atom/icon/icon.mixin.pug
2
+ include /atom/text/text.mixin.pug
3
+ include /organism/v-space/v-space.mixin.pug
4
+
5
+ mixin ippon-import-file(options)
6
+ - const { dragover } = options || {};
7
+ - const dragoverClass = dragover ? '-dragover' : null;
8
+ label.ippon-import-file(class=dragoverClass)
9
+ +ippon-v-space({ gap: 8, align: 'center' })
10
+ .ippon-import-file--icon
11
+ +ippon-icon({ name: 'cloud-upload', size: 24 })
12
+ +ippon-v-space({ gap: 4, align: 'center' })
13
+ +ippon-text({ variant: 'body', weight: 'bold' }) Drag and drop your files here
14
+ +ippon-text({ variant: 'body', weight: 'small', color: 'neutral-tertiary-inversed' }) Or click to browse
15
+ input.ippon-import-file--input(type='file')
@@ -0,0 +1,5 @@
1
+ extends /layout
2
+
3
+ block body
4
+ div(style='display: flex; flex-direction: column; gap: 1rem')
5
+ include import-file.code.pug
@@ -0,0 +1,20 @@
1
+ extends /layout-documentation
2
+
3
+ block append vars
4
+ - active = 'molecule';
5
+
6
+ block title
7
+ title Tikui - Molecules
8
+
9
+ block content
10
+ .tikui-vertical-spacing.-s32
11
+ .tikui-vertical-spacing--line
12
+ h1#molecules.tikui-title-main Molecules
13
+ .tikui-vertical-spacing--line
14
+ include /documentation/atomic-design/quote/molecule
15
+ .tikui-vertical-spacing--line
16
+ include:componentDoc(height=60) tabs/tabs.md
17
+ .tikui-vertical-spacing--line
18
+ include:componentDoc(height=370) import-file/import-file.md
19
+ .tikui-vertical-spacing--line
20
+ include:componentDoc(height=280) toggle/toggle.md
@@ -0,0 +1,4 @@
1
+ .ippon-tabs {
2
+ display: flex;
3
+ gap: 0;
4
+ }
@@ -0,0 +1,9 @@
1
+ include tabs.mixin.pug
2
+ include /atom/tab/tab.mixin.pug
3
+
4
+ +ippon-tabs({ id: 'panel-id' })
5
+ +ippon-tab({ id: 'tab-1', controls: 'panel-id' }) Tab 1
6
+ +ippon-tab({ id: 'tab-2', controls: 'panel-id', selected: true }) Tab 2
7
+ +ippon-tab({ id: 'tab-3', controls: 'panel-id', href: '#tab3' }) Tab 3
8
+ +ippon-tab({ id: 'tab-4', controls: 'panel-id' }) Tab 4
9
+ +ippon-tab({ id: 'tab-5', controls: 'panel-id' }) Tab 5
@@ -0,0 +1 @@
1
+ ## Tabs
@@ -0,0 +1,4 @@
1
+ mixin ippon-tabs(options)
2
+ - const { id } = options || {};
3
+ .ippon-tabs(id=id, role='tablist')
4
+ block
@@ -0,0 +1,4 @@
1
+ extends /layout
2
+
3
+ block body
4
+ include tabs.code.pug
@@ -0,0 +1,68 @@
1
+ .ippon-toggle {
2
+ --_padding: var(--ippon-size-10);
3
+ --_animation-duration: 200ms;
4
+ --_animation-easing: ease-in-out;
5
+
6
+ box-sizing: border-box;
7
+ border: 1px solid var(--ippon-color-neutral-border);
8
+ border-radius: var(--ippon-radius-l);
9
+ background-color: var(--ippon-color-neutral-surface-primary);
10
+ color: var(--ippon-color-neutral-text-icon-on-primary);
11
+
12
+ &--header,
13
+ &--button {
14
+ box-sizing: border-box;
15
+ display: flex;
16
+ flex-direction: row;
17
+ align-items: center;
18
+ text-align: left;
19
+ }
20
+
21
+ &.-open &--icon {
22
+ rotate: 90deg;
23
+ }
24
+
25
+ &--button {
26
+ flex: 1;
27
+ gap: var(--_padding);
28
+ align-self: stretch;
29
+ border: none;
30
+ background: none;
31
+ padding: var(--_padding);
32
+ cursor: pointer;
33
+ }
34
+
35
+ &--icon {
36
+ transition: rotate var(--_animation-duration) var(--_animation-easing);
37
+ line-height: 1;
38
+ font-size: var(--ippon-size-16);
39
+ }
40
+
41
+ &--title {
42
+ flex: 1;
43
+ }
44
+
45
+ &--actions {
46
+ display: flex;
47
+ gap: var(--_padding);
48
+ align-items: center;
49
+ padding: var(--_padding) var(--_padding) var(--_padding) 0;
50
+ }
51
+
52
+ &--body {
53
+ display: flex;
54
+ flex-direction: column;
55
+ transition: height var(--_animation-duration) var(--_animation-easing);
56
+ height: 0;
57
+ overflow: hidden;
58
+ }
59
+
60
+ &--content {
61
+ border-top: 1px solid var(--ippon-color-neutral-border);
62
+ padding: var(--ippon-size-12);
63
+ }
64
+
65
+ &.-open &--body {
66
+ height: calc-size(max-content, size);
67
+ }
68
+ }
@@ -0,0 +1,26 @@
1
+ include /atom/button/button.mixin.pug
2
+ include /atom/icon/icon.mixin.pug
3
+ include /atom/text/text.mixin.pug
4
+ include /organism/h-space/h-space.mixin.pug
5
+
6
+ include toggle.mixin.pug
7
+
8
+ mixin ippon-toggle-example(options)
9
+ - const { id, open } = options || {};
10
+ - const label = 'Toggle Title';
11
+ +ippon-toggle(options)
12
+ +ippon-toggle--header
13
+ +ippon-toggle--button({ id, open, label })
14
+ +ippon-h-space({ gap: 10, align: 'middle' })
15
+ +ippon-icon({ name: 'folder', variant: 'outline', size: 16, color: 'warning-primary' })
16
+ +ippon-text({ variant: 'body', weight: 'bold' })= label
17
+ +ippon-text({ variant: 'body', weight: 'small', color: 'neutral-tertiary-inversed' }) (3 elements)
18
+ +ippon-toggle--actions
19
+ +ippon-button({ color: 'neutral', variant: 'outline' }) Action
20
+ +ippon-toggle--body({ labelledBy: id })
21
+ +ippon-toggle--content First
22
+ +ippon-toggle--content Second
23
+ +ippon-toggle--content Third
24
+
25
+ +ippon-toggle-example({ id: 'first-toggle' })
26
+ +ippon-toggle-example({ id: 'second-toggle', open: true })
@@ -0,0 +1 @@
1
+ ## Toggle