@ilo-org/twig 0.17.0 → 0.17.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 (237) hide show
  1. package/dist/components/accordion/accordion.behavior.js +1 -0
  2. package/dist/components/accordion/accordion.css +1 -0
  3. package/dist/components/accordion/accordion.twig +16 -0
  4. package/dist/components/accordion/accordion.wingsuit.yml +77 -0
  5. package/dist/components/accordion-item/accordion-item.twig +22 -0
  6. package/dist/components/breadcrumb/breadcrumb.behavior.js +1 -0
  7. package/dist/components/breadcrumb/breadcrumb.css +1 -0
  8. package/dist/components/breadcrumb/breadcrumb.twig +43 -0
  9. package/dist/components/breadcrumb/breadcrumb.wingsuit.yml +36 -0
  10. package/dist/components/button/button.css +1 -0
  11. package/dist/components/button/button.twig +23 -0
  12. package/dist/components/button/button.wingsuit.yml +114 -0
  13. package/dist/components/callout/callout.behavior.js +1 -0
  14. package/dist/components/callout/callout.css +1 -0
  15. package/dist/components/callout/callout.twig +41 -0
  16. package/dist/components/callout/callout.wingsuit.yml +72 -0
  17. package/dist/components/card/card.css +1 -0
  18. package/dist/components/card/card.twig +24 -0
  19. package/dist/components/card/card.wingsuit.yml +227 -0
  20. package/dist/components/card_data/card_data.twig +101 -0
  21. package/dist/components/card_data/card_data.wingsuit.yml +135 -0
  22. package/dist/components/card_detail/card_detail.twig +37 -0
  23. package/dist/components/card_detail/card_detail.wingsuit.yml +71 -0
  24. package/dist/components/card_factlist/card_factlist.twig +21 -0
  25. package/dist/components/card_factlist/card_factlist.wingsuit.yml +46 -0
  26. package/dist/components/card_feature/card_feature.twig +39 -0
  27. package/dist/components/card_feature/card_feature.wingsuit.yml +80 -0
  28. package/dist/components/card_multilink/card_multilink.twig +45 -0
  29. package/dist/components/card_multilink/card_multilink.wingsuit.yml +91 -0
  30. package/dist/components/card_promo/card_promo.twig +35 -0
  31. package/dist/components/card_promo/card_promo.wingsuit.yml +71 -0
  32. package/dist/components/card_stat/card_stat.twig +24 -0
  33. package/dist/components/card_stat/card_stat.wingsuit.yml +44 -0
  34. package/dist/components/card_text/card_text.twig +35 -0
  35. package/dist/components/card_text/card_text.wingsuit.yml +57 -0
  36. package/dist/components/cardgroup/cardgroup.css +1 -0
  37. package/dist/components/cardgroup/cardgroup.twig +46 -0
  38. package/dist/components/cardgroup/cardgroup.wingsuit.yml +158 -0
  39. package/dist/components/checkbox/checkbox.css +1 -0
  40. package/dist/components/checkbox/checkbox.twig +17 -0
  41. package/dist/components/checkbox/checkbox.wingsuit.yml +83 -0
  42. package/dist/components/container/container.css +1 -0
  43. package/dist/components/contextmenu/contextmenu.css +1 -0
  44. package/dist/components/contextmenu/contextmenu.twig +12 -0
  45. package/dist/components/contextmenu/contextmenu.wingsuit.yml +24 -0
  46. package/dist/components/credit/credit.css +1 -0
  47. package/dist/components/datacard/datacard.css +1 -0
  48. package/dist/components/datepicker/datepicker.css +1 -0
  49. package/dist/components/datepicker/datepicker.twig +20 -0
  50. package/dist/components/datepicker/datepicker.wingsuit.yml +72 -0
  51. package/dist/components/detailcard/detailcard.css +1 -0
  52. package/dist/components/dropdown/dropdown.css +1 -0
  53. package/dist/components/dropdown/dropdown.twig +22 -0
  54. package/dist/components/dropdown/dropdown.wingsuit.yml +100 -0
  55. package/dist/components/empty/empty.css +1 -0
  56. package/dist/components/factlistcard/factlistcard.css +1 -0
  57. package/dist/components/featurecard/featurecard.css +1 -0
  58. package/dist/components/fieldset/fieldset.css +1 -0
  59. package/dist/components/fieldset/fieldset.twig +70 -0
  60. package/dist/components/file-upload/file-upload.css +1 -0
  61. package/dist/components/fileupload/fileupload.behavior.js +1 -0
  62. package/dist/components/fileupload/fileupload.twig +20 -0
  63. package/dist/components/fileupload/fileupload.wingsuit.yml +94 -0
  64. package/dist/components/footer/footer.css +1 -0
  65. package/dist/components/footer/footer.twig +63 -0
  66. package/dist/components/footer/footer.wingsuit.yml +106 -0
  67. package/dist/components/form/form.css +1 -0
  68. package/dist/components/form/form.twig +19 -0
  69. package/dist/components/form/form.wingsuit.yml +205 -0
  70. package/dist/components/formcontrol/formcontrol.css +1 -0
  71. package/dist/components/formcontrol/formcontrol.twig +89 -0
  72. package/dist/components/heading/heading.css +1 -0
  73. package/dist/components/hero/hero.css +1 -0
  74. package/dist/components/hero/hero.twig +65 -0
  75. package/dist/components/hero/hero.wingsuit.yml +182 -0
  76. package/dist/components/herocard/herocard.css +1 -0
  77. package/dist/components/herocard/herocard.twig +30 -0
  78. package/dist/components/herocard/herocard.wingsuit.yml +71 -0
  79. package/dist/components/icon/icon.behavior.js +1 -0
  80. package/dist/components/icon/icon.css +1 -0
  81. package/dist/components/icon/icon.twig +4 -0
  82. package/dist/components/icon/icon.wingsuit.yml +29 -0
  83. package/dist/components/image/image.css +1 -0
  84. package/dist/components/image/image.twig +29 -0
  85. package/dist/components/image/image.wingsuit.yml +57 -0
  86. package/dist/components/input/input.css +1 -0
  87. package/dist/components/input/input.twig +10 -0
  88. package/dist/components/link/link.css +1 -0
  89. package/dist/components/link/link.twig +8 -0
  90. package/dist/components/link/link.wingsuit.yml +36 -0
  91. package/dist/components/linklist/linklist.behavior.js +1 -0
  92. package/dist/components/linklist/linklist.css +1 -0
  93. package/dist/components/linklist/linklist.twig +26 -0
  94. package/dist/components/linklist/linklist.wingsuit.yml +55 -0
  95. package/dist/components/list/list.css +1 -0
  96. package/dist/components/list/list.twig +35 -0
  97. package/dist/components/list/list.wingsuit.yml +60 -0
  98. package/dist/components/list-item/list-item.twig +6 -0
  99. package/dist/components/list-item/list-item.wingsuit.yml +19 -0
  100. package/dist/components/loading/loading.behavior.js +1 -0
  101. package/dist/components/loading/loading.css +1 -0
  102. package/dist/components/loading/loading.twig +8 -0
  103. package/dist/components/loading/loading.wingsuit.yml +39 -0
  104. package/dist/components/localnav/localnav.twig +86 -0
  105. package/dist/components/localnav/localnav.wingsuit.yml +88 -0
  106. package/dist/components/logo/logo.css +1 -0
  107. package/dist/components/logogrid/logogrid.css +1 -0
  108. package/dist/components/logogrid/logogrid.twig +17 -0
  109. package/dist/components/logogrid/logogrid.wingsuit.yml +45 -0
  110. package/dist/components/modal/modal.behavior.js +1 -0
  111. package/dist/components/modal/modal.css +1 -0
  112. package/dist/components/modal/modal.twig +20 -0
  113. package/dist/components/modal/modal.wingsuit.yml +61 -0
  114. package/dist/components/multilinkcard/multilinkcard.css +1 -0
  115. package/dist/components/navigation/navigation.behavior.js +1 -0
  116. package/dist/components/navigation/navigation.css +1 -0
  117. package/dist/components/navigation/navigation.twig +171 -0
  118. package/dist/components/navigation/navigation.wingsuit.yml +126 -0
  119. package/dist/components/notification/notification.behavior.js +1 -0
  120. package/dist/components/notification/notification.css +1 -0
  121. package/dist/components/notification/notification.twig +18 -0
  122. package/dist/components/notification/notification.wingsuit.yml +59 -0
  123. package/dist/components/numberpicker/numberpicker.twig +16 -0
  124. package/dist/components/numberpicker/numberpicker.wingsuit.yml +91 -0
  125. package/dist/components/pagination/pagination.css +1 -0
  126. package/dist/components/pagination/pagination.twig +49 -0
  127. package/dist/components/pagination/pagination.wingsuit.yml +75 -0
  128. package/dist/components/picture/picture.twig +21 -0
  129. package/dist/components/polyfill/polyfill.twig +10 -0
  130. package/dist/components/profile/profile.css +1 -0
  131. package/dist/components/profile/profile.twig +26 -0
  132. package/dist/components/profile/profile.wingsuit.yml +46 -0
  133. package/dist/components/promocard/promocard.css +1 -0
  134. package/dist/components/radio/radio.css +1 -0
  135. package/dist/components/radio/radio.twig +23 -0
  136. package/dist/components/radio/radio.wingsuit.yml +83 -0
  137. package/dist/components/readmore/readmore.behavior.js +1 -0
  138. package/dist/components/readmore/readmore.css +1 -0
  139. package/dist/components/readmore/readmore.twig +16 -0
  140. package/dist/components/readmore/readmore.wingsuit.yml +37 -0
  141. package/dist/components/richtext/richtext.css +1 -0
  142. package/dist/components/richtext/richtext.twig +6 -0
  143. package/dist/components/richtext/richtext.wingsuit.yml +13 -0
  144. package/dist/components/search/search.behavior.js +1 -0
  145. package/dist/components/search/search.twig +31 -0
  146. package/dist/components/search/search.wingsuit.yml +89 -0
  147. package/dist/components/searchfield/searchfield.css +1 -0
  148. package/dist/components/socialmedia/socialmedia.css +1 -0
  149. package/dist/components/socialmedia/socialmedia.twig +17 -0
  150. package/dist/components/socialmedia/socialmedia.wingsuit.yml +59 -0
  151. package/dist/components/statcard/statcard.css +1 -0
  152. package/dist/components/table/table.behavior.js +1 -0
  153. package/dist/components/table/table.css +1 -0
  154. package/dist/components/table/table.twig +39 -0
  155. package/dist/components/table/table.wingsuit.yml +112 -0
  156. package/dist/components/tableofcontents/tableofcontents.behavior.js +1 -0
  157. package/dist/components/tableofcontents/tableofcontents.css +1 -0
  158. package/dist/components/tableofcontents/tableofcontents.twig +47 -0
  159. package/dist/components/tableofcontents/tableofcontents.wingsuit.yml +44 -0
  160. package/dist/components/tabs/tabs.behavior.js +1 -0
  161. package/dist/components/tabs/tabs.css +1 -0
  162. package/dist/components/tabs/tabs.twig +26 -0
  163. package/dist/components/tabs/tabs.wingsuit.yml +169 -0
  164. package/dist/components/tag/tag.behavior.js +1 -0
  165. package/dist/components/tag/tag.css +1 -0
  166. package/dist/components/tag/tag.twig +30 -0
  167. package/dist/components/tag/tag.wingsuit.yml +43 -0
  168. package/dist/components/tags/tags.twig +15 -0
  169. package/dist/components/tags/tags.wingsuit.yml +45 -0
  170. package/dist/components/textarea/textarea.css +1 -0
  171. package/dist/components/textarea/textarea.twig +14 -0
  172. package/dist/components/textarea/textarea.wingsuit.yml +126 -0
  173. package/dist/components/textcard/textcard.css +1 -0
  174. package/dist/components/textinput/textinput.css +1 -0
  175. package/dist/components/textinput/textinput.twig +14 -0
  176. package/dist/components/textinput/textinput.wingsuit.yml +86 -0
  177. package/dist/components/toggle/toggle.css +1 -0
  178. package/dist/components/toggle/toggle.twig +36 -0
  179. package/dist/components/toggle/toggle.wingsuit.yml +94 -0
  180. package/dist/components/tooltip/tooltip.behavior.js +1 -0
  181. package/dist/components/tooltip/tooltip.css +1 -0
  182. package/dist/components/tooltip/tooltip.twig +14 -0
  183. package/dist/components/tooltip/tooltip.wingsuit.yml +53 -0
  184. package/dist/components/video/video.behavior.js +16 -0
  185. package/dist/components/video/video.css +1 -0
  186. package/dist/components/video/video.twig +18 -0
  187. package/dist/components/video/video.wingsuit.yml +82 -0
  188. package/dist/components/videoplayer/videoplayer.twig +8 -0
  189. package/dist/global/styles.css +2 -0
  190. package/package.json +13 -9
  191. package/.browserslistrc +0 -4
  192. package/.eslintrc.js +0 -25
  193. package/.stylelintignore +0 -9
  194. package/.stylelintrc +0 -19
  195. package/.turbo/turbo-build:lib.log +0 -71
  196. package/CHANGELOG.md +0 -1036
  197. package/apps/storybook/assets.js +0 -10
  198. package/apps/storybook/main.js +0 -27
  199. package/apps/storybook/manager-head.html +0 -92
  200. package/apps/storybook/manager.js +0 -7
  201. package/apps/storybook/patterns/colors.stories.mdx +0 -23
  202. package/apps/storybook/patterns/intro.stories.mdx +0 -184
  203. package/apps/storybook/patterns/typeset.stories.mdx +0 -32
  204. package/apps/storybook/patterns/welcome.stories.mdx +0 -33
  205. package/apps/storybook/preview-body.html +0 -4
  206. package/apps/storybook/preview-head.html +0 -5
  207. package/apps/storybook/preview.js +0 -36
  208. package/apps/storybook/styles.scss +0 -25
  209. package/apps/storybook/theme.js +0 -46
  210. package/apps/storybook/welcome.scss +0 -131
  211. package/babel.config.js +0 -16
  212. package/copystyles.js +0 -16
  213. package/copytemplates.js +0 -27
  214. package/images/fao-logo.svg +0 -195
  215. package/images/favicon.ico +0 -0
  216. package/images/hero.jpg +0 -0
  217. package/images/ilo-dg.jpg +0 -0
  218. package/images/ilo-headquarters.jpg +0 -0
  219. package/images/large.jpg +0 -0
  220. package/images/logo_en_horizontal_blue.svg +0 -893
  221. package/images/media-file-poster.jpg +0 -0
  222. package/images/medium.jpg +0 -0
  223. package/images/publication.jpg +0 -0
  224. package/images/small.jpg +0 -0
  225. package/images/twig.svg +0 -6
  226. package/images/unhcr-logo.svg +0 -1
  227. package/images/unicef-logo.png +0 -0
  228. package/images/video-example.mp4 +0 -0
  229. package/images/wfp-logo.svg +0 -1
  230. package/images/who-logo.svg +0 -1
  231. package/images/youtube-video-poster.avif +0 -0
  232. package/importprefix.js +0 -20
  233. package/importsvgs.js +0 -5
  234. package/jest.config.js +0 -18
  235. package/postcss.config.js +0 -6
  236. package/rollup.config.js +0 -31
  237. package/wingsuit.config.js +0 -28
