@communitiesuk/svelte-component-library 0.1.17 → 0.2.0-alpha.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 (97) hide show
  1. package/README.md +116 -98
  2. package/dist/assets/css/base.css +9 -0
  3. package/dist/assets/css/code-block.css +116 -0
  4. package/dist/assets/css/components.css +47 -0
  5. package/dist/assets/css/fonts.css +19 -0
  6. package/dist/assets/css/govuk-additional.css +142 -0
  7. package/dist/assets/css/govuk-frontend.min.css +2 -2
  8. package/dist/assets/css/moduk.css +1 -0
  9. package/dist/assets/css/moj-frontend.min copy.css +4108 -0
  10. package/dist/assets/css/moj-frontend.min.css +2 -0
  11. package/dist/assets/css/moj-frontend.min.css.map +1 -0
  12. package/dist/assets/css/utilities.css +0 -0
  13. package/dist/assets/images/govuk-crest.svg +1 -1
  14. package/dist/assets/js/govuk-frontend.min.js +1 -0
  15. package/dist/assets/js/moj-frontend.min.js +1 -0
  16. package/dist/assets/rebrand/images/favicon.ico +0 -0
  17. package/dist/assets/rebrand/images/favicon.svg +1 -0
  18. package/dist/assets/rebrand/images/govuk-crest.svg +1 -0
  19. package/dist/assets/rebrand/images/govuk-icon-180.png +0 -0
  20. package/dist/assets/rebrand/images/govuk-icon-192.png +0 -0
  21. package/dist/assets/rebrand/images/govuk-icon-512.png +0 -0
  22. package/dist/assets/rebrand/images/govuk-icon-mask.svg +1 -0
  23. package/dist/assets/rebrand/images/govuk-opengraph-image.png +0 -0
  24. package/dist/assets/rebrand/manifest.json +39 -0
  25. package/dist/components/data-vis/line-chart/Line.svelte +48 -41
  26. package/dist/components/data-vis/line-chart/Line.svelte.d.ts +6 -4
  27. package/dist/components/data-vis/line-chart/LineChart.svelte +145 -36
  28. package/dist/components/data-vis/line-chart/LineChart.svelte.d.ts +25 -9
  29. package/dist/components/data-vis/line-chart/Lines.svelte +10 -23
  30. package/dist/components/data-vis/line-chart/Lines.svelte.d.ts +8 -4
  31. package/dist/components/data-vis/line-chart/Marker.svelte +31 -5
  32. package/dist/components/data-vis/line-chart/Marker.svelte.d.ts +6 -2
  33. package/dist/components/data-vis/line-chart/SeriesLabel.svelte +7 -8
  34. package/dist/components/data-vis/line-chart/SeriesLabel.svelte.d.ts +2 -2
  35. package/dist/components/data-vis/line-chart/ValueLabel.svelte +26 -34
  36. package/dist/components/data-vis/line-chart/ValueLabel.svelte.d.ts +8 -4
  37. package/dist/components/data-vis/map/Map.svelte +299 -71
  38. package/dist/components/data-vis/map/Map.svelte.d.ts +39 -12
  39. package/dist/components/data-vis/map/NonStandardControls.svelte +10 -1
  40. package/dist/components/data-vis/map/NonStandardControls.svelte.d.ts +12 -11
  41. package/dist/components/data-vis/map/Tooltip.svelte +3 -4
  42. package/dist/components/data-vis/map/Tooltip.svelte.d.ts +0 -2
  43. package/dist/components/data-vis/map/mapUtils.d.ts +2 -0
  44. package/dist/components/data-vis/map/mapUtils.js +50 -0
  45. package/dist/components/data-vis/table/Table.svelte +28 -40
  46. package/dist/components/data-vis/table/Table.svelte.d.ts +0 -2
  47. package/dist/components/layout/Breadcrumbs.svelte +10 -12
  48. package/dist/components/layout/Breadcrumbs.svelte.d.ts +1 -0
  49. package/dist/components/layout/Footer.svelte +69 -4
  50. package/dist/components/layout/Footer.svelte.d.ts +3 -0
  51. package/dist/components/layout/Header.svelte +56 -16
  52. package/dist/components/layout/Header.svelte.d.ts +1 -0
  53. package/dist/components/layout/InternalHeader.svelte +155 -150
  54. package/dist/components/layout/InternalHeader.svelte.d.ts +1 -0
  55. package/dist/components/ui/Button.svelte +78 -4
  56. package/dist/components/ui/Button.svelte.d.ts +2 -0
  57. package/dist/components/ui/CookieBanner.svelte +356 -0
  58. package/dist/components/ui/CookieBanner.svelte.d.ts +18 -0
  59. package/dist/components/ui/FilterPanel.svelte +167 -158
  60. package/dist/components/ui/FilterPanel.svelte.d.ts +2 -0
  61. package/dist/components/ui/Masthead.svelte +35 -23
  62. package/dist/components/ui/Masthead.svelte.d.ts +2 -0
  63. package/dist/components/ui/PostcodeOrAreaSearch.svelte +200 -0
  64. package/dist/components/ui/PostcodeOrAreaSearch.svelte.d.ts +37 -0
  65. package/dist/components/ui/Search.svelte +2 -2
  66. package/dist/components/ui/SearchAutocomplete.svelte +104 -14
  67. package/dist/components/ui/SearchAutocomplete.svelte.d.ts +4 -0
  68. package/dist/data/IMD2019.json +32846 -0
  69. package/dist/data/places.csv +20039 -0
  70. package/dist/data/places.json +100192 -0
  71. package/dist/data/svgFontDimensions.json +90 -0
  72. package/dist/data/testData.json +52632 -0
  73. package/dist/index.d.ts +2 -0
  74. package/dist/index.js +2 -0
  75. package/dist/package-wrapping/BaseInformation.svelte +0 -33
  76. package/dist/package-wrapping/SidebarContainer.svelte +0 -7
  77. package/dist/utils/area-search/geoConfig.d.ts +435 -0
  78. package/dist/utils/area-search/geoConfig.js +291 -0
  79. package/dist/utils/cookiesNavigation.d.ts +44 -0
  80. package/dist/utils/cookiesNavigation.js +63 -0
  81. package/dist/utils/data-transformations/convert-csv-to-json-proper.cjs +88 -0
  82. package/dist/utils/data-transformations/convert-csv-to-json-proper.d.cts +1 -0
  83. package/dist/utils/data-transformations/convertCSV.d.ts +6 -0
  84. package/dist/utils/data-transformations/convertCSV.js +40 -21
  85. package/dist/utils/text-string-conversion/textStringConversion.d.ts +6 -0
  86. package/dist/utils/text-string-conversion/textStringConversion.js +10 -0
  87. package/package.json +18 -7
  88. package/dist/components/ui/Breadcrumbs.svelte +0 -198
  89. package/dist/components/ui/Breadcrumbs.svelte.d.ts +0 -24
  90. package/dist/components/ui/Footer.svelte +0 -171
  91. package/dist/components/ui/Footer.svelte.d.ts +0 -30
  92. package/dist/components/ui/Header.svelte +0 -43
  93. package/dist/components/ui/Header.svelte.d.ts +0 -7
  94. package/dist/components/ui/ServiceNavigation.svelte +0 -143
  95. package/dist/components/ui/ServiceNavigation.svelte.d.ts +0 -13
  96. package/dist/components/ui/SideNavigation.svelte +0 -346
  97. package/dist/components/ui/SideNavigation.svelte.d.ts +0 -25
