@govtechsg/sgds-web-component 0.0.7 → 0.0.10

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 (263) hide show
  1. package/.github/workflows/publish-latest.yml +22 -0
  2. package/.github/workflows/publish-pr.yml +28 -0
  3. package/.husky/commit-msg +4 -0
  4. package/.husky/prepare-commit-msg +8 -0
  5. package/.storybook/main.js +16 -0
  6. package/.storybook/preview-head.html +11 -0
  7. package/.storybook/preview.js +9 -0
  8. package/.vscode/settings.json +7 -0
  9. package/CONTRIBUTING.md +56 -0
  10. package/LICENSE +20 -0
  11. package/amplify.yml +22 -0
  12. package/commitlint.config.js +1 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/button-element.scss.html +112 -0
  16. package/coverage/lcov-report/button-element.ts.html +145 -0
  17. package/coverage/lcov-report/favicon.png +0 -0
  18. package/coverage/lcov-report/index.html +116 -0
  19. package/coverage/lcov-report/prettify.css +1 -0
  20. package/coverage/lcov-report/prettify.js +2 -0
  21. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  22. package/coverage/lcov-report/sorter.js +196 -0
  23. package/coverage/lcov.info +32 -0
  24. package/index.html +430 -0
  25. package/{Button → lib/Button}/index.d.ts +0 -0
  26. package/{Button → lib/Button}/index.js +304 -39
  27. package/lib/Button/index.js.map +1 -0
  28. package/{Button → lib/Button}/package.json +0 -0
  29. package/lib/Button/sgds-button.d.ts +48 -0
  30. package/lib/Card/index.d.ts +1 -0
  31. package/lib/Card/index.js +6150 -0
  32. package/lib/Card/index.js.map +1 -0
  33. package/lib/Card/package.json +7 -0
  34. package/lib/Card/sgds-action-card.d.ts +20 -0
  35. package/lib/Checkbox/index.d.ts +1 -0
  36. package/lib/Checkbox/index.js +6366 -0
  37. package/lib/Checkbox/index.js.map +1 -0
  38. package/lib/Checkbox/package.json +7 -0
  39. package/lib/Checkbox/sgds-checkbox.d.ts +36 -0
  40. package/lib/Dropdown/index.d.ts +3 -0
  41. package/{Mainnav → lib/Dropdown}/index.js +2786 -9258
  42. package/lib/Dropdown/index.js.map +1 -0
  43. package/lib/Dropdown/package.json +7 -0
  44. package/lib/Dropdown/sgds-dropdown-item.d.ts +7 -0
  45. package/lib/Dropdown/sgds-dropdown.d.ts +7 -0
  46. package/{Footer → lib/Footer}/index.d.ts +0 -0
  47. package/{Footer → lib/Footer}/index.js +111 -95
  48. package/lib/Footer/index.js.map +1 -0
  49. package/{Footer → lib/Footer}/package.json +0 -0
  50. package/{Footer → lib/Footer}/sgds-footer.d.ts +2 -2
  51. package/lib/Input/index.d.ts +1 -0
  52. package/lib/Input/index.js +6656 -0
  53. package/lib/Input/index.js.map +1 -0
  54. package/lib/Input/package.json +7 -0
  55. package/lib/Input/sgds-input.d.ts +42 -0
  56. package/{Mainnav → lib/Mainnav}/index.d.ts +1 -0
  57. package/{index.js → lib/Mainnav/index.js} +3876 -23415
  58. package/lib/Mainnav/index.js.map +1 -0
  59. package/{Mainnav → lib/Mainnav}/package.json +0 -0
  60. package/lib/Mainnav/sgds-mainnav-dropdown.d.ts +5 -0
  61. package/lib/Mainnav/sgds-mainnav-item.d.ts +4 -0
  62. package/{Mainnav → lib/Mainnav}/sgds-mainnav.d.ts +3 -2
  63. package/{Masthead → lib/Masthead}/index.d.ts +0 -0
  64. package/{Masthead → lib/Masthead}/index.js +140 -114
  65. package/lib/Masthead/index.js.map +1 -0
  66. package/{Masthead → lib/Masthead}/package.json +0 -0
  67. package/{Masthead → lib/Masthead}/sgds-masthead.d.ts +1 -1
  68. package/lib/Modal/index.d.ts +1 -0
  69. package/lib/Modal/index.js +6432 -0
  70. package/lib/Modal/index.js.map +1 -0
  71. package/lib/Modal/package.json +7 -0
  72. package/lib/Modal/sgds-modal.d.ts +28 -0
  73. package/lib/QuantityToggle/index.d.ts +1 -0
  74. package/lib/QuantityToggle/index.js +7049 -0
  75. package/lib/QuantityToggle/index.js.map +1 -0
  76. package/lib/QuantityToggle/package.json +7 -0
  77. package/lib/QuantityToggle/sgds-quantitytoggle.d.ts +30 -0
  78. package/lib/Radio/index.d.ts +2 -0
  79. package/lib/Radio/index.js +12607 -0
  80. package/lib/Radio/index.js.map +1 -0
  81. package/lib/Radio/package.json +7 -0
  82. package/lib/Radio/sgds-radio.d.ts +31 -0
  83. package/lib/Radio/sgds-radiogroup.d.ts +41 -0
  84. package/{Sidenav → lib/Sidenav}/index.d.ts +0 -0
  85. package/{Sidenav → lib/Sidenav}/index.js +2266 -2171
  86. package/lib/Sidenav/index.js.map +1 -0
  87. package/{Sidenav → lib/Sidenav}/package.json +0 -0
  88. package/{Sidenav → lib/Sidenav}/sgds-sidenav-item.d.ts +2 -1
  89. package/lib/Sidenav/sgds-sidenav-link.d.ts +4 -0
  90. package/{Sidenav → lib/Sidenav}/sgds-sidenav.d.ts +1 -1
  91. package/lib/Tab/index.d.ts +3 -0
  92. package/lib/Tab/index.js +13557 -0
  93. package/lib/Tab/index.js.map +1 -0
  94. package/lib/Tab/package.json +7 -0
  95. package/lib/Tab/sgds-tab.d.ts +26 -0
  96. package/lib/Tab/sgds-tabgroup.d.ts +47 -0
  97. package/lib/Tab/sgds-tabpanel.d.ts +25 -0
  98. package/lib/Textarea/index.d.ts +1 -0
  99. package/lib/Textarea/index.js +6696 -0
  100. package/lib/Textarea/index.js.map +1 -0
  101. package/lib/Textarea/package.json +7 -0
  102. package/lib/Textarea/sgds-textarea.d.ts +53 -0
  103. package/lib/index.d.ts +16 -0
  104. package/lib/index.js +134580 -0
  105. package/lib/index.js.map +1 -0
  106. package/lib/umd/index.js +134587 -0
  107. package/lib/umd/index.js.map +1 -0
  108. package/lib/utils/animate.d.ts +10 -0
  109. package/lib/utils/animation-registry.d.ts +18 -0
  110. package/{utils → lib/utils}/breakpoints.d.ts +0 -0
  111. package/lib/utils/card-element.d.ts +11 -0
  112. package/lib/utils/defaultvalue.d.ts +2 -0
  113. package/lib/utils/dropdown-element.d.ts +37 -0
  114. package/lib/utils/event.d.ts +2 -0
  115. package/lib/utils/form.d.ts +38 -0
  116. package/{utils → lib/utils}/generateId.d.ts +0 -0
  117. package/lib/utils/link-element.d.ts +7 -0
  118. package/lib/utils/mergeDeep.d.ts +2 -0
  119. package/lib/utils/modal.d.ts +12 -0
  120. package/lib/utils/object.d.ts +2 -0
  121. package/lib/utils/offset.d.ts +4 -0
  122. package/lib/utils/scroll.d.ts +13 -0
  123. package/{utils → lib/utils}/sgds-element.d.ts +0 -0
  124. package/lib/utils/slot.d.ts +22 -0
  125. package/lib/utils/tabbable.d.ts +8 -0
  126. package/lib/utils/watch.d.ts +14 -0
  127. package/mocks/dropdown.d.ts +4 -0
  128. package/mocks/dropdown.ts +27 -0
  129. package/mocks/link.d.ts +3 -0
  130. package/mocks/link.ts +6 -0
  131. package/package.json +65 -10
  132. package/rollup.config.js +73 -0
  133. package/rollup.test.config.js +42 -0
  134. package/scripts/buildUtils.js +30 -0
  135. package/scripts/frankBuild.js +49 -0
  136. package/src/Button/index.ts +1 -0
  137. package/src/Button/sgds-button.scss +28 -0
  138. package/src/Button/sgds-button.ts +153 -0
  139. package/src/Card/index.ts +1 -0
  140. package/src/Card/sgds-action-card.scss +27 -0
  141. package/src/Card/sgds-action-card.ts +115 -0
  142. package/src/Checkbox/index.ts +1 -0
  143. package/src/Checkbox/sgds-checkbox.scss +4 -0
  144. package/src/Checkbox/sgds-checkbox.ts +149 -0
  145. package/src/Dropdown/index.ts +3 -0
  146. package/src/Dropdown/sgds-dropdown-item.ts +39 -0
  147. package/src/Dropdown/sgds-dropdown.scss +5 -0
  148. package/src/Dropdown/sgds-dropdown.ts +54 -0
  149. package/src/Footer/index.ts +3 -0
  150. package/src/Footer/sgds-footer.scss +5 -0
  151. package/src/Footer/sgds-footer.ts +121 -0
  152. package/src/Input/index.ts +1 -0
  153. package/src/Input/sgds-input.scss +20 -0
  154. package/src/Input/sgds-input.ts +178 -0
  155. package/src/Mainnav/index.ts +4 -0
  156. package/src/Mainnav/sgds-mainnav-dropdown.scss +13 -0
  157. package/src/Mainnav/sgds-mainnav-dropdown.ts +45 -0
  158. package/src/Mainnav/sgds-mainnav-item.scss +24 -0
  159. package/src/Mainnav/sgds-mainnav-item.ts +8 -0
  160. package/src/Mainnav/sgds-mainnav.scss +39 -0
  161. package/src/Mainnav/sgds-mainnav.ts +183 -0
  162. package/src/Masthead/index.ts +1 -0
  163. package/src/Masthead/sgds-masthead.scss +217 -0
  164. package/src/Masthead/sgds-masthead.ts +189 -0
  165. package/src/Modal/index.ts +1 -0
  166. package/src/Modal/sgds-modal.scss +128 -0
  167. package/src/Modal/sgds-modal.ts +309 -0
  168. package/src/QuantityToggle/index.ts +1 -0
  169. package/src/QuantityToggle/sgds-quantitytoggle.scss +10 -0
  170. package/src/QuantityToggle/sgds-quantitytoggle.ts +130 -0
  171. package/src/Radio/index.ts +2 -0
  172. package/src/Radio/sgds-radio.scss +5 -0
  173. package/src/Radio/sgds-radio.ts +120 -0
  174. package/src/Radio/sgds-radiogroup.scss +22 -0
  175. package/src/Radio/sgds-radiogroup.ts +221 -0
  176. package/src/Sidenav/index.ts +4 -0
  177. package/src/Sidenav/sgds-sidenav-item.scss +73 -0
  178. package/src/Sidenav/sgds-sidenav-item.ts +145 -0
  179. package/src/Sidenav/sgds-sidenav-link.scss +25 -0
  180. package/src/Sidenav/sgds-sidenav-link.ts +8 -0
  181. package/src/Sidenav/sgds-sidenav.scss +6 -0
  182. package/src/Sidenav/sgds-sidenav.ts +33 -0
  183. package/src/Tab/index.ts +3 -0
  184. package/src/Tab/sgds-tab.scss +84 -0
  185. package/src/Tab/sgds-tab.ts +87 -0
  186. package/src/Tab/sgds-tabgroup.scss +198 -0
  187. package/src/Tab/sgds-tabgroup.ts +295 -0
  188. package/src/Tab/sgds-tabpanel.scss +12 -0
  189. package/src/Tab/sgds-tabpanel.ts +55 -0
  190. package/src/Textarea/index.ts +1 -0
  191. package/src/Textarea/sgds-textarea.scss +23 -0
  192. package/src/Textarea/sgds-textarea.ts +201 -0
  193. package/src/index.ts +16 -0
  194. package/src/utils/animate.ts +69 -0
  195. package/src/utils/animation-registry.ts +71 -0
  196. package/src/utils/base.scss +14 -0
  197. package/src/utils/breakpoints.ts +5 -0
  198. package/src/utils/card-element.ts +42 -0
  199. package/src/utils/components.style.scss +531 -0
  200. package/src/utils/defaultvalue.ts +51 -0
  201. package/src/utils/dropdown-element.ts +244 -0
  202. package/src/utils/event.ts +13 -0
  203. package/src/utils/form.ts +183 -0
  204. package/src/utils/generateId.ts +4 -0
  205. package/src/utils/link-element.ts +34 -0
  206. package/src/utils/mergeDeep.ts +22 -0
  207. package/src/utils/modal.ts +64 -0
  208. package/src/utils/object.ts +2 -0
  209. package/src/utils/offset.ts +6 -0
  210. package/src/utils/scroll.ts +57 -0
  211. package/src/utils/sgds-element.ts +18 -0
  212. package/src/utils/slot.ts +102 -0
  213. package/src/utils/tabbable.ts +81 -0
  214. package/src/utils/watch.ts +62 -0
  215. package/stories/ActionCard.stories.mdx +199 -0
  216. package/stories/Button.stories.mdx +194 -0
  217. package/stories/Checkbox.stories.mdx +196 -0
  218. package/stories/Dropdown.stories.mdx +152 -0
  219. package/stories/Footer.stories.mdx +261 -0
  220. package/stories/Input.stories.mdx +236 -0
  221. package/stories/MainNav.stories.mdx +169 -0
  222. package/stories/Masthead.stories.mdx +112 -0
  223. package/stories/Modal.stories.mdx +103 -0
  224. package/stories/QuantityToggle.stories.mdx +97 -0
  225. package/stories/Radio.stories.mdx +262 -0
  226. package/stories/Sample.stories.js +29 -0
  227. package/stories/Sample.stories.mdx +33 -0
  228. package/stories/SideNav.stories.mdx +245 -0
  229. package/stories/common.js +185 -0
  230. package/stories/textarea.stories.mdx +253 -0
  231. package/test/button.element.test.ts +185 -0
  232. package/test/checkbox.test.ts +240 -0
  233. package/test/dropdown.test.ts +637 -0
  234. package/test/footer.test.ts +181 -0
  235. package/test/generateId.test.ts +18 -0
  236. package/test/input.element.test.ts +316 -0
  237. package/test/link-element.test.ts +38 -0
  238. package/test/mainnav.test.ts +313 -0
  239. package/test/masthead.test.ts +116 -0
  240. package/test/modal.test.ts +149 -0
  241. package/test/quantitytoggle.test.ts +76 -0
  242. package/test/radio.test.ts +310 -0
  243. package/test/selectable-card.test.ts +159 -0
  244. package/test/sidenav.test.ts +390 -0
  245. package/test/tab.test.ts +76 -0
  246. package/test/textarea.test.ts +126 -0
  247. package/tsconfig.json +26 -0
  248. package/tsconfig.test.json +24 -0
  249. package/typings/scss.d.ts +5 -0
  250. package/web-dev-server.config.mjs +7 -0
  251. package/web-test-runner.config.mjs +47 -0
  252. package/Button/index.js.map +0 -1
  253. package/Button/sgds-button.d.ts +0 -23
  254. package/Footer/index.js.map +0 -1
  255. package/Mainnav/index.js.map +0 -1
  256. package/Mainnav/sgds-mainnav-item.d.ts +0 -7
  257. package/Masthead/index.js.map +0 -1
  258. package/Sidenav/index.js.map +0 -1
  259. package/Sidenav/sgds-sidenav-link.d.ts +0 -7
  260. package/index.d.ts +0 -5
  261. package/index.js.map +0 -1
  262. package/umd/index.js +0 -52092
  263. package/umd/index.js.map +0 -1