@@ -0,0 +1,49 @@
1
+ {#
2
+ PAGINATION COMPONENT
3
+ #}
4
+ <div class="ilo--pagination icon icon--{{type}}">
5
+ <div class="ilo--pagination--previous-set">
6
+ <a
7
+ class="ilo--pagination--first-page ilo--pagination--link {% if currentPage == 0 %}ilo--pagination--disable{% endif %}"
8
+ href="{{ firstPageUrl }}"
9
+ title="{{ firstPageTitle }}"
10
+ >
11
+ {{ firstPageTitle }}
12
+ </a>
13
+
14
+ <a
15
+ class="ilo--pagination--prev-page ilo--pagination--link {% if currentPage == 0 %}ilo--pagination--disable{% endif %}"
16
+ href="{{ prevPageUrl }}"
17
+ title="{{ prevPageTitle }}"
18
+ >
19
+ {{ prevPageTitle }}
20
+ </a>
21
+ </div>
22
+
23
+ <p class="ilo--pagination--page">
24
+ {% set currentPageZeroIndex = currentPage * 1 %}
25
+ {% set currentPageIndex = currentPageZeroIndex + 1 %}
26
+
27
+ <span>{{currentPageIndex}}</span>
28
+ <span>{{pageCountPreposition}}</span>
29
+ <span>{{totalPages}}</span>
30
+ </p>
31
+
32
+ <div class="ilo--next-set">
33
+ <a
34
+ class="ilo--pagination--next-page ilo--pagination--link {% if currentPageIndex == totalPages %}ilo--pagination--disable{% endif %}"
35
+ href="{{ nextPageUrl }}"
36
+ title="{{ nextPageTitle }}"
37
+ >
38
+ {{ nextPageTitle }}
39
+ </a>
40
+
41
+ <a
42
+ class="ilo--pagination--last-page ilo--pagination--link {% if currentPageIndex == totalPages %}ilo--pagination--disable{% endif %}"
43
+ href="{{ lastPageUrl }}"
44
+ title="{{ lastPageTitle }}"
45
+ >
46
+ {{ lastPageTitle }}
47
+ </a>
48
+ </div>
49
+ </div>
@@ -0,0 +1,75 @@
1
+ pagination:
2
+ namespace: Components/Navigation
3
+ use: "@components/pagination/pagination.twig"
4
+ label: Pagination
5
+ description: The Pagination component breaks content into pages for easier navigation with intuitive controls like 'Previous' and 'Next' buttons.
6
+ fields:
7
+ currentPage:
8
+ type: numeric
9
+ label: Current page
10
+ description: current page number that the user is on, zero-indexed
11
+ required: true
12
+ preview: 0
13
+ escape: false
14
+ firstPageUrl:
15
+ type: string
16
+ label: First Page link
17
+ description: Link to the first page
18
+ required: true
19
+ preview: "http://www.google.com?s=first"
20
+ firstPageTitle:
21
+ type: string
22
+ label: First Page Title
23
+ description: Title label for the first page
24
+ required: true
25
+ preview: "First"
26
+ lastPageUrl:
27
+ type: string
28
+ label: Last Page link
29
+ description: Link to the last page
30
+ required: true
31
+ preview: "http://www.google.com?s=last"
32
+ lastPageTitle:
33
+ type: string
34
+ label: Last Page Title
35
+ description: Title label for the last page
36
+ required: true
37
+ preview: "Last"
38
+ nextPageUrl:
39
+ type: string
40
+ label: Next Page link
41
+ description: Link to the next page
42
+ required: true
43
+ preview: "http://www.google.com?s=next"
44
+ nextPageTitle:
45
+ type: string
46
+ label: Next Page Title
47
+ description: Title label for the next page
48
+ required: true
49
+ preview: "Next"
50
+ prevPageUrl:
51
+ type: string
52
+ label: Prev Page link
53
+ description: Link to the prev page
54
+ required: true
55
+ preview: "http://www.google.com?s=prev"
56
+ prevPageTitle:
57
+ type: string
58
+ label: Prev Page Title
59
+ description: Title label for the prev page
60
+ required: true
61
+ preview: "Previous"
62
+ pageCountPreposition:
63
+ type: string
64
+ label: Page Count Preposition
65
+ description: Linking word for the page count
66
+ required: true
67
+ preview: "of"
68
+ totalPages:
69
+ type: numeric
70
+ label: Total Pages
71
+ description: The number of total pages
72
+ required: true
73
+ preview: 8
74
+ escape: false
75
+ visibility: storybook
@@ -0,0 +1,21 @@
1
+ {#
2
+ PICTURE COMPONENT
3
+ #}
4
+ {% if image.url is iterable %}
5
+ <picture>
6
+ {% for img in image.url|reverse %}
7
+ {% if loop.length == 1 or loop.last == false %}
8
+ {% if img.breakpoint matches '/^\\d+$/' %}
9
+ <source srcset="{{img.src}}" media="(min-width: {{img.breakpoint}}px)">
10
+ {% else %}
11
+ <source srcset="{{img.src}}" media="{{img.breakpoint}}">
12
+ {% endif %}
13
+ {% endif %}
14
+ {% endfor %}
15
+ <img class="ilo--{{class}}--picture" src="{{image.url|reverse|last.src}}" alt="{{image.alt}}" {% if image.loading %} loading="{{ image.loading }}" {% endif %}>
16
+ </picture>
17
+ {% else %}
18
+ <picture>
19
+ <img class="ilo--{{class}}--picture" src="{{image.url}}" alt="{{image.alt}}" {% if image.loading %} loading="{{ image.loading }}" {% endif %}>
20
+ </picture>
21
+ {% endif %}
@@ -0,0 +1,10 @@
1
+ {#
2
+ POLYFILL COMPONENT
3
+
4
+ This component is specifically to make this polyfill work correctly in Wingsuit. To use this in the context of Drupal, Wordpress, etc, consider using the approach documented at https://github.com/GoogleChromeLabs/container-query-polyfill
5
+ #}
6
+ <script>
7
+ if (!("container" in document.documentElement.style)) {
8
+ import("https://unpkg.com/container-query-polyfill@^0.2.0");
9
+ }
10
+ </script>
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.ilo--profile{display:grid;grid-template-columns:min-content 1fr;grid-template-rows:minmax(64px,auto) auto;max-width:18.3815648446rem;width:100%}.ilo--profile--avatar{grid-row:1;border-radius:50%}.ilo--profile figcaption{grid-row:1;grid-column-end:-1}.ilo--profile--figcaption--content,.ilo--profile figcaption{box-sizing:border-box;display:flex;flex-flow:column;justify-content:center;align-items:start}.ilo--profile--figcaption--content{width:100%;position:relative}.ilo--profile--figcaption--content:after{content:"";position:absolute;bottom:-12px;width:100%;border-bottom:2px solid #edf0f2}.ilo--profile--name{font-family:Overpass,Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}.ilo--profile--description,.ilo--profile--role{font-family:Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}.ilo--profile--description{grid-row:2;grid-column:1/-1}.ilo--profile--link{font-family:Overpass,Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;grid-column:1/-1}.ilo--profile--link a{text-decoration:none;color:#230050;display:inline-block}.ilo--profile--link--label{display:flex;flex-flow:row nowrap;align-items:center}.ilo--profile--link--label:after{position:relative;bottom:.0535905681rem;height:1.2861736334rem;width:1.2861736334rem;margin-inline-start:.4287245445rem;content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23230050' d='M8.638 19.996l-.988-.988L14.657 12 7.65 4.992l.988-.989 7.505 7.5a.702.702 0 0 1 0 .995l-7.505 7.498z'/%3E%3C/svg%3E")}[dir=rtl] .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23230050' d='M7.9 12.5l-.2-.2c0-.1-.1-.2-.1-.3s0-.2.1-.3c0-.1.1-.2.2-.2L15.4 4l1 1-7 7 7 7-1 1-7.5-7.5z'/%3E%3C/svg%3E")}.ilo--profile--link a:focus .ilo--profile--link--label,.ilo--profile--link a:hover .ilo--profile--link--label{color:#1e2dbe;outline:0}.ilo--profile--link a:focus .ilo--profile--link--label:after,.ilo--profile--link a:hover .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%231E2DBE' d='M8.638 19.996l-.988-.988L14.657 12 7.65 4.992l.988-.989 7.505 7.5a.702.702 0 0 1 0 .995l-7.505 7.498z'/%3E%3C/svg%3E")}[dir=rtl] .ilo--profile--link a:focus .ilo--profile--link--label:after,[dir=rtl] .ilo--profile--link a:hover .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%231E2DBE' d='M7.9 12.5l-.2-.2c0-.1-.1-.2-.1-.3s0-.2.1-.3c0-.1.1-.2.2-.2L15.4 4l1 1-7 7 7 7-1 1-7.5-7.5z'/%3E%3C/svg%3E")}.ilo--profile__theme__dark{color:#edf0f2}.ilo--profile__theme__dark .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23EDF0F2' d='M8.638 19.996l-.988-.988L14.657 12 7.65 4.992l.988-.989 7.505 7.5a.702.702 0 0 1 0 .995l-7.505 7.498z'/%3E%3C/svg%3E")}[dir=rtl] .ilo--profile__theme__dark .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23EDF0F2' d='M7.9 12.5l-.2-.2c0-.1-.1-.2-.1-.3s0-.2.1-.3c0-.1.1-.2.2-.2L15.4 4l1 1-7 7 7 7-1 1-7.5-7.5z'/%3E%3C/svg%3E")}.ilo--profile__theme__dark .ilo--profile--link a{color:#edf0f2}.ilo--profile__theme__dark .ilo--profile--link a:focus .ilo--profile--link--label,.ilo--profile__theme__dark .ilo--profile--link a:hover .ilo--profile--link--label{color:#05d2d2;outline:0}.ilo--profile__theme__dark .ilo--profile--link a:focus .ilo--profile--link--label:after,.ilo--profile__theme__dark .ilo--profile--link a:hover .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2305D2D2' d='M8.638 19.996l-.988-.988L14.657 12 7.65 4.992l.988-.989 7.505 7.5a.702.702 0 0 1 0 .995l-7.505 7.498z'/%3E%3C/svg%3E")}[dir=rtl] .ilo--profile__theme__dark .ilo--profile--link a:focus .ilo--profile--link--label:after,[dir=rtl] .ilo--profile__theme__dark .ilo--profile--link a:hover .ilo--profile--link--label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2305D2D2' d='M7.9 12.5l-.2-.2c0-.1-.1-.2-.1-.3s0-.2.1-.3c0-.1.1-.2.2-.2L15.4 4l1 1-7 7 7 7-1 1-7.5-7.5z'/%3E%3C/svg%3E")}.ilo--profile__size__large .ilo--profile--avatar{width:3.4297963558rem;height:3.4297963558rem;margin-inline-end:.857449089rem}.ilo--profile__size__large .ilo--profile--name{font-weight:700;font-size:16px;letter-spacing:normal;line-height:23.36px}.ilo--profile__size__large .ilo--profile--description,.ilo--profile__size__large .ilo--profile--role{font-size:14.93px;letter-spacing:normal;line-height:20.3px}.ilo--profile__size__large .ilo--profile--description{padding-block-start:1.0718113612rem}.ilo--profile__size__large .ilo--profile--link{font-size:16px;letter-spacing:normal;line-height:23.36px;padding-block-start:1.2861736334rem}
@@ -0,0 +1,26 @@
1
+ {# profile.twig #}
2
+
3
+ {% set defaultAlt = "Photo of " ~ name %}
4
+ <figure class="ilo--profile ilo--profile__theme__{{theme|default("light")}} ilo--profile__size__{{size|default("large")}}">
5
+ {% if avatar %}
6
+ <img class="ilo--profile--avatar" src="{{avatar}}" alt="{{alt|default(defaultAlt)}}">
7
+ {% endif %}
8
+ <figcaption>
9
+ <div class="ilo--profile--figcaption--content">
10
+ <div class="ilo--profile--name">{{name}}</div>
11
+ {% if role %}
12
+ <div class="ilo--profile--role">{{role}}</div>
13
+ {% endif %}
14
+ </div>
15
+ </figcaption>
16
+ {% if description %}
17
+ <p class="ilo--profile--description">{{description}}</p>
18
+ {% endif %}
19
+ {% if link and link.url and link.label %}
20
+ <div class="ilo--profile--link">
21
+ <a href={{link.url}} target="__blank" rel="noopener noreferrer">
22
+ <span class="ilo--profile--link--label">{{link.label}}</span>
23
+ </a>
24
+ </div>
25
+ {% endif %}
26
+ </figure>
@@ -0,0 +1,46 @@
1
+ profile:
2
+ namespace: Components/Content
3
+ use: "@components/profile/profile.twig"
4
+ label: Profile
5
+ description: The Profile component is used to display information about a person.
6
+ fields:
7
+ avatar:
8
+ type: string
9
+ label: Avatar
10
+ description: The avatar for the profile
11
+ required: true
12
+ preview: "/images/ilo-dg.jpg"
13
+ description:
14
+ type: string
15
+ label: Description
16
+ description: An optional plain-text description (e.g. a short bio)
17
+ preview: "Gilbert F. Houngbo was elected as the ILO’s 11th Director-General by the organization’s Governing Body in March 2022. "
18
+ link:
19
+ type: object
20
+ label: Link
21
+ description: An optional url and label for a link associated with the profile
22
+ preview:
23
+ label: "Learn more"
24
+ url: "https://www.ilo.org"
25
+ name:
26
+ type: string
27
+ label: Name
28
+ description: The name of the person associated with the profile
29
+ preview: "Gilbert F. Houngbo"
30
+ required: true
31
+ role:
32
+ type: string
33
+ label: Role
34
+ description: An optional plain-text field indicating the person's role in the organization
35
+ preview: "ILO Director-General"
36
+ settings:
37
+ theme:
38
+ type: select
39
+ label: Theme
40
+ description: The theme for the profile styles
41
+ required: false
42
+ options:
43
+ light: Light
44
+ dark: Dark
45
+ preview: "light"
46
+ visibility: storybook
@@ -0,0 +1 @@
1
+ .ilo--card--wrapper__type__promo{--max-width:33.9764201501rem}.ilo--card--wrapper__type__promo__size__narrow{--max-width:18.3815648446rem}@media screen and (max-width:609px){.ilo--card--wrapper__type__promo__size__narrow{--max-width:100%}}.ilo--card--wrapper__type__promo__size__standard{--max-width:33.9764201501rem}.ilo--card--wrapper__type__promo__size__wide{--max-width:49.3033226152rem}.ilo--card--wrapper__type__promo__size__fluid{--max-width:100%}.ilo--card__type__promo{padding:2.1436227224rem 1.2861736334rem;width:100%}@media screen and (min-width:610px){.ilo--card__type__promo{padding:2.5723472669rem}}@media screen and (min-width:1024px){.ilo--card__type__promo{padding:3.4297963558rem 3.8585209003rem}}.ilo--card__type__promo .ilo--card--title{margin-bottom:.6430868167rem}.ilo--card__type__promo.ilo--card__size__standard{padding:2.5723472669rem}.ilo--card__type__promo.ilo--card__size__standard.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 87px) 0,100% 48px,100% 100%,0 100%)}[dir=rtl] .ilo--card__type__promo.ilo--card__size__standard.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 87px) 0,100% 48px,100% 100%,0 100%);clip-path:polygon(87px 0,100% 0,100% 100%,0 100%,0 48px)}.ilo--card__type__promo.ilo--card__size__fluid,.ilo--card__type__promo.ilo--card__size__wide{padding:3.4297963558rem 3.8585209003rem}.ilo--card__type__promo.ilo--card__size__fluid.ilo--card__cornercut,.ilo--card__type__promo.ilo--card__size__wide.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 116px) 0,100% 64px,100% 100%,0 100%)}[dir=rtl] .ilo--card__type__promo.ilo--card__size__fluid.ilo--card__cornercut,[dir=rtl] .ilo--card__type__promo.ilo--card__size__wide.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 116px) 0,100% 64px,100% 100%,0 100%);clip-path:polygon(116px 0,100% 0,100% 100%,0 100%,0 64px)}.ilo--card__type__promo.ilo--card__size__narrow{padding:2.1436227224rem 1.2861736334rem}.ilo--card__type__promo.ilo--card__size__narrow.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 72px) 0,100% 40px,100% 100%,0 100%)}[dir=rtl] .ilo--card__type__promo.ilo--card__size__narrow.ilo--card__cornercut{clip-path:polygon(0 0,calc(100% - 72px) 0,100% 40px left,100% 100%,0 100%)}.ilo--card__type__promo.ilo--card__size__narrow .ilo--card--title{font-size:29.16px;letter-spacing:-.035em;line-height:36.45px;margin-bottom:.4287245445rem}@media screen and (min-width:610px){.ilo--card__type__promo.ilo--card__size__narrow .ilo--card--title{font-size:36.45px;letter-spacing:-.035em;line-height:43.74px}}.ilo--card__type__promo.ilo--card__size__narrow .ilo--card--intro{font-size:16px;letter-spacing:normal;line-height:23.36px}.ilo--card__type__promo.ilo--card__theme__light:not(:hover) .ilo--card--title{color:#2d2d2d;transition-property:color;transition-duration:.15s;transition-timing-function:ease-out}.ilo--card__type__promo .ilo--card--title{font-size:29.16px;letter-spacing:-.035em;line-height:36.45px}@media screen and (min-width:610px){.ilo--card__type__promo .ilo--card--title{font-size:36.45px;letter-spacing:-.035em;line-height:43.74px}}.ilo--card__type__promo .ilo--card--intro{font-size:16px;letter-spacing:normal;line-height:23.36px;margin-bottom:1.7148981779rem}@media screen and (min-width:610px){.ilo--card__type__promo .ilo--card--intro{font-size:18.66px;letter-spacing:normal;line-height:27.24px}}
@@ -0,0 +1 @@
1
+ .ilo--radio{border:none;display:grid;margin:0;position:relative;place-content:center}.ilo--radio,.ilo--radio input{height:1.2861736334rem;width:1.2861736334rem;cursor:pointer}.ilo--radio input{appearance:none;border-radius:50%}.ilo--radio--control:before{border:.2143622722rem solid #b8c4cc;border-radius:50%;height:.9646302251rem;left:.1607717042rem;top:.1607717042rem;width:.9646302251rem;z-index:1}.ilo--radio--control:after,.ilo--radio--control:before{content:"";background-color:#b8c4cc;position:absolute;pointer-events:none}.ilo--radio--control:after{border-radius:50%;height:1.2861736334rem;left:0;top:0;width:1.2861736334rem;z-index:0}input:checked+.ilo--radio--control:before{background-color:#ebf5fd;border-color:#230050}input:checked+.ilo--radio--control:after{background-color:#230050}input:focus+.ilo--radio--control:after{background-color:#ffcd2d}input:disabled+.ilo--radio--control:after,input:disabled+.ilo--radio--control:before{opacity:.45}.ilo--radio__error .ilo--radio--control:after,input:invalid+.ilo--radio--control:after{background-color:#fa3c4b}
@@ -0,0 +1,23 @@
1
+ {# checkbox.twig #}
2
+
3
+ {% extends "@components/form/formcontrol.twig" %}
4
+
5
+ {% set baseClass = (prefix is defined ? prefix ~ "--radio" : "--radio") %}
6
+ {% set controlClass = baseClass ~ "--control" %}
7
+
8
+ {% set errorClass = baseClass ~ "__error" %}
9
+
10
+ {% set radioClasses = [baseClass, class] %}
11
+
12
+ {% if error is defined and error %}
13
+ {% set radioClasses = radioClasses|merge([errorClass]) %}
14
+ {% endif %}
15
+
16
+
17
+ {% block formfield %}
18
+ <div class="{{ radioClasses|join(" ") }}">
19
+ <input id="{{ id is defined ? id : name }}" name="{{ name }}" type="radio" {% if defaultChecked is defined and defaultChecked %} defaultchecked {% endif %} {% if checked is defined and checked %} checked {% endif %} {% if ariaDescribedBy is defined %} aria-describedby="{{ ariaDescribedBy }}" {% endif %} {% if checked is defined and checked %} checked {% endif %} value="{{ value }}" {% if disabled is defined and disabled %} disabled {% endif %} {% if required is defined and required %} required {% endif %}/>
20
+ <span class="{{ controlClass }}"></span>
21
+ </div>
22
+
23
+ {% endblock %}
@@ -0,0 +1,83 @@
1
+ radio:
2
+ namespace: Components/Forms
3
+ use: "@components/radio/radio.twig"
4
+ label: Radio
5
+ description: The Radio component provides users with a switch they can use to
6
+ turn a single option on or off or alternate between multiple
7
+ different states.
8
+ visibility: storybook
9
+ fields:
10
+ label:
11
+ type: text
12
+ label: Label
13
+ description: The label for the form element.
14
+ preview: "Do you agree to these terms?"
15
+ tooltip:
16
+ type: string
17
+ description: The tooltip for the form element.
18
+ helper:
19
+ type: text
20
+ label: Helper Text
21
+ description: The helper text for the form element.
22
+ id:
23
+ type: text
24
+ label: ID
25
+ description: The ID of the input.
26
+ name:
27
+ type: text
28
+ label: Name
29
+ description: The name of the input.
30
+ class:
31
+ type: text
32
+ label: Class
33
+ description: The class of the form field.
34
+ preview: radio
35
+ default: ""
36
+ value:
37
+ type: text
38
+ label: Value
39
+ description: The value of the input.
40
+ preview: "1"
41
+ settings:
42
+ defaultSelected:
43
+ type: boolean
44
+ label: Default Selected
45
+ description: The default selected state of the form element.
46
+ preview: false
47
+ labelPlacement:
48
+ type: select
49
+ label: Label Placement
50
+ description: The placement of the label for the form element.
51
+ preview: "end"
52
+ options:
53
+ start: start
54
+ end: end
55
+ top: top
56
+ bottom: bottom
57
+ labelSize:
58
+ type: select
59
+ label: Label Size
60
+ description: The size of the label for the form element.
61
+ preview: "small"
62
+ options:
63
+ small: small
64
+ medium: medium
65
+ large: large
66
+ disabled:
67
+ type: boolean
68
+ label: Disabled
69
+ description: The disabled state of the form element.
70
+ preview: false
71
+ default: false
72
+ required:
73
+ type: boolean
74
+ label: Required
75
+ description: The required state of the form element.
76
+ preview: false
77
+ default: false
78
+ error:
79
+ type: boolean
80
+ label: Error
81
+ description: Adds an error state to the form control.
82
+ preview: false
83
+ default: false
@@ -0,0 +1 @@
1
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function t(t,n){for(var i=0;i<n.length;i++){var r=n[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,e(r.key),r)}}var n="click",i=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.element=t,this.prefix=this.element.dataset.prefix,this.openclass="".concat(this.prefix,"--read-more--open"),this.buttonopenclass="".concat(this.prefix,"--read-more--button--open"),this.fulltext=this.element.dataset.fulltext,this.excerpt=this.element.dataset.excerpt,this.buttonlabel={closed:this.element.dataset.closed,opened:this.element.dataset.opened},this.init()},(i=[{key:"init",value:function(){return this.cacheDomReferences().setupHandlers().enable(),this}},{key:"cacheDomReferences",value:function(){return this.ReadMoreButton=this.element.querySelector(".".concat(this.prefix,"--read-more--button")),this.RichText=this.element.querySelector(".".concat(this.prefix,"--richtext")),this}},{key:"setupHandlers",value:function(){return this.onClick=this.onClick.bind(this),this}},{key:"enable",value:function(){var e=this;return this.ReadMoreButton.addEventListener(n,(function(){return e.onClick()})),this}},{key:"onClick",value:function(){return this.element.classList.contains(this.openclass)?(this.RichText.innerHTML=this.excerpt,this.ReadMoreButton.innerHTML=this.buttonlabel.closed):(this.RichText.innerHTML=this.fulltext,this.ReadMoreButton.innerHTML=this.buttonlabel.opened),this.element.classList.toggle(this.openclass),this.ReadMoreButton.classList.toggle(this.buttonopenclass),this}}])&&t(e.prototype,i),r&&t(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,r}();Drupal.behaviors.readmore={attach:function(){Array.prototype.forEach.call(document.querySelectorAll('[data-loadcomponent="ReadMore"]'),(function(e){e.dataset.jsProcessed||(new i(e),e.dataset.jsProcessed=!0)}))}}}));
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.ilo--read-more--button{background:transparent;border:none;border-top:2px solid #ebf5fd;color:#230050;font-family:Overpass,Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;height:3.0010718114rem;margin-top:1.7148981779rem;padding:.857449089rem 1.5005359057rem .857449089rem 0;position:relative;text-align:left;width:auto;font-size:16px;letter-spacing:-.02em;line-height:21.6px}.ilo--read-more--button:after{background-repeat:no-repeat;content:"";display:inline-block;height:1.2861736334rem;position:absolute;right:.1071811361rem;top:50%;transform:translateY(-50%);transform-origin:center center;width:1.2861736334rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23230050' d='M12 16.78l-8-8 1.455-1.56L12 13.767l6.546-6.545L20 8.779l-8 8z'/%3E%3C/svg%3E")}.ilo--read-more--button:hover{background:#ebf5fd;border-top:2px solid #1e2dbe;color:#1e2dbe;cursor:pointer;transition-property:color,background-color,border-color;transition-duration:.15s;transition-timing-function:ease-out}.ilo--read-more--button:hover:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%231E2DBE' d='M12 16.78l-8-8 1.455-1.56L12 13.767l6.546-6.545L20 8.779l-8 8z'/%3E%3C/svg%3E")}.ilo--read-more--button--open:after{transform:translateY(-50%) rotateX(180deg);transform-origin:center center}
@@ -0,0 +1,16 @@
1
+ {#
2
+ READ MORE COMPONENT
3
+ #}
4
+ {% set content = excerpt %}
5
+ {% set btnlabel = buttonlabel.closed %}
6
+ {% if openatstart is defined and openatstart == 'true' %}
7
+ {% set content = fulltext %}
8
+ {% set btnlabel = buttonlabel.opened %}
9
+ {% endif %}
10
+
11
+ <div class="ilo--read-more" data-excerpt="{{excerpt|escape}}" data-fulltext="{{fulltext|escape}}" data-closed="{{buttonlabel.closed}}" data-opened="{{buttonlabel.opened}}" data-loadcomponent="ReadMore" data-prefix="ilo">
12
+ {% include "@components/richtext/richtext.twig" with {
13
+ content: content,
14
+ } %}
15
+ <button class="ilo--read-more--button">{{btnlabel}}</button>
16
+ </div>
@@ -0,0 +1,37 @@
1
+ readmore:
2
+ namespace: Components/User Interface
3
+ use: "@components/readmore/readmore.twig"
4
+ label: Read More
5
+ description: A component for displaying rich text as entered in a WYSIWYG editor.
6
+ fields:
7
+ buttonlabel:
8
+ type: object
9
+ label: Button Label
10
+ description: labels for the two states of button
11
+ required: true
12
+ preview:
13
+ closed: Read More
14
+ opened: Close
15
+ excerpt:
16
+ type: string
17
+ label: Excerpt
18
+ description: HTML content
19
+ preview: "<p>Underlying the ILO’s work is the importance of cooperation between governments and employers’ and workers’ organizations in fostering social and economic progress. The ILO aims to ensure that it serves the needs of working women and men by bringing together governments, employers and workers to set labour standards, develop policies and devise programmes.</p>"
20
+ required: true
21
+ fulltext:
22
+ type: string
23
+ label: Full Text
24
+ description: HTML content
25
+ preview: "<p>Underlying the ILO’s work is the importance of cooperation between governments and employers’ and workers’ organizations in fostering social and economic progress. The ILO aims to ensure that it serves the needs of working women and men by bringing together governments, employers and workers to set labour standards, develop policies and devise programmes.</p> <p>The very structure of the ILO, where workers and employers together have an equal voice with governments in its deliberations, shows social dialogue in action. It ensures that the views of the social partners are closely reflected in ILO labour standards, policies and programmes.</p> <p>The ILO encourages this tripartism within its constituents - employers , workers and member States , by promoting a social dialogue between trade unions and employers in formulating, and where appropriate, implementing national policy on social, economic, and many other issues.</p>."
26
+ required: true
27
+ settings:
28
+ openatstart:
29
+ type: select
30
+ label: Open At Start
31
+ description: should the read more be open at page load?
32
+ options:
33
+ "true": "true"
34
+ "false": "false"
35
+ preview: "false"
36
+ required: true
37
+ visibility: storybook
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.ilo--richtext{font-family:Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;font-weight:400;font-size:18.66px;letter-spacing:normal;line-height:27.24px}.ilo--richtext a{background:transparent;color:#230050;font-size:inherit;font-weight:inherit;line-height:inherit;text-decoration:underline;text-underline-offset:.3215434084rem;text-decoration-thickness:.0803858521rem;padding-bottom:.2143622722rem}.ilo--richtext a:visited{background:transparent;color:#960a55}.ilo--richtext a:hover{background:#fff;color:#1e2dbe;text-decoration-thickness:3px}.ilo--richtext a:active,.ilo--richtext a:focus{background:#ffcd2d;color:#230050;text-decoration-thickness:3px}.ilo--richtext a--dark{background:transparent;color:#edf0f2}.ilo--richtext a--dark:visited{background:transparent;color:#b8c4cc}.ilo--richtext a--dark:hover{background:#fff;color:#1e2dbe;text-decoration-thickness:3px}.ilo--richtext a--dark:active,.ilo--richtext a--dark:focus{background:#ffcd2d;color:#230050;text-decoration-thickness:3px}.ilo--richtext a--footer{font-size:11.94px;letter-spacing:normal;line-height:16.24px;background:transparent;color:#6d6d6d}.ilo--richtext a--footer:visited{background:transparent;color:#960a55}.ilo--richtext a--footer:hover{background:#fff;color:#1e2dbe;text-decoration-thickness:3px}.ilo--richtext a--footer:active,.ilo--richtext a--footer:focus{background:#ffcd2d;color:#230050;text-decoration-thickness:3px}.ilo--richtext img{width:100%}.ilo--richtext p{margin-bottom:1.2861736334rem}.ilo--richtext blockquote+hr,.ilo--richtext dl+hr,.ilo--richtext dl+img,.ilo--richtext ol+hr,.ilo--richtext ol+img,.ilo--richtext p+blockquote,.ilo--richtext p+figure,.ilo--richtext p+hr,.ilo--richtext p+iframe,.ilo--richtext p+img,.ilo--richtext ul+hr,.ilo--richtext ul+img{margin-top:2.7675813769rem}.ilo--richtext article,.ilo--richtext figure,.ilo--richtext iframe{margin-bottom:3.0010718114rem}.ilo--richtext figure{width:100%}.ilo--richtext figcaption{border-left:3px solid #b8c4cc;color:#6d6d6d;font-weight:400;margin-top:.857449089rem;padding-left:.4287245445rem;font-size:14.93px;letter-spacing:-.02em;line-height:20.16px}.ilo--richtext em,.ilo--richtext i{font-style:italic}.ilo--richtext b,.ilo--richtext strong{font-weight:700}.ilo--richtext hr{background-color:#edf0f2;border:none;height:.2143622722rem;margin-bottom:3.0010718114rem}.ilo--richtext h1,.ilo--richtext h2,.ilo--richtext h3,.ilo--richtext h4,.ilo--richtext h5{font-family:Overpass,Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;font-weight:700;margin-top:3.0010718114rem}.ilo--richtext h1{margin-bottom:.6830690456rem;font-size:36px;letter-spacing:-.035em;line-height:43.2px}.ilo--richtext h2{margin-bottom:.8565309039rem;font-size:28px;letter-spacing:-.035em;line-height:35px}.ilo--richtext h3{margin-bottom:.5741425509rem;font-size:24px;letter-spacing:-.035em;line-height:30px}.ilo--richtext h4{margin-bottom:.7188906752rem;font-size:18px;letter-spacing:-.02em;line-height:23.4px}.ilo--richtext h5{margin-bottom:.8175044291rem;font-size:16px;letter-spacing:-.02em;line-height:21.6px}.ilo--richtext blockquote{background-color:#edf0f2;background-position:100% 0;background-repeat:no-repeat;background-size:3.8585209003rem 2.1436227224rem;display:block;font-family:Overpass,Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;margin:1.2861736334rem 0 2.1436227224rem;padding:4.0728831726rem 0 1.9292604502rem 1.7148981779rem;position:relative;width:fit-content;clip-path:polygon(0 0,calc(100% - 72px) 0,100% 40px,100% 100%,0 100%)}.ilo--richtext blockquote p{color:#960a55;font-weight:300;margin-bottom:1.2861736334rem;padding:0 2.5723472669rem 0 0;position:relative;font-size:29.16px;letter-spacing:-.035em;line-height:36.45px}.ilo--richtext blockquote p:after{background-repeat:no-repeat;bottom:0;content:"";display:inline-block;height:1.0718113612rem;position:absolute;right:0;transform:scaleX(-1);width:1.4201500536rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 65 48'%3E%3Cpath fill='%23960A55' d='M38.688 0v18.963c0 14.634 9.574 26.372 23.053 29.037l2.564-5.515c-6.238-2.357-10.251-11.145-10.251-16.821h10.251V0H38.688zM0 0v18.963C0 33.597 9.62 45.343 23.107 48l2.557-5.515c-6.255-2.357-10.267-11.152-10.267-16.821h10.22V0H0z'/%3E%3C/svg%3E")}.ilo--richtext blockquote cite{color:#6d6d6d;font-weight:400;font-size:14.93px;letter-spacing:-.02em;line-height:20.16px}.ilo--richtext blockquote:before{background-repeat:no-repeat;content:"";display:inline-block;height:2.1436227224rem;left:0;position:absolute;width:2.8403001072rem;top:0;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 65 48'%3E%3Cpath fill='%23960A55' d='M38.688 0v18.963c0 14.634 9.574 26.372 23.053 29.037l2.564-5.515c-6.238-2.357-10.251-11.145-10.251-16.821h10.251V0H38.688zM0 0v18.963C0 33.597 9.62 45.343 23.107 48l2.557-5.515c-6.255-2.357-10.267-11.152-10.267-16.821h10.22V0H0z'/%3E%3C/svg%3E")}.ilo--richtext ol{counter-reset:a}.ilo--richtext ol li{counter-increment:a;display:table}.ilo--richtext ol li:before{content:counter(a) ".";display:table-cell;text-align:right;padding-inline-end:.4287245445rem}.ilo--richtext ul li{position:relative;padding-inline-start:1.2861736334rem}.ilo--richtext ul li:before{content:"";position:absolute;height:.7502679528rem;width:.6430868167rem;top:.3215434084rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 12.4'%3E%3Cpath fill='%23B8C4CC' d='M10.8 6.4L0 .4v12l10.8-6z'/%3E%3C/svg%3E");background-repeat:no-repeat;left:0;right:0}[dir=rtl] .ilo--richtext ul li:before{transform:rotate(180deg)}@media screen and (min-width:610px){.ilo--richtext ul li:before{top:.3751339764rem}}.ilo--richtext li{font-size:16px;letter-spacing:normal;line-height:23.36px;font-family:Noto Sans,Noto Sans CJK JP,Yu Gothic,Hiragino Sans,TakaoPGothic,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif;margin-bottom:.857449089rem}.ilo--richtext li b,.ilo--richtext li strong{font-weight:700;letter-spacing:-.02em}@media screen and (min-width:610px){.ilo--richtext,.ilo--richtext li{font-size:18.66px;letter-spacing:normal;line-height:27.24px}.ilo--richtext h1,.ilo--richtext h2,.ilo--richtext h3,.ilo--richtext h4,.ilo--richtext h5{margin-top:3.4297963558rem}.ilo--richtext h1{margin-bottom:.8520418857rem;font-size:44px;letter-spacing:-.035em;line-height:50.6px}.ilo--richtext h2{margin-bottom:1.1117935901rem;font-size:36px;letter-spacing:-.035em;line-height:43.2px}.ilo--richtext h3{margin-bottom:.8565309039rem;font-size:28px;letter-spacing:-.035em;line-height:35px}.ilo--richtext h4{margin-bottom:1.0028670954rem;font-size:24px;letter-spacing:-.035em;line-height:30px}.ilo--richtext h5{margin-bottom:1.1476152197rem;font-size:18px;letter-spacing:-.02em;line-height:23.4px}.ilo--richtext p{margin-bottom:.9381095829rem}.ilo--richtext blockquote+hr,.ilo--richtext dl+hr,.ilo--richtext dl+img,.ilo--richtext ol+hr,.ilo--richtext ol+img,.ilo--richtext p+blockquote,.ilo--richtext p+figure,.ilo--richtext p+hr,.ilo--richtext p+iframe,.ilo--richtext p+img,.ilo--richtext ul+hr,.ilo--richtext ul+img{margin-top:3.0817323053rem}.ilo--richtext hr{margin-bottom:4.0728831726rem}.ilo--richtext figure{width:100%;margin-bottom:3.0817323053rem}.ilo--richtext blockquote{background-size:4.6087888532rem 2.5723472669rem;margin:1.7148981779rem 0 4.0728831726rem;padding:3.4297963558rem 0 2.5723472669rem 2.5723472669rem;clip-path:polygon(0 0,calc(100% - 86px) 0,100% 48px,100% 100%,0 100%)}.ilo--richtext blockquote p{margin-bottom:1.2861736334rem;padding:0 2.5723472669rem 0 0;position:relative;font-size:36.45px;letter-spacing:-.035em;line-height:43.74px}.ilo--richtext blockquote p:after{height:1.2861736334rem;width:1.7148981779rem}.ilo--richtext blockquote:before{height:2.5723472669rem;width:3.4297963558rem}}[dir=rtl] .ilo--richtext figcaption{border-left:none;border-right:3px solid #b8c4cc;padding-left:0;padding-right:.4287245445rem}[dir=rtl] .ilo--richtext blockquote{background-position:-1px -1px;padding:3.0010718114rem 1.7148981779rem 1.9292604502rem 0;clip-path:polygon(0 0,calc(100% - 72px) 0,100% 40px,100% 100%,0 100%);clip-path:polygon(72px 0,100% 0,100% 100%,0 100%,0 40px)}[dir=rtl] .ilo--richtext blockquote p{padding:0 0 0 2.5723472669rem}[dir=rtl] .ilo--richtext blockquote p:after{left:0;right:auto;transform:scaleX(1)}[dir=rtl] .ilo--richtext blockquote:before{left:auto;right:0;transform:scaleX(-1)}@media screen and (min-width:610px){[dir=rtl] .ilo--richtext blockquote{padding:3.2154340836rem 2.5723472669rem 2.5723472669rem 0}[dir=rtl] .ilo--richtext blockquote blockquote{clip-path:polygon(0 0,calc(100% - 86px) 0,100% 48px,100% 100%,0 100%);clip-path:polygon(86px 0,100% 0,100% 100%,0 100%,0 48px)}}
@@ -0,0 +1,6 @@
1
+ {#
2
+ RICH TEXT COMPONENT
3
+ #}
4
+ <div class="ilo--richtext">
5
+ {{content}}
6
+ </div>
@@ -0,0 +1,13 @@
1
+ richtext:
2
+ namespace: Components/Content
3
+ use: "@components/richtext/richtext.twig"
4
+ label: Rich Text
5
+ description: A component for displaying rich text as entered in a WYSIWYG editor.
6
+ fields:
7
+ content:
8
+ type: string
9
+ label: Content
10
+ description: HTML content
11
+ preview: "<h2>International Labour Organization</h2> <p>The <b>International Labour Organization</b> (<b>ILO</b>) is a <a href='https://www.un.org'>United Nations</a> agency whose mandate is to advance social and economic justice by setting international labour standards. Founded in October 1919 under the League of Nations, it is the first and oldest specialised agency of the UN. The ILO has 187 member states: 186 out of 193 UN member states plus the Cook Islands.</p> <p>Whereas also the failure of any nation to adopt humane conditions of labour is an obstacle in the way of other nations which desire to improve the conditions in their own countries.</p> <figure><img alt='placeholder image' class='right' src='/images/ilo-headquarters.jpg'><figcaption>The ILO's headquarters in Geneva, Switzerland. ©Steiner SA</figcaption></figure> <h3>ILO Constitution</h3> <p>The driving forces for the ILO's creation arose from security, humanitarian, political and economic considerations.</p> <blockquote> <p>The fundamental ideas that forged the ILO one hundred and three years ago still underpin the global pledge to leave no one behind.</p> <cite>ILO Director-General Gilbert F. Houngbo</cite> </blockquote> Reflecting these ideas, the Preamble of the ILO Constitution states:</p> <ol> <li>Whereas universal and lasting peace can be established only if it is based upon social justice;</li> <li>And whereas conditions of labour exist involving such injustice, hardship and privation to large numbers of people as to produce unrest so great that the peace and harmony of the world are imperilled; and an improvement of those conditions is urgently required;</li> <li>Whereas also the failure of any nation to adopt humane conditions of labour is an obstacle in the way of other nations which desire to improve the conditions in their own countries.</li> </ol>"
12
+ required: true
13
+ visibility: storybook
@@ -0,0 +1 @@
1
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function t(t,n){for(var i=0;i<n.length;i++){var r=n[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,e(r.key),r)}}var n="click",i=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.element=t,this.multipleExpanded=!1,this.init()},(i=[{key:"init",value:function(){return this.cacheDomReferences().setupHandlers().enable(),this}},{key:"cacheDomReferences",value:function(){return this.searchButton=this.element.querySelector(".ilo--searchfield--clear-button"),this.searchInputField=this.element.querySelector(".ilo--input"),this}},{key:"setupHandlers",value:function(){return this.onClick=this.onClick.bind(this),this.KeyPressHandler=this.onKeyPress.bind(this),this}},{key:"enable",value:function(){return this.searchButton.addEventListener(n,this.onClick.bind(this)),this.searchInputField.addEventListener("keyup",this.onKeyPress.bind(this,this.searchButton)),this}},{key:"onClick",value:function(e){this.searchInputField.value="",this.searchButton.classList.remove("show")}},{key:"onKeyPress",value:function(e,t){""!==t.target.value.trim()?this.searchButton.classList.add("show"):this.searchButton.classList.remove("show")}}])&&t(e.prototype,i),r&&t(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,r}();Drupal.behaviors.search={attach:function(){Array.prototype.forEach.call(document.querySelectorAll('[data-loadcomponent="Search"]'),(function(e){e.dataset.jsProcessed||(new i(e),e.dataset.jsProcessed=!0)}))}}}));
@@ -0,0 +1,31 @@
1
+ {# dropdown.twig #}
2
+
3
+ {% extends "@components/form/formcontrol.twig" %}
4
+
5
+ {% set baseClass = prefix ~ "--searchfield" %}
6
+ {% set searchClass = [baseClass, class] %}
7
+ {% set inputClass = prefix ~ "--input" %}
8
+ {% set buttonClass = baseClass ~ "--button" %}
9
+ {% set fieldSetClass = prefix ~ "--fieldset" %}
10
+ {% set clearButtonClass = baseClass ~ "--clear-button" %}
11
+
12
+ {% if error %}
13
+ {% set inputClass = inputClass|merge([baseClass ~ "__error"]) %}
14
+ {% endif %}
15
+
16
+ {% block formfield %}
17
+ <div data-loadcomponent="Search" class="{{ searchClass|join(" ") }}" {% if style %} style={{ style }} {% endif %}>
18
+ <div class="{{fieldSetClass}}">
19
+ <input name="{{name}}" type="{{type}}" class="{{ inputClass }}{% if error %} error{% endif %}" {% if placeholder %} placeholder="{{placeholder}}" {% endif %} {% if disabled %} disabled {% endif %} {% if required %} required {% endif %} id="{% if id %}{{id}}{% else %}{{name}}{% endif %}"/>
20
+ <span class="{{clearButtonClass}}" >
21
+ {% include "@components/icon/icon.twig" with {
22
+ "name": "Close",
23
+ "size": "24",
24
+ "color": "#230050"
25
+ } %}
26
+ </span>
27
+ </div>
28
+ <input class="{{ buttonClass }}" type="submit"/>
29
+
30
+ </div>
31
+ {% endblock %}
@@ -0,0 +1,89 @@
1
+ searchfield:
2
+ namespace: Components/Forms
3
+ use: "@components/search/search.twig"
4
+ label: Search
5
+ description: A component for displaying a search field.
6
+ visibility: storybook
7
+ fields:
8
+ label:
9
+ type: text
10
+ label: Label
11
+ description: The label for the form element.
12
+ tooltip:
13
+ type: string
14
+ description: The tooltip for the form element.
15
+ helper:
16
+ type: text
17
+ label: Helper Text
18
+ description: The helper text for the form element.
19
+ id:
20
+ type: text
21
+ label: ID
22
+ description: The ID of the text input.
23
+ name:
24
+ type: text
25
+ label: Name
26
+ description: The name of the text input.
27
+ placeholder:
28
+ type: text
29
+ label: Placeholder
30
+ description: The placeholder of the text input.
31
+ preview: Search for something
32
+ class:
33
+ type: text
34
+ label: Class
35
+ description: The class of the text input.
36
+ preview: textinput
37
+ default: ""
38
+ style:
39
+ type: text
40
+ label: Style
41
+ description: The style of the text input.
42
+ preview: "width: 100%"
43
+ default: ""
44
+ pattern:
45
+ type: text
46
+ label: Pattern
47
+ description: The pattern of the text input.
48
+ preview: textinput``
49
+ default: ""
50
+ settings:
51
+ labelPlacement:
52
+ type: select
53
+ label: Label Placement
54
+ description: The placement of the label for the form element.
55
+ preview: "top"
56
+ default: "top"
57
+ options:
58
+ start: start
59
+ end: end
60
+ top: top
61
+ bottom: bottom
62
+ labelSize:
63
+ type: select
64
+ label: Label Size
65
+ description: The size of the label for the form element.
66
+ preview: "medium"
67
+ default: "medium"
68
+ options:
69
+ small: small
70
+ medium: medium
71
+ large: large
72
+ disabled:
73
+ type: boolean
74
+ label: Disabled
75
+ description: The disabled state of the text input.
76
+ preview: false
77
+ default: false
78
+ required:
79
+ type: boolean
80
+ label: Required
81
+ description: The required state of the text input.
82
+ preview: false
83
+ default: false
84
+ error:
85
+ type: boolean
86
+ label: Error
87
+ description: Adds an error state to the form control.
88
+ preview: false
89
+ default: false
@@ -0,0 +1 @@
1
+ .ilo--searchfield{display:flex}.ilo--searchfield .ilo--fieldset{position:relative;width:100%}.ilo--searchfield .ilo--input{padding-inline-end:3.0010718114rem}.ilo--searchfield--button{background-color:#edf0f2;background-position:50%;background-repeat:no-repeat;background-size:1.2861736334rem 1.2861736334rem;border-bottom:.1071811361rem solid #b8c4cc;border-left:0 solid #b8c4cc;border-right:.1071811361rem solid #b8c4cc;border-top:.1071811361rem solid #b8c4cc;height:2.5723472669rem;width:2.4651661308rem;text-indent:-9999px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23230050' d='M16.707 15.257a6.85 6.85 0 0 0 1.4-4.2 7 7 0 0 0-7-7.1 7.1 7.1 0 0 0 0 14.2 6.64 6.64 0 0 0 4.2-1.4l3 3a1 1 0 0 0 1.4 0 1 1 0 0 0 0-1.4l-3-3.1zm-5.6.8a5 5 0 0 1-5.1-5 5.1 5.1 0 0 1 10.2 0 4.999 4.999 0 0 1-5.1 5z'/%3E%3C/svg%3E")}.ilo--searchfield--button:focus{background-color:#ebf5fd;cursor:pointer;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%231E2DBE' d='M16.707 15.257a6.85 6.85 0 0 0 1.4-4.2 7 7 0 0 0-7-7.1 7.1 7.1 0 0 0 0 14.2 6.64 6.64 0 0 0 4.2-1.4l3 3a1 1 0 0 0 1.4 0 1 1 0 0 0 0-1.4l-3-3.1zm-5.6.8a5 5 0 0 1-5.1-5 5.1 5.1 0 0 1 10.2 0 4.999 4.999 0 0 1-5.1 5z'/%3E%3C/svg%3E")}.ilo--searchfield--button:active{background-color:#1e2dbe;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23EBF5FD' d='M16.707 15.257a6.85 6.85 0 0 0 1.4-4.2 7 7 0 0 0-7-7.1 7.1 7.1 0 0 0 0 14.2 6.64 6.64 0 0 0 4.2-1.4l3 3a1 1 0 0 0 1.4 0 1 1 0 0 0 0-1.4l-3-3.1zm-5.6.8a5 5 0 0 1-5.1-5 5.1 5.1 0 0 1 10.2 0 4.999 4.999 0 0 1-5.1 5z'/%3E%3C/svg%3E")}.haslabel .ilo--searchfield--button{margin-top:1.5005359057rem}.ilo--searchfield--button:disabled{opacity:.45;pointer-events:none}.ilo--searchfield--clear-button{display:none;align-items:center;cursor:pointer}.ilo--searchfield--clear-button.show{display:inline;position:absolute;top:12px;right:2%}.ilo--searchfield [type=search]::-webkit-search-cancel-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}[dir=rtl] .ilo--searchfield .ilo--searchfield--button{border-left:.1071811361rem solid #b8c4cc;border-right:0}[dir=rtl] .ilo--searchfield .ilo--searchfield--clear-button.show{right:95%}