@@ -3,3 +3,5 @@ export declare function getColor(value: number, breaks: number[], colors: string
3
3
  export declare function filterGeo(geo: FeatureCollection, year: number | string): any;
4
4
  export declare function jenksBreaks(data: any, numBreaks: any): any[];
5
5
  export declare function quantileBreaks(data: number[], numBreaks: number): number[];
6
+ export declare function createPaintObjectFromMetric(metricProperty: string, breaks: number[], fillColors: string[], fillOpacity?: number): object;
7
+ export declare function extractVectorMetricValues(map: maplibregl.Map, layerId: string, metricProperty: string): number[];
@@ -84,3 +84,53 @@ export function quantileBreaks(data, numBreaks) {
84
84
  breaks.push(data[len - 1]);
85
85
  return breaks;
86
86
  }
87
+ export function createPaintObjectFromMetric(metricProperty, breaks, fillColors, fillOpacity = 0.4) {
88
+ const usableLength = Math.min(breaks.length, fillColors.length);
89
+ breaks.sort((a, b) => a - b);
90
+ function parseNumberWithCommas(value) {
91
+ if (typeof value === "number")
92
+ return value;
93
+ const cleaned = value.toString().replace(/,/g, "").trim();
94
+ const parsed = Number(cleaned);
95
+ return isNaN(parsed) ? 0 : parsed;
96
+ }
97
+ const matchExpression = [
98
+ "step",
99
+ ["to-number", ["get", metricProperty]],
100
+ "#d3d3d3", // Default color
101
+ ];
102
+ for (let i = 0; i < usableLength; i++) {
103
+ const breakValue = parseNumberWithCommas(breaks[i]);
104
+ matchExpression.push(breakValue, fillColors[i]);
105
+ }
106
+ return {
107
+ "fill-color": matchExpression,
108
+ "fill-opacity": fillOpacity,
109
+ };
110
+ }
111
+ export function extractVectorMetricValues(map, layerId, metricProperty) {
112
+ if (!map || !map.isStyleLoaded())
113
+ return [];
114
+ const features = map.queryRenderedFeatures({ layers: [layerId] });
115
+ const seen = new Set();
116
+ return features
117
+ .filter((f) => {
118
+ const id = f.id;
119
+ if (!id || seen.has(id))
120
+ return false;
121
+ seen.add(id);
122
+ return true;
123
+ })
124
+ .map((f) => {
125
+ const raw = f.properties?.[metricProperty];
126
+ if (typeof raw === "string") {
127
+ const cleaned = raw.replace(/,/g, "");
128
+ return parseFloat(cleaned);
129
+ }
130
+ else if (typeof raw === "number") {
131
+ return raw;
132
+ }
133
+ return NaN;
134
+ })
135
+ .filter((v) => !isNaN(v));
136
+ }
@@ -1,15 +1,14 @@
1
1
  <script>
2
- import Button from "../../ui/Button.svelte";
2
+ import Button from "./../../ui/Button.svelte";
3
3
 
4
4
  let {
5
- componentNameProp = undefined,
6
5
  data = undefined,
7
6
  metaData = undefined,
8
7
  caption = undefined,
9
8
  colourScale = undefined,
10
9
  } = $props();
11
10
 
12
- let localCopyOfData = $state([...data]);
11
+ let localCopyOfData = $derived([...data]);
13
12
 
14
13
  function hasUniqueValues(array, key) {
15
14
  const seen = new Set();
@@ -22,17 +21,6 @@
22
21
  return true; // All values are unique
23
22
  }
24
23
 
25
- // $inspect(
26
- // localCopyOfData[0].areaName,
27
- // "data type is",
28
- // typeof localCopyOfData[0].areaName,
29
- // );
30
- // $inspect(
31
- // localCopyOfData[0]["Household waste recycling rate"],
32
- // "data type is",
33
- // typeof localCopyOfData[0]["Household waste recycling rate"],
34
- // );
35
-
36
24
  let columns = [];
37
25
 
38
26
  for (const column in localCopyOfData[0]) {
@@ -55,8 +43,6 @@
55
43
  .filter((column) => column.dataType === "number")
56
44
  .map((column) => column.key);
57
45
 
58
- // $inspect("metrics is", metrics);
59
-
60
46
  let sortState = $state({ column: "sortedColumn", order: "ascending" });
61
47
 
62
48
  function updateSortState(columnToSort, sortOrder) {
@@ -133,8 +119,6 @@
133
119
  }
134
120
 
135
121
  const colorKey = Object.entries({ Good: 1, Ok: 0.5, Bad: 0 });
136
-
137
- // $inspect("the first column key is", columns[0].key);
138
122
  </script>
139
123
 
140
124
  <div class="p-4">
@@ -150,8 +134,8 @@
150
134
  {/if}
151
135
 
152
136
  <div class="table-container">
137
+ <div id="table-caption" class="sticky-caption">{caption}</div>
153
138
  <table class="govuk-table" data-module="moj-sortable-table">
154
- <caption class="govuk-table__caption">{caption}</caption>
155
139
  <thead class="govuk-table__head"
156
140
  ><tr class="govuk-table__row">
157
141
  {#each columns as column}
@@ -159,7 +143,12 @@
159
143
  scope="col"
160
144
  class={`govuk-table__header ${column.dataType === "number" ? "govuk-table__header--numeric" : ""}`}
161
145
  title={metaData[column.key].explainer}
162
- aria-sort="none"
146
+ aria-sort={sortState.column !== column.key
147
+ ? "none"
148
+ : sortState.column === column.key &&
149
+ sortState.order === "descending"
150
+ ? "descending"
151
+ : "ascending"}
163
152
  >
164
153
  <div class="header">
165
154
  <Button
@@ -187,27 +176,17 @@
187
176
  {#each columns as column}
188
177
  {#if column.dataType === "number"}
189
178
  {#if colourScale === "On"}
190
- {#if metaData[column.key].direction === "Higher is better"}
191
- <td
192
- class="govuk-table__cell govuk-table__cell--numeric"
193
- style="background-color: {normToColor(
194
- row[column.key + '__normalised'],
195
- )}"
196
- data-sort-value="42">{row[column.key]}</td
197
- >
198
- {:else}
199
- <td
200
- class="govuk-table__cell govuk-table__cell--numeric"
201
- style="background-color: {normToColorReverse(
202
- row[column.key + '__normalised'],
203
- )}"
204
- data-sort-value="42">{row[column.key]}</td
205
- >
206
- {/if}
207
- {:else}
208
179
  <td
209
180
  class="govuk-table__cell govuk-table__cell--numeric"
210
- data-sort-value="42">{row[column.key]}</td
181
+ style="background-color: {metaData[column.key].direction ===
182
+ 'Higher is better'
183
+ ? normToColor(row[column.key + '__normalised'])
184
+ : normToColorReverse(row[column.key + '__normalised'])}"
185
+ >{row[column.key]}</td
186
+ >
187
+ {:else}
188
+ <td class="govuk-table__cell govuk-table__cell--numeric"
189
+ >{row[column.key]}</td
211
190
  >
212
191
  {/if}
213
192
  {:else}
@@ -223,8 +202,10 @@
223
202
 
224
203
  <style>
225
204
  .table-container {
226
- max-height: 80vh;
205
+ max-height: 85vh;
227
206
  overflow-y: auto;
207
+ overflow-x: scroll;
208
+ width: 100%;
228
209
  }
229
210
 
230
211
  th {
@@ -234,6 +215,13 @@
234
215
  background-color: white;
235
216
  }
236
217
 
218
+ .sticky-caption {
219
+ position: sticky;
220
+ top: 0;
221
+ z-index: 2;
222
+ background-color: white;
223
+ }
224
+
237
225
  .legend {
238
226
  display: flex;
239
227
  justify-content: center;
@@ -4,14 +4,12 @@ type Table = {
4
4
  $set?(props: Partial<$$ComponentProps>): void;
5
5
  };
6
6
  declare const Table: import("svelte").Component<{
7
- componentNameProp?: any;
8
7
  data?: any;
9
8
  metaData?: any;
10
9
  caption?: any;
11
10
  colourScale?: any;
12
11
  }, {}, "">;
13
12
  type $$ComponentProps = {
14
- componentNameProp?: any;
15
13
  data?: any;
16
14
  metaData?: any;
17
15
  caption?: any;
@@ -26,11 +26,13 @@
26
26
  collapseOnMobile = false,
27
27
  inverse = false,
28
28
  ariaLabel = "Breadcrumb",
29
+ formatBreadcrumbText,
29
30
  } = $props<{
30
31
  items?: BreadcrumbItem[];
31
32
  collapseOnMobile?: boolean;
32
33
  inverse?: boolean;
33
34
  ariaLabel?: string;
35
+ formatBreadcrumbText?: (text: string[]) => string;
34
36
  }>();
35
37
 
36
38
  // Load all page modules for route detection
@@ -53,7 +55,7 @@
53
55
 
54
56
  // Effect to update breadcrumb items when dependencies change
55
57
  $effect(() => {
56
- breadcrumbItems = items || generateBreadcrumbItems(page, routeModules);
58
+ breadcrumbItems = generateBreadcrumbItems(page, routeModules);
57
59
  });
58
60
 
59
61
  // Generate breadcrumb items from the current route
@@ -156,23 +158,19 @@
156
158
  /**
157
159
  * Converts route segments to human-readable text
158
160
  */
159
- function formatBreadcrumbText(text: string): string {
161
+ /*function formatBreadcrumbText(text: string): string {
160
162
  // Handle special cases
161
- if (text === "ui") return "UI Components";
162
- if (text === "data-vis") return "Data Visualization";
163
- if (text === "content") return "Content Components";
164
- if (text === "layout") return "Layout Components";
165
- if (text === "user-guide") return "User Guide";
166
- if (text === "playground") return "Playground";
167
- if (text === "components") return "Components";
168
- if (text === "local-lib") return "Local Library";
163
+ const urlLookupObject = {
164
+ ui: "UI Components",
165
+ "data-vis": "Data Visualization",
166
+ };
169
167
 
170
168
  // Default: capitalize and replace hyphens with spaces
171
- return text
169
+ return (text in urlLookupObject ? urlLookupObject[text] : text)
172
170
  .split("-")
173
171
  .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
174
172
  .join(" ");
175
- }
173
+ }*/
176
174
  </script>
177
175
 
178
176
  <nav
@@ -18,6 +18,7 @@ type $$ComponentProps = {
18
18
  collapseOnMobile?: boolean;
19
19
  inverse?: boolean;
20
20
  ariaLabel?: string;
21
+ formatBreadcrumbText?: (text: string[]) => string;
21
22
  };
22
23
  declare const Breadcrumbs: import("svelte").Component<$$ComponentProps, {}, "">;
23
24
  type Breadcrumbs = ReturnType<typeof Breadcrumbs>;
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import legacyDefaultCopyrightLogo from "./../../assets/images/govuk-crest.svg";
2
3
  // Define component props with default values
3
4
  // sections: array of footer navigation sections
4
5
  // inlineLinks: array of inline footer links
@@ -14,6 +15,8 @@
14
15
  // licenceTextBefore: Text to display before the licence link
15
16
  // licenceTextAfter: Text to display after the licence link
16
17
  // copyrightHref: URL for the crown copyright link
18
+ // rebrand: whether to use the new rebranded crown logo
19
+ // borderTopColor: custom color for the footer's top border (overrides default #1d70b8)
17
20
 
18
21
  // Define types for component props
19
22
  interface FooterItem {
@@ -21,6 +24,7 @@
21
24
  label: string;
22
25
  lang?: string;
23
26
  hrefLang?: string;
27
+ onclick?: (event: Event) => void;
24
28
  }
25
29
 
26
30
  interface FooterSection {
@@ -37,7 +41,7 @@
37
41
  containerWidth = "govuk-width-container",
38
42
  showLicence = true,
39
43
  showCopyright = true,
40
- copyrightLogoUrl = "/assets/images/govuk-crest.svg",
44
+ copyrightLogoUrl,
41
45
  copyrightText = "© Crown copyright",
42
46
  crownSvgPath = "M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145",
43
47
  licenceHref = "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
@@ -45,6 +49,8 @@
45
49
  licenceTextBefore = "All content is available under the ",
46
50
  licenceTextAfter = ", except where otherwise stated",
47
51
  copyrightHref = "https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/",
52
+ rebrand = true,
53
+ borderTopColor = "#00625E",
48
54
  } = $props<{
49
55
  sections?: FooterSection[];
50
56
  inlineLinks?: FooterItem[];
@@ -60,12 +66,46 @@
60
66
  licenceTextBefore?: string;
61
67
  licenceTextAfter?: string;
62
68
  copyrightHref?: string;
69
+ rebrand?: boolean;
70
+ borderTopColor?: string;
63
71
  }>();
64
72
  </script>
65
73
 
66
74
  <!-- Main footer container -->
67
- <footer class="govuk-footer">
75
+ <footer
76
+ class="govuk-footer"
77
+ class:govuk-footer--rebranded={rebrand}
78
+ style:border-top-color={borderTopColor}
79
+ >
68
80
  <div class={containerWidth}>
81
+ {#if rebrand}
82
+ <!-- New rebranded crown logo for footer -->
83
+ <svg
84
+ focusable="false"
85
+ role="presentation"
86
+ xmlns="http://www.w3.org/2000/svg"
87
+ viewBox="0 0 64 60"
88
+ height="30"
89
+ width="32"
90
+ fill="currentcolor"
91
+ class="govuk-footer__crown"
92
+ >
93
+ <g>
94
+ <circle cx="20" cy="17.6" r="3.7"></circle>
95
+ <circle cx="10.2" cy="23.5" r="3.7"></circle>
96
+ <circle cx="3.7" cy="33.2" r="3.7"></circle>
97
+ <circle cx="31.7" cy="30.6" r="3.7"></circle>
98
+ <circle cx="43.3" cy="17.6" r="3.7"></circle>
99
+ <circle cx="53.2" cy="23.5" r="3.7"></circle>
100
+ <circle cx="59.7" cy="33.2" r="3.7"></circle>
101
+ <circle cx="31.7" cy="30.6" r="3.7"></circle>
102
+ <path
103
+ d="M33.1,9.8c.2-.1.3-.3.5-.5l4.6,2.4v-6.8l-4.6,1.5c-.1-.2-.3-.3-.5-.5l1.9-5.9h-6.7l1.9,5.9c-.2.1-.3.3-.5.5l-4.6-1.5v6.8l4.6-2.4c.1.2.3.3.5.5l-2.6,8c-.9,2.8,1.2,5.7,4.1,5.7h0c3,0,5.1-2.9,4.1-5.7l-2.6-8ZM37,37.9s-3.4,3.8-4.1,6.1c2.2,0,4.2-.5,6.4-2.8l-.7,8.5c-2-2.8-4.4-4.1-5.7-3.8.1,3.1.5,6.7,5.8,7.2,3.7.3,6.7-1.5,7-3.8.4-2.6-2-4.3-3.7-1.6-1.4-4.5,2.4-6.1,4.9-3.2-1.9-4.5-1.8-7.7,2.4-10.9,3,4,2.6,7.3-1.2,11.1,2.4-1.3,6.2,0,4,4.6-1.2-2.8-3.7-2.2-4.2.2-.3,1.7.7,3.7,3,4.2,1.9.3,4.7-.9,7-5.9-1.3,0-2.4.7-3.9,1.7l2.4-8c.6,2.3,1.4,3.7,2.2,4.5.6-1.6.5-2.8,0-5.3l5,1.8c-2.6,3.6-5.2,8.7-7.3,17.5-7.4-1.1-15.7-1.7-24.5-1.7h0c-8.8,0-17.1.6-24.5,1.7-2.1-8.9-4.7-13.9-7.3-17.5l5-1.8c-.5,2.5-.6,3.7,0,5.3.8-.8,1.6-2.3,2.2-4.5l2.4,8c-1.5-1-2.6-1.7-3.9-1.7,2.3,5,5.2,6.2,7,5.9,2.3-.4,3.3-2.4,3-4.2-.5-2.4-3-3.1-4.2-.2-2.2-4.6,1.6-6,4-4.6-3.7-3.7-4.2-7.1-1.2-11.1,4.2,3.2,4.3,6.4,2.4,10.9,2.5-2.8,6.3-1.3,4.9,3.2-1.8-2.7-4.1-1-3.7,1.6.3,2.3,3.3,4.1,7,3.8,5.4-.5,5.7-4.2,5.8-7.2-1.3-.2-3.7,1-5.7,3.8l-.7-8.5c2.2,2.3,4.2,2.7,6.4,2.8-.7-2.3-4.1-6.1-4.1-6.1h10.6,0Z"
104
+ ></path>
105
+ </g>
106
+ </svg>
107
+ {/if}
108
+
69
109
  <!-- Navigation sections (optional) -->
70
110
  {#if sections.length > 0}
71
111
  <div class="govuk-footer__navigation">
@@ -117,6 +157,7 @@
117
157
  href={link.href}
118
158
  lang={link.lang}
119
159
  hreflang={link.hrefLang}
160
+ onclick={link.onclick}
120
161
  >
121
162
  {link.label}
122
163
  </a>
@@ -157,10 +198,34 @@
157
198
  <!-- Crown copyright section (optional) -->
158
199
  {#if showCopyright}
159
200
  <div class="govuk-footer__meta-item">
201
+ <!--
202
+ Copyright logo handling:
203
+
204
+ The GOV.UK Frontend CSS uses a ::before pseudo-element on .govuk-footer__copyright-logo
205
+ to display the crown logo. This creates conflicts when we want to use custom logos.
206
+
207
+ Our approach:
208
+ 1. When using a custom logo (copyrightLogoUrl provided):
209
+ - Remove the govuk-footer__copyright-logo class to disable the pseudo-element
210
+ - Apply explicit background-image styles to show the custom logo
211
+
212
+ 2. When using default logos:
213
+ - Rebrand mode: Let the CSS pseudo-element handle it (uses rebrand assets)
214
+ - Legacy mode: Always use explicit styling (uses legacy assets)
215
+
216
+ This prevents logo duplication/overlap while maintaining backward compatibility.
217
+ -->
160
218
  <a
161
- class="govuk-footer__link govuk-footer__copyright-logo"
219
+ class={[
220
+ "govuk-footer__link",
221
+ {
222
+ "govuk-footer__copyright-logo": !copyrightLogoUrl && rebrand,
223
+ },
224
+ ]}
162
225
  href={copyrightHref}
163
- style="background-image: url({copyrightLogoUrl});"
226
+ style={copyrightLogoUrl || !rebrand
227
+ ? `background-image: url(${copyrightLogoUrl ?? legacyDefaultCopyrightLogo}); display: block; width: 100%; padding-top: 112px; background-repeat: no-repeat; background-position: 50% 0; background-size: 125px 102px; text-align: center;`
228
+ : ""}
164
229
  >
165
230
  {copyrightText}
166
231
  </a>
@@ -3,6 +3,7 @@ interface FooterItem {
3
3
  label: string;
4
4
  lang?: string;
5
5
  hrefLang?: string;
6
+ onclick?: (event: Event) => void;
6
7
  }
7
8
  interface FooterSection {
8
9
  title: string;
@@ -24,6 +25,8 @@ type $$ComponentProps = {
24
25
  licenceTextBefore?: string;
25
26
  licenceTextAfter?: string;
26
27
  copyrightHref?: string;
28
+ rebrand?: boolean;
29
+ borderTopColor?: string;
27
30
  };
28
31
  declare const Footer: import("svelte").Component<$$ComponentProps, {}, "">;
29
32
  type Footer = ReturnType<typeof Footer>;
@@ -4,9 +4,14 @@ Most services on GOV.UK should use the default GOV.UK header.
4
4
  It should only show the GOV.UK logo and any GOV.UK-wide links and tools to help your users. Do not add the menu of GOV.UK topic links to your service's GOV.UK header. -->
5
5
 
6
6
  <script lang="ts">
7
- let { fullWidthBorder = false, homepageUrl = "/" } = $props<{
7
+ let {
8
+ fullWidthBorder = false,
9
+ homepageUrl = "/",
10
+ rebrand = true,
11
+ } = $props<{
8
12
  fullWidthBorder?: boolean;
9
13
  homepageUrl?: string;
14
+ rebrand?: boolean;
10
15
  }>();
11
16
  </script>
12
17
 
@@ -22,21 +27,56 @@ It should only show the GOV.UK logo and any GOV.UK-wide links and tools to help
22
27
  href={homepageUrl}
23
28
  class="govuk-header__link govuk-header__link--homepage"
24
29
  >
25
- <svg
26
- focusable="false"
27
- role="img"
28
- class="govuk-header__logotype"
29
- xmlns="http://www.w3.org/2000/svg"
30
- viewBox="0 0 148 30"
31
- height="30"
32
- width="148"
33
- aria-label="GOV.UK"
34
- >
35
- <title>GOV.UK</title>
36
- <path
37
- d="M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8m28.3-11.6c0 .9.1 1.7.3 2.5.2.8.6 1.5 1 2.2.5.6 1 1.1 1.7 1.5.7.4 1.5.6 2.5.6.9 0 1.7-.1 2.3-.4s1.1-.7 1.5-1.1c.4-.4.6-.9.8-1.5.1-.5.2-1 .2-1.5v-.2h-5.3v-3.2h9.4V28H55v-2.5c-.3.4-.6.8-1 1.1-.4.3-.8.6-1.3.9-.5.2-1 .4-1.6.6s-1.2.2-1.8.2c-1.5 0-2.9-.3-4-.8-1.2-.6-2.2-1.3-3-2.3-.8-1-1.4-2.1-1.8-3.4-.3-1.4-.5-2.8-.5-4.3s.2-2.9.7-4.2c.5-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.6 2.6-.8 4.1-.8 1 0 1.9.1 2.8.3.9.2 1.7.6 2.4 1s1.4.9 1.9 1.5c.6.6 1 1.3 1.4 2l-3.7 2.1c-.2-.4-.5-.9-.8-1.2-.3-.4-.6-.7-1-1-.4-.3-.8-.5-1.3-.7-.5-.2-1.1-.2-1.7-.2-1 0-1.8.2-2.5.6-.7.4-1.3.9-1.7 1.5-.5.6-.8 1.4-1 2.2-.3.8-.4 1.9-.4 2.7zM71.5 6.8c1.5 0 2.9.3 4.2.8 1.2.6 2.3 1.3 3.1 2.3.9 1 1.5 2.1 2 3.4s.7 2.7.7 4.2-.2 2.9-.7 4.2c-.4 1.3-1.1 2.4-2 3.4-.9 1-1.9 1.7-3.1 2.3-1.2.6-2.6.8-4.2.8s-2.9-.3-4.2-.8c-1.2-.6-2.3-1.3-3.1-2.3-.9-1-1.5-2.1-2-3.4-.4-1.3-.7-2.7-.7-4.2s.2-2.9.7-4.2c.4-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.5 2.6-.8 4.2-.8zm0 17.6c.9 0 1.7-.2 2.4-.5s1.3-.8 1.7-1.4c.5-.6.8-1.3 1.1-2.2.2-.8.4-1.7.4-2.7v-.1c0-1-.1-1.9-.4-2.7-.2-.8-.6-1.6-1.1-2.2-.5-.6-1.1-1.1-1.7-1.4-.7-.3-1.5-.5-2.4-.5s-1.7.2-2.4.5-1.3.8-1.7 1.4c-.5.6-.8 1.3-1.1 2.2-.2.8-.4 1.7-.4 2.7v.1c0 1 .1 1.9.4 2.7.2.8.6 1.6 1.1 2.2.5.6 1.1 1.1 1.7 1.4.6.3 1.4.5 2.4.5zM88.9 28 83 7h4.7l4 15.7h.1l4-15.7h4.7l-5.9 21h-5.7zm28.8-3.6c.6 0 1.2-.1 1.7-.3.5-.2 1-.4 1.4-.8.4-.4.7-.8.9-1.4.2-.6.3-1.2.3-2v-13h4.1v13.6c0 1.2-.2 2.2-.6 3.1s-1 1.7-1.8 2.4c-.7.7-1.6 1.2-2.7 1.5-1 .4-2.2.5-3.4.5-1.2 0-2.4-.2-3.4-.5-1-.4-1.9-.9-2.7-1.5-.8-.7-1.3-1.5-1.8-2.4-.4-.9-.6-2-.6-3.1V6.9h4.2v13c0 .8.1 1.4.3 2 .2.6.5 1 .9 1.4.4.4.8.6 1.4.8.6.2 1.1.3 1.8.3zm13-17.4h4.2v9.1l7.4-9.1h5.2l-7.2 8.4L148 28h-4.9l-5.5-9.4-2.7 3V28h-4.2V7zm-27.6 16.1c-1.5 0-2.7 1.2-2.7 2.7s1.2 2.7 2.7 2.7 2.7-1.2 2.7-2.7-1.2-2.7-2.7-2.7z"
38
- ></path>
39
- </svg>
30
+ {#if rebrand}
31
+ <!-- New rebranded GOV.UK logo with integrated crown -->
32
+ <svg
33
+ xmlns="http://www.w3.org/2000/svg"
34
+ focusable="false"
35
+ role="img"
36
+ viewBox="0 0 324 60"
37
+ height="30"
38
+ width="162"
39
+ fill="currentcolor"
40
+ class="govuk-header__logotype"
41
+ aria-label="GOV.UK"
42
+ >
43
+ <title>GOV.UK</title>
44
+ <g>
45
+ <circle cx="20" cy="17.6" r="3.7"></circle>
46
+ <circle cx="10.2" cy="23.5" r="3.7"></circle>
47
+ <circle cx="3.7" cy="33.2" r="3.7"></circle>
48
+ <circle cx="31.7" cy="30.6" r="3.7"></circle>
49
+ <circle cx="43.3" cy="17.6" r="3.7"></circle>
50
+ <circle cx="53.2" cy="23.5" r="3.7"></circle>
51
+ <circle cx="59.7" cy="33.2" r="3.7"></circle>
52
+ <circle cx="31.7" cy="30.6" r="3.7"></circle>
53
+ <path
54
+ d="M33.1,9.8c.2-.1.3-.3.5-.5l4.6,2.4v-6.8l-4.6,1.5c-.1-.2-.3-.3-.5-.5l1.9-5.9h-6.7l1.9,5.9c-.2.1-.3.3-.5.5l-4.6-1.5v6.8l4.6-2.4c.1.2.3.3.5.5l-2.6,8c-.9,2.8,1.2,5.7,4.1,5.7h0c3,0,5.1-2.9,4.1-5.7l-2.6-8ZM37,37.9s-3.4,3.8-4.1,6.1c2.2,0,4.2-.5,6.4-2.8l-.7,8.5c-2-2.8-4.4-4.1-5.7-3.8.1,3.1.5,6.7,5.8,7.2,3.7.3,6.7-1.5,7-3.8.4-2.6-2-4.3-3.7-1.6-1.4-4.5,2.4-6.1,4.9-3.2-1.9-4.5-1.8-7.7,2.4-10.9,3,4,2.6,7.3-1.2,11.1,2.4-1.3,6.2,0,4,4.6-1.2-2.8-3.7-2.2-4.2.2-.3,1.7.7,3.7,3,4.2,1.9.3,4.7-.9,7-5.9-1.3,0-2.4.7-3.9,1.7l2.4-8c.6,2.3,1.4,3.7,2.2,4.5.6-1.6.5-2.8,0-5.3l5,1.8c-2.6,3.6-5.2,8.7-7.3,17.5-7.4-1.1-15.7-1.7-24.5-1.7h0c-8.8,0-17.1.6-24.5,1.7-2.1-8.9-4.7-13.9-7.3-17.5l5-1.8c-.5,2.5-.6,3.7,0,5.3.8-.8,1.6-2.3,2.2-4.5l2.4,8c-1.5-1-2.6-1.7-3.9-1.7,2.3,5,5.2,6.2,7,5.9,2.3-.4,3.3-2.4,3-4.2-.5-2.4-3-3.1-4.2-.2-2.2-4.6,1.6-6,4-4.6-3.7-3.7-4.2-7.1-1.2-11.1,4.2,3.2,4.3,6.4,2.4,10.9,2.5-2.8,6.3-1.3,4.9,3.2-1.8-2.7-4.1-1-3.7,1.6.3,2.3,3.3,4.1,7,3.8,5.4-.5,5.7-4.2,5.8-7.2-1.3-.2-3.7,1-5.7,3.8l-.7-8.5c2.2,2.3,4.2,2.7,6.4,2.8-.7-2.3-4.1-6.1-4.1-6.1h10.6,0Z"
55
+ ></path>
56
+ </g>
57
+ <circle class="govuk-logo-dot" cx="227" cy="36" r="7.3"></circle>
58
+ <path
59
+ d="M94.7,36.1c0,1.9.2,3.6.7,5.4.5,1.7,1.2,3.2,2.1,4.5.9,1.3,2.2,2.4,3.6,3.2,1.5.8,3.2,1.2,5.3,1.2s3.6-.3,4.9-.9c1.3-.6,2.3-1.4,3.1-2.3.8-.9,1.3-2,1.6-3,.3-1.1.5-2.1.5-3v-.4h-11v-6.6h19.5v24h-7.7v-5.4c-.5.8-1.2,1.6-2,2.3-.8.7-1.7,1.3-2.7,1.8-1,.5-2.1.9-3.3,1.2-1.2.3-2.5.4-3.8.4-3.2,0-6-.6-8.4-1.7-2.5-1.1-4.5-2.7-6.2-4.7-1.7-2-3-4.4-3.8-7.1-.9-2.7-1.3-5.6-1.3-8.7s.5-6,1.5-8.7,2.4-5.1,4.2-7.1c1.8-2,4-3.6,6.5-4.7s5.4-1.7,8.6-1.7s4,.2,5.9.7c1.8.5,3.5,1.1,5.1,2,1.5.9,2.9,1.9,4,3.2,1.2,1.2,2.1,2.6,2.8,4.1l-7.7,4.3c-.5-.9-1-1.8-1.6-2.6-.6-.8-1.3-1.5-2.2-2.1-.8-.6-1.7-1-2.8-1.4-1-.3-2.2-.5-3.5-.5-2,0-3.8.4-5.3,1.2s-2.7,1.9-3.6,3.2c-.9,1.3-1.7,2.8-2.1,4.6s-.7,3.5-.7,5.3v.3h0ZM152.9,13.7c3.2,0,6.1.6,8.7,1.7,2.6,1.2,4.7,2.7,6.5,4.7,1.8,2,3.1,4.4,4.1,7.1s1.4,5.6,1.4,8.7-.5,6-1.4,8.7c-.9,2.7-2.3,5.1-4.1,7.1s-4,3.6-6.5,4.7c-2.6,1.1-5.5,1.7-8.7,1.7s-6.1-.6-8.7-1.7c-2.6-1.1-4.7-2.7-6.5-4.7-1.8-2-3.1-4.4-4.1-7.1-.9-2.7-1.4-5.6-1.4-8.7s.5-6,1.4-8.7,2.3-5.1,4.1-7.1c1.8-2,4-3.6,6.5-4.7s5.4-1.7,8.7-1.7h0ZM152.9,50.4c1.9,0,3.6-.4,5-1.1,1.4-.7,2.7-1.7,3.6-3,1-1.3,1.7-2.8,2.2-4.5.5-1.7.8-3.6.8-5.7v-.2c0-2-.3-3.9-.8-5.7-.5-1.7-1.3-3.3-2.2-4.5-1-1.3-2.2-2.3-3.6-3-1.4-.7-3.1-1.1-5-1.1s-3.6.4-5,1.1c-1.5.7-2.7,1.7-3.6,3s-1.7,2.8-2.2,4.5c-.5,1.7-.8,3.6-.8,5.7v.2c0,2.1.3,4,.8,5.7.5,1.7,1.2,3.2,2.2,4.5,1,1.3,2.2,2.3,3.6,3,1.5.7,3.1,1.1,5,1.1ZM189.1,58l-12.3-44h9.8l8.4,32.9h.3l8.2-32.9h9.7l-12.3,44M262.9,50.4c1.3,0,2.5-.2,3.6-.6,1.1-.4,2-.9,2.8-1.7.8-.8,1.4-1.7,1.9-2.9.5-1.2.7-2.5.7-4.1V14h8.6v28.5c0,2.4-.4,4.6-1.3,6.6-.9,2-2.1,3.6-3.7,5-1.6,1.4-3.4,2.4-5.6,3.2-2.2.7-4.5,1.1-7.1,1.1s-4.9-.4-7.1-1.1c-2.2-.7-4-1.8-5.6-3.2s-2.8-3-3.7-5c-.9-2-1.3-4.1-1.3-6.6V14h8.7v27.2c0,1.6.2,2.9.7,4.1.5,1.2,1.1,2.1,1.9,2.9.8.8,1.7,1.3,2.8,1.7s2.3.6,3.6.6h0ZM288.5,14h8.7v19.1l15.5-19.1h10.8l-15.1,17.6,16.1,26.4h-10.2l-11.5-19.7-5.6,6.3v13.5h-8.7"
60
+ ></path>
61
+ </svg>
62
+ {:else}
63
+ <!-- Original GOV.UK logo -->
64
+ <svg
65
+ focusable="false"
66
+ role="img"
67
+ class="govuk-header__logotype"
68
+ xmlns="http://www.w3.org/2000/svg"
69
+ viewBox="0 0 148 30"
70
+ height="30"
71
+ width="148"
72
+ aria-label="GOV.UK"
73
+ >
74
+ <title>GOV.UK</title>
75
+ <path
76
+ d="M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8m28.3-11.6c0 .9.1 1.7.3 2.5.2.8.6 1.5 1 2.2.5.6 1 1.1 1.7 1.5.7.4 1.5.6 2.5.6.9 0 1.7-.1 2.3-.4s1.1-.7 1.5-1.1c.4-.4.6-.9.8-1.5.1-.5.2-1 .2-1.5v-.2h-5.3v-3.2h9.4V28H55v-2.5c-.3.4-.6.8-1 1.1-.4.3-.8.6-1.3.9-.5.2-1 .4-1.6.6s-1.2.2-1.8.2c-1.5 0-2.9-.3-4-.8-1.2-.6-2.2-1.3-3-2.3-.8-1-1.4-2.1-1.8-3.4-.3-1.4-.5-2.8-.5-4.3s.2-2.9.7-4.2c.5-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.6 2.6-.8 4.1-.8 1 0 1.9.1 2.8.3.9.2 1.7.6 2.4 1s1.4.9 1.9 1.5c.6.6 1 1.3 1.4 2l-3.7 2.1c-.2-.4-.5-.9-.8-1.2-.3-.4-.6-.7-1-1-.4-.3-.8-.5-1.3-.7-.5-.2-1.1-.2-1.7-.2-1 0-1.8.2-2.5.6-.7.4-1.3.9-1.7 1.5-.5.6-.8 1.4-1 2.2-.3.8-.4 1.9-.4 2.7zM71.5 6.8c1.5 0 2.9.3 4.2.8 1.2.6 2.3 1.3 3.1 2.3.9 1 1.5 2.1 2 3.4s.7 2.7.7 4.2-.2 2.9-.7 4.2c-.4 1.3-1.1 2.4-2 3.4-.9 1-1.9 1.7-3.1 2.3-1.2.6-2.6.8-4.2.8s-2.9-.3-4.2-.8c-1.2-.6-2.3-1.3-3.1-2.3-.9-1-1.5-2.1-2-3.4-.4-1.3-.7-2.7-.7-4.2s.2-2.9.7-4.2c.4-1.3 1.1-2.4 2-3.4.9-1 1.9-1.7 3.1-2.3 1.2-.5 2.6-.8 4.2-.8zm0 17.6c.9 0 1.7-.2 2.4-.5s1.3-.8 1.7-1.4c.5-.6.8-1.3 1.1-2.2.2-.8.4-1.7.4-2.7v-.1c0-1-.1-1.9-.4-2.7-.2-.8-.6-1.6-1.1-2.2-.5-.6-1.1-1.1-1.7-1.4-.7-.3-1.5-.5-2.4-.5s-1.7.2-2.4.5-1.3.8-1.7 1.4c-.5.6-.8 1.3-1.1 2.2-.2.8-.4 1.7-.4 2.7v.1c0 1 .1 1.9.4 2.7.2.8.6 1.6 1.1 2.2.5.6 1.1 1.1 1.7 1.4.6.3 1.4.5 2.4.5zM88.9 28 83 7h4.7l4 15.7h.1l4-15.7h4.7l-5.9 21h-5.7zm28.8-3.6c.6 0 1.2-.1 1.7-.3.5-.2 1-.4 1.4-.8.4-.4.7-.8.9-1.4.2-.6.3-1.2.3-2v-13h4.1v13.6c0 1.2-.2 2.2-.6 3.1s-1 1.7-1.8 2.4c-.7.7-1.6 1.2-2.7 1.5-1 .4-2.2.5-3.4.5-1.2 0-2.4-.2-3.4-.5-1-.4-1.9-.9-2.7-1.5-.8-.7-1.3-1.5-1.8-2.4-.4-.9-.6-2-.6-3.1V6.9h4.2v13c0 .8.1 1.4.3 2 .2.6.5 1 .9 1.4.4.4.8.6 1.4.8.6.2 1.1.3 1.8.3zm13-17.4h4.2v9.1l7.4-9.1h5.2l-7.2 8.4L148 28h-4.9l-5.5-9.4-2.7 3V28h-4.2V7zm-27.6 16.1c-1.5 0-2.7 1.2-2.7 2.7s1.2 2.7 2.7 2.7 2.7-1.2 2.7-2.7-1.2-2.7-2.7-2.7z"
77
+ ></path>
78
+ </svg>
79
+ {/if}
40
80
  </a>
41
81
  </div>
42
82
  </div>
@@ -1,6 +1,7 @@
1
1
  type $$ComponentProps = {
2
2
  fullWidthBorder?: boolean;
3
3
  homepageUrl?: string;
4
+ rebrand?: boolean;
4
5
  };
5
6
  declare const Header: import("svelte").Component<$$ComponentProps, {}, "">;
6
7
  type Header = ReturnType<typeof Header>;