@@ -0,0 +1,217 @@
1
+ @import "../utils/base.scss";
2
+ @import "~@govtechsg/sgds/sass/containers";
3
+ @import "~@govtechsg/sgds/sass/grid";
4
+
5
+ :host{
6
+ --masthead-font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;
7
+ --masthead-text-color: hsl(0, 0%, 28%);
8
+ --masthead-link-color: hsl(222, 63%, 50%);
9
+ --masthead-link-color-hover: hsl(221, 64%, 55%);
10
+ --masthead-mobile-font-size: 0.6875rem;
11
+ --masthead-mobile-padding-x: 0.75rem;
12
+ --masthead-fluid-padding-x: 0.75rem;
13
+ --masthead-crest-color: rgb(239, 51, 32);
14
+
15
+ }
16
+
17
+ .sgds-masthead{
18
+ font-size: 0.875rem;
19
+ background-color: hsl(0, 0%, 94%);
20
+ font-family: var(--masthead-font-family);
21
+ color: var(--masthead-text-color);
22
+ @media screen and (max-width: 1023px){
23
+ font-size: var(--masthead-mobile-font-size);
24
+ .col,.row{
25
+ padding-left:0;
26
+ padding-right: 0;
27
+ }
28
+ .row{
29
+ margin-right:0;
30
+ margin-left:0;
31
+ }
32
+ }
33
+ }
34
+
35
+ .sg-crest {
36
+ width: 1.25rem;
37
+ height: 1.75rem;
38
+ path{
39
+ fill: var(--masthead-crest-color);
40
+ }
41
+ }
42
+
43
+ .masthead-layout{
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 0.25rem;
47
+ }
48
+
49
+
50
+
51
+ .sgds-masthead-identify-icon {
52
+ width: 12px;
53
+ height: 21px;
54
+ display: block;
55
+ transform: rotate(180deg);
56
+ user-select: none;
57
+ transition: all 0.3s ease-in-out 0s;
58
+ align-self: center;
59
+ &.show{
60
+ transform: rotate(0deg);
61
+ }
62
+ }
63
+
64
+ .sgds-masthead-button {
65
+ display: flex;
66
+ color: var(--masthead-link-color);
67
+ align-items: center;
68
+ cursor: pointer;
69
+ &-text{
70
+ text-decoration: underline;
71
+ &:hover{
72
+ color: var(--masthead-link-color-hover);
73
+ }
74
+ }
75
+ }
76
+
77
+ .sgds-masthead-content{
78
+ padding-top: 2.5rem;
79
+ padding-bottom: 3rem;
80
+ display: none;
81
+ @media screen and (max-width: 1023px) {
82
+ padding-top: 1rem;
83
+ padding-bottom: 2rem;
84
+ }
85
+ .content-grid {
86
+ display: grid;
87
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
88
+ gap: 10rem;
89
+ @media screen and (max-width: 1023px){
90
+ grid-template-columns: 1fr;
91
+ gap: 1.5rem;
92
+ .banner-icon-inline {
93
+ width: 0.6rem;
94
+ height: 0.6rem;
95
+ margin-bottom: 0.1875rem;
96
+
97
+ }
98
+ }
99
+ .icon{
100
+ margin-top: -0.1em;
101
+
102
+ }
103
+ }
104
+
105
+
106
+ .wrapper {
107
+ display: flex;
108
+ gap: 1rem;
109
+ font-size: 1rem;
110
+ @media screen and (max-width: 1023px){
111
+ font-size: var(--masthead-mobile-font-size);
112
+ gap: 0.5rem;
113
+ }
114
+ .content {
115
+ .title {
116
+ font-weight: 600;
117
+ margin-bottom: 0.5rem;
118
+ @media screen and (max-width: 1023px) {
119
+ margin-bottom: 0.25rem;
120
+ }
121
+ }
122
+ article{
123
+ line-height: 1.5rem;
124
+ @media screen and (max-width: 1023px) {
125
+ line-height: 1.2rem;
126
+ }
127
+ }
128
+ }
129
+ .banner-icon{
130
+ width: 1.125rem;
131
+ path{
132
+ fill: var(--masthead-text-color);
133
+ }
134
+
135
+ @media screen and (max-width: 1023px) {
136
+ width: 0.75rem;
137
+ }
138
+ svg{
139
+ line-height: 1.5rem;
140
+ @media screen and (max-width: 1023px) {
141
+ width: 1.25rem;
142
+ }
143
+ }
144
+ }
145
+ .banner-icon-inline{
146
+ path{
147
+ fill: var(--masthead-text-color);
148
+ }
149
+ @media screen and (max-width: 1023px){
150
+ width: 0.6rem;
151
+ height: 0.6rem;
152
+ margin-bottom: 0.1875rem;
153
+ }
154
+ }
155
+
156
+ }
157
+
158
+ &.show{
159
+ display: block;
160
+ }
161
+ }
162
+
163
+ a[target="_blank"]{
164
+ text-decoration: none;
165
+ &::after{
166
+ content: none;
167
+ }
168
+ }
169
+
170
+
171
+ a.trusted-websites-link{
172
+ display: inline-flex;
173
+ align-items: center;
174
+ color: var(--masthead-link-color);
175
+ margin-left: 0.125rem;
176
+ svg{
177
+ margin-left: 0.125rem;
178
+ fill: var(--masthead-link-color);
179
+ }
180
+ &:hover{
181
+ color: var(--masthead-link-color-hover);
182
+ svg{
183
+ fill: var(--masthead-link-color-hover);
184
+ }
185
+ }
186
+ }
187
+
188
+ @media screen and (max-width: 1023px){
189
+ .trusted-websites-icon{
190
+ width:0.75rem;
191
+ }
192
+ }
193
+
194
+ .sgds-masthead{
195
+ > .container{
196
+ @media screen and (max-width: 1023px){
197
+ padding-left: var(--masthead-mobile-padding-x);
198
+ padding-right: var(--masthead-mobile-padding-x);
199
+ }
200
+ }
201
+ > .container-fluid{
202
+ padding-left: var(--masthead-fluid-padding-x);
203
+ padding-right: var(--masthead-fluid-padding-x);
204
+ @media screen and (max-width: 1023px){
205
+ padding-left: var(--masthead-mobile-padding-x);
206
+ padding-right: var(--masthead-mobile-padding-x);
207
+ }
208
+ }
209
+
210
+ &:not([fluid]){
211
+ @media screen and (max-width: 1023px){
212
+ .container{
213
+ margin: 0;
214
+ }
215
+ }
216
+ }
217
+ }
@@ -0,0 +1,189 @@
1
+ import { html } from "lit";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
+ import styles from "./sgds-masthead.scss";
4
+ import SgdsElement from "../utils/sgds-element";
5
+
6
+ /**
7
+ * @property fluid - Include this attribute for full width container
8
+ */
9
+
10
+ @customElement("sgds-masthead")
11
+ export class SgdsMasthead extends SgdsElement {
12
+ static styles = styles;
13
+
14
+ @property({ type: Boolean, reflect: true })
15
+ fluid: boolean = false;
16
+
17
+ @state()
18
+ toggleVisibility = false;
19
+
20
+ private _toggleVisibility() {
21
+ this.toggleVisibility = !this.toggleVisibility;
22
+ }
23
+
24
+ render() {
25
+ return html`
26
+ <div
27
+ id="sgds-masthead"
28
+ class="sgds-masthead"
29
+ aria-label="A Singapore Government Agency Website"
30
+ >
31
+ <div class="${this.fluid ? "container-fluid" : "container"}">
32
+ <div class="row">
33
+ <div class="col">
34
+ <div class="masthead-layout">
35
+ <svg
36
+ version="1.1"
37
+ xmlns="http://www.w3.org/2000/svg"
38
+ width="32"
39
+ height="32"
40
+ viewBox="0 0 32 32"
41
+ class="sg-crest"
42
+ >
43
+ <title>sg-crest</title>
44
+ <path
45
+ d="M5.896 11.185c0 0-0.949 1.341 0.294 3.075 0 0 0.196-0.883 2.159-0.883h2.356c2.225 0 3.893-2.126 2.846-4.319 0 0 1.57 0.164 2.095-0.818 0.523-0.981-0.033-1.374-0.818-1.374h-3.959c0 0.704-1.341 0.802-1.341 0h-2.225c0 0-1.669 0-1.701 1.407 0 0 0.377-0.229 0.752-0.261v0.375c0 0-0.458 0.082-0.671 0.197-0.212 0.114-0.523 0.425-0.228 1.227 0.294 0.801 0.409 1.079 0.409 1.079s0.475-0.41 1.244-0.41h0.9c1.602 0 1.308 1.554-0.295 1.554s-1.815-0.85-1.815-0.85z"
46
+ ></path>
47
+ <path
48
+ d="M14.255 9.566c0 0 0.54 0.033 0.932-0.31 0 0 3.55 2.765-1.717 8.326-5.268 5.562-1.195 9.162-1.195 9.162s-0.948 0.915-0.409 2.699c0 0-2.191-1.237-3.867-3.338-2.422-3.036-3.902-7.681 2.749-11.386 0 0 4.389-2.208 3.506-5.153z"
49
+ ></path>
50
+ <path
51
+ d="M8.829 6.343c0 0 0.709-1.265 2.355-1.265 1.298 0 1.594-0.666 1.594-0.666s0.566-1.079 3.424-1.079c2.619 0 4.384 0.873 5.812 2.039 0 0-3.85-2.388-7.645 0.971h-5.54z"
52
+ ></path>
53
+ <path
54
+ d="M24.839 14.348c-0.109-3.948-3.163-8.179-9.728-7.939 6.413-5.431 17.537 6.695 8.375 13.066 0 0 1.533-2.186 1.353-5.126z"
55
+ ></path>
56
+ <path
57
+ d="M16.093 6.845c8.005-0.24 10.863 9.357 5.693 13.676l-5.191 2.509c0 0-0.676-2.181 1.833-4.734 2.509-2.551 4.929-7.328-2.006-10.469 0 0 0.131-0.654-0.327-0.981z"
58
+ ></path>
59
+ <path
60
+ d="M15.678 9.004c0 0 0.393-0.371 0.524-0.676 5.954 2.486 5.017 6.697 1.461 10.23-2.181 2.246-1.505 4.668-1.505 4.668s-2.66 1.657-3.577 3.097c0 0-3.852-3.28 1.483-8.724 5.235-5.344 1.614-8.594 1.614-8.594z"
61
+ ></path>
62
+ </svg>
63
+ <span>A Singapore Government Agency Website</span>
64
+ <div
65
+ class="sgds-masthead-button"
66
+ id="sgds-masthead-identify"
67
+ role="button"
68
+ aria-expanded="${this.toggleVisibility}"
69
+ aria-controls="sgds-masthead-content"
70
+ @click=${() => this._toggleVisibility()}
71
+ >
72
+ <span class="sgds-masthead-button-text"
73
+ >How to identify</span
74
+ >
75
+ <svg
76
+ xmlns="http://www.w3.org/2000/svg"
77
+ width="20"
78
+ height="20"
79
+ viewBox="0 0 20 20"
80
+ fill="none"
81
+ class="sgds-masthead-identify-icon ${!this.toggleVisibility ? null : "show"}"
82
+ >
83
+ <path
84
+ d="M8.65188 6.85L8.64813 6.84625L10.0031 5.49125L17.0744 12.5625L15.7194 13.9175L10.0075 8.20562L4.2875 13.9256L2.9325 12.5706L8.6525 6.85062L8.65188 6.85Z"
85
+ fill="#2F60CE"
86
+ ></path>
87
+ </svg>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+
94
+ <div id="sgds-masthead-content" class="container sgds-masthead-content ${this.toggleVisibility ? "show" : null }">
95
+ <div class="row">
96
+ <div class="col">
97
+ <div class="content-grid">
98
+ <div class="wrapper">
99
+ <div class="icon">
100
+ <svg
101
+ xmlns="http://www.w3.org/2000/svg"
102
+ width="17"
103
+ height="17"
104
+ viewBox="0 0 17 17"
105
+ fill="none"
106
+ class="banner-icon"
107
+ >
108
+ <path
109
+ d="M0.166016 5.6665V9.00067H0.999349V13.9998H0.166016V16.4998H0.999349H3.49935H5.16602H7.66601H9.33268H11.8327H13.4993L15.9993 16.5007V16.4998H16.8327V13.9998H15.9993V9.00067H16.8327V5.6665L8.49935 0.666504L0.166016 5.6665ZM3.49935 13.9998V9.00067H5.16602V13.9998H3.49935ZM7.66601 13.9998V9.00067H9.33268V13.9998H7.66601ZM13.4993 13.9998H11.8327V9.00067H13.4993V13.9998ZM10.166 5.6665C10.166 6.58651 9.41935 7.33317 8.49935 7.33317C7.57935 7.33317 6.83268 6.58651 6.83268 5.6665C6.83268 4.7465 7.57935 3.99984 8.49935 3.99984C9.41935 3.99984 10.166 4.7465 10.166 5.6665Z"
110
+ fill="#242425"
111
+ ></path>
112
+ </svg>
113
+ </div>
114
+ <div class="content">
115
+ <div class="title">
116
+ Official website links end with .gov.sg
117
+ </div>
118
+ <article>
119
+ Government agencies communicate via .gov.sg websites (e.g.
120
+ go.gov.sg/open).<a
121
+ href="https://www.gov.sg/trusted-sites#govsites"
122
+ class="trusted-websites-link"
123
+ rel="noreferrer"
124
+ target="_blank"
125
+ >Trusted websites<svg
126
+ version="1.1"
127
+ xmlns="http://www.w3.org/2000/svg"
128
+ width="18"
129
+ height="18"
130
+ viewBox="0 0 32 32"
131
+ class="trusted-websites-icon"
132
+ >
133
+ <title>Trusted websites</title>
134
+ <path
135
+ d="M18.667 4v2.667h4c0.186-0.020 0.374-0.020 0.56 0l-2.667 2.667-6.973 6.987 1.88 1.88 9.733-9.667c0.092 0.257 0.137 0.528 0.133 0.8v4h2.667v-9.333h-9.333z"
136
+ ></path>
137
+ <path
138
+ d="M22.667 25.333h-16v-16h8v-2.667h-8c-1.473 0-2.667 1.194-2.667 2.667v16c0 1.473 1.194 2.667 2.667 2.667h16c1.473 0 2.667-1.194 2.667-2.667v-8h-2.667v8z"
139
+ ></path></svg
140
+ ></a>
141
+ </article>
142
+ </div>
143
+ </div>
144
+ <div class="wrapper">
145
+ <div class="icon">
146
+ <svg
147
+ xmlns="http://www.w3.org/2000/svg"
148
+ width="15"
149
+ height="18"
150
+ viewBox="0 0 15 18"
151
+ fill="none"
152
+ class="banner-icon"
153
+ >
154
+ <path
155
+ d="M14.1663 9.00008C14.1663 8.08091 13.4188 7.33342 12.4997 7.33342H11.6663V4.83342C11.6663 2.53591 9.79717 0.666748 7.49967 0.666748C5.20217 0.666748 3.33301 2.53591 3.33301 4.83342V7.33342H2.49967C1.58051 7.33342 0.833008 8.08091 0.833008 9.00008V15.6667C0.833008 16.5859 1.58051 17.3334 2.49967 17.3334H12.4997C13.4188 17.3334 14.1663 16.5859 14.1663 15.6667V9.00008ZM4.99967 4.83342C4.99967 3.45508 6.12134 2.33341 7.49967 2.33341C8.87801 2.33341 9.99967 3.45508 9.99967 4.83342V7.33342H4.99967V4.83342Z"
156
+ fill="#242425"
157
+ ></path>
158
+ </svg>
159
+ </div>
160
+ <div class="content">
161
+ <div class="title">Secure websites use HTTPS</div>
162
+ <article>
163
+ Look for a<b> lock </b>(<svg
164
+ xmlns="http://www.w3.org/2000/svg"
165
+ width="15"
166
+ height="18"
167
+ viewBox="0 0 15 18"
168
+ fill="none"
169
+ class="banner-icon-inline"
170
+ >
171
+ <path
172
+ d="M14.1663 9.00008C14.1663 8.08091 13.4188 7.33342 12.4997 7.33342H11.6663V4.83342C11.6663 2.53591 9.79717 0.666748 7.49967 0.666748C5.20217 0.666748 3.33301 2.53591 3.33301 4.83342V7.33342H2.49967C1.58051 7.33342 0.833008 8.08091 0.833008 9.00008V15.6667C0.833008 16.5859 1.58051 17.3334 2.49967 17.3334H12.4997C13.4188 17.3334 14.1663 16.5859 14.1663 15.6667V9.00008ZM4.99967 4.83342C4.99967 3.45508 6.12134 2.33341 7.49967 2.33341C8.87801 2.33341 9.99967 3.45508 9.99967 4.83342V7.33342H4.99967V4.83342Z"
173
+ fill="#242425"
174
+ ></path></svg
175
+ >) or https:// as an added precaution. Share sensitive
176
+ information only on official, secure websites.
177
+ </article>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ `;
186
+ }
187
+ }
188
+
189
+ export default SgdsMasthead;
@@ -0,0 +1 @@
1
+ export { SgdsModal } from "./sgds-modal";
@@ -0,0 +1,128 @@
1
+ @import '../utils/base.scss';
2
+
3
+ :host {
4
+ --sgds-modal-width: 35rem;
5
+ --sgds-modal-z-index: 1055;
6
+ --sgds-modal-padding: 1.5rem;
7
+ --sgds-modal-border-radius: 5px;
8
+
9
+ --sgds-modal-border-width: 1px;
10
+ --sgds-modal-overlay-color:rgba(0,0,0,0.5);
11
+ display: contents;
12
+ }
13
+
14
+ [hidden] {
15
+ display: none !important;
16
+ }
17
+
18
+ .modal {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ position: fixed;
23
+ top: 0;
24
+ right: 0;
25
+ bottom: 0;
26
+ left: 0;
27
+ z-index: 1050;
28
+ font-family: var(--sgds-body-font-family);
29
+ }
30
+
31
+ .modal-panel {
32
+ display: flex;
33
+ flex-direction: column;
34
+ z-index: var(--sgds-modal-z-index);
35
+ width: var(--sgds-modal-width);
36
+ max-width: calc(100% - 2.25rem);
37
+ max-height: calc(100% - 2.25rem);
38
+ background-color: white;
39
+ border-radius: var(--sgds-modal-border-radius);
40
+ }
41
+
42
+ .modal-panel:focus {
43
+ outline: none;
44
+ }
45
+
46
+ /* Ensure there's enough vertical padding for phones that don't update vh when chrome appears (e.g. iPhone) */
47
+ @media screen and (max-width: 420px) {
48
+ .modal-panel {
49
+ max-height: 80vh;
50
+ }
51
+ }
52
+
53
+ .modal--open .modal-panel {
54
+ display: flex;
55
+ opacity: 1;
56
+ transform: none;
57
+ }
58
+
59
+ .modal-header {
60
+ flex: 0 0 auto;
61
+ display: flex;
62
+ padding: var(--sgds-modal-padding);
63
+ align-items: center;
64
+ border-bottom: var(--sgds-modal-border-width) solid var(--sgds-gray-400, #98a2b3);
65
+ &.centered{
66
+ @extend .border-bottom-0;
67
+ @extend .pb-0;
68
+ @extend .mb-0;
69
+
70
+ }
71
+ }
72
+
73
+ .modal-title {
74
+ flex: 1 1 auto;
75
+ @extend .h3;
76
+ @extend .gap-3;
77
+ margin: 0;
78
+ &.centered{
79
+ @extend .justify-content-center;
80
+ @extend .flex-column;
81
+ @extend .text-center;
82
+ margin-left: 3rem;
83
+ }
84
+ }
85
+
86
+ .modal-close {
87
+ flex: 0 0 auto;
88
+ display: flex;
89
+ align-items: center;
90
+ &.centered{
91
+ @extend .align-self-start;
92
+ margin-top: -0.5rem;
93
+ }
94
+ }
95
+
96
+ .modal-body {
97
+ flex: 1 1 auto;
98
+ padding: var(--sgds-modal-padding);
99
+ overflow: auto;
100
+ -webkit-overflow-scrolling: touch;
101
+ }
102
+
103
+ .modal-footer {
104
+ flex: 0 0 auto;
105
+ text-align: right;
106
+ padding: var(--sgds-modal-padding);
107
+ padding-top:0;
108
+ &.centered{
109
+ text-align: center;
110
+ }
111
+ }
112
+
113
+ .modal-footer ::slotted(sgds-button) {
114
+ margin-inline-start: 0.5rem;
115
+ }
116
+
117
+ .modal:not(.modal--has-footer) .modal-footer {
118
+ display: none;
119
+ }
120
+
121
+ .modal-overlay {
122
+ position: fixed;
123
+ top: 0;
124
+ right: 0;
125
+ bottom: 0;
126
+ left: 0;
127
+ background-color: var(--sgds-modal-overlay-color);
128
+ }