tide-design-system 2.1.6 → 2.1.8

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 (182) hide show
  1. package/.storybook/main.ts +1 -0
  2. package/dist/IconAcute-ad6bc5da.js +16 -0
  3. package/dist/IconAcute-b1e43123.cjs +2 -0
  4. package/dist/IconAlignSpaceEven-7ee811f8.cjs +2 -0
  5. package/dist/IconAlignSpaceEven-a1d90758.js +16 -0
  6. package/dist/IconAtvAtv-c2e11398.cjs +2 -0
  7. package/dist/IconAtvAtv-d10d11c0.js +20 -0
  8. package/dist/IconAtvDuneBuggy-458e7a9c.js +20 -0
  9. package/dist/IconAtvDuneBuggy-ff1f7a23.cjs +2 -0
  10. package/dist/IconAtvGoKart-0eab678e.js +20 -0
  11. package/dist/IconAtvGoKart-d1ad6a03.cjs +2 -0
  12. package/dist/IconAtvGolfCart-9b3569bc.cjs +2 -0
  13. package/dist/IconAtvGolfCart-c549f7f3.js +20 -0
  14. package/dist/IconAtvSandRail-d71aa55b.cjs +2 -0
  15. package/dist/IconAtvSandRail-e8913dd9.js +20 -0
  16. package/dist/IconAtvSideBySide-50377701.js +20 -0
  17. package/dist/IconAtvSideBySide-f734e90f.cjs +2 -0
  18. package/dist/IconAtvTrailer-062da3ab.js +20 -0
  19. package/dist/IconAtvTrailer-ee1d6ec1.cjs +2 -0
  20. package/dist/IconAutoRenew-00afcc33.js +16 -0
  21. package/dist/IconAutoRenew-bcd665a4.cjs +2 -0
  22. package/dist/IconBoatmartPwc-7a3c368a.js +20 -0
  23. package/dist/IconBoatmartPwc-9de80564.cjs +2 -0
  24. package/dist/IconBoatmartTrailer-68276601.js +20 -0
  25. package/dist/IconBoatmartTrailer-ff1f376f.cjs +2 -0
  26. package/dist/IconBolt-36fc8ef9.cjs +2 -0
  27. package/dist/IconBolt-83121ee2.js +16 -0
  28. package/dist/IconCallQuality-1edf4c35.js +16 -0
  29. package/dist/IconCallQuality-56ee01fb.cjs +2 -0
  30. package/dist/IconCarRental-7709e091.js +16 -0
  31. package/dist/IconCarRental-b0af42ff.cjs +2 -0
  32. package/dist/IconContract-0acea45b.cjs +2 -0
  33. package/dist/IconContract-289a7094.js +16 -0
  34. package/dist/IconCrash-8d91a8db.cjs +2 -0
  35. package/dist/IconCrash-d87f6517.js +16 -0
  36. package/dist/IconDashboardCustomize-5321091b.cjs +2 -0
  37. package/dist/IconDashboardCustomize-f74fde35.js +16 -0
  38. package/dist/IconDirectionsBoat-11aaf49c.cjs +2 -0
  39. package/dist/IconDirectionsBoat-4d41fb87.js +16 -0
  40. package/dist/IconDomain-05540c31.cjs +2 -0
  41. package/dist/IconDomain-377b91aa.js +16 -0
  42. package/dist/IconEngineering-a74e5efe.cjs +2 -0
  43. package/dist/IconEngineering-e18db558.js +16 -0
  44. package/dist/IconFlag-0243bbb9.cjs +2 -0
  45. package/dist/IconFlag-8bafa50c.js +16 -0
  46. package/dist/IconGears-a52f8ce9.js +16 -0
  47. package/dist/IconGears-c3b1ba71.cjs +2 -0
  48. package/dist/IconGlobeLocationPin-4b7fb00b.js +16 -0
  49. package/dist/IconGlobeLocationPin-b869a4e7.cjs +2 -0
  50. package/dist/IconHandyman-73c7c329.js +16 -0
  51. package/dist/IconHandyman-ffc0fafb.cjs +2 -0
  52. package/dist/IconInformation-790c598a.js +16 -0
  53. package/dist/IconInformation-be043a15.cjs +2 -0
  54. package/dist/IconMoneyBag-4a01a10a.js +16 -0
  55. package/dist/IconMoneyBag-a3d297f5.cjs +2 -0
  56. package/dist/IconPersonSearch-1ccccee1.js +16 -0
  57. package/dist/IconPersonSearch-b0c1a4e5.cjs +2 -0
  58. package/dist/IconPolicy-0a3a02bc.js +16 -0
  59. package/dist/IconPolicy-8f5ca682.cjs +2 -0
  60. package/dist/IconPower-bfe4f81a.js +16 -0
  61. package/dist/IconPower-d41e067d.cjs +2 -0
  62. package/dist/IconPriorityHigh-aae28a02.cjs +2 -0
  63. package/dist/IconPriorityHigh-ab1b4a95.js +16 -0
  64. package/dist/IconRequestQuote-e24db541.cjs +2 -0
  65. package/dist/IconRequestQuote-f6364b1e.js +16 -0
  66. package/dist/IconResetWrench-5b5c4f74.cjs +2 -0
  67. package/dist/IconResetWrench-8791a5a9.js +16 -0
  68. package/dist/IconRoad-3124bbd8.cjs +2 -0
  69. package/dist/IconRoad-efce130e.js +16 -0
  70. package/dist/IconRoundedCorner-53cb2cfc.cjs +2 -0
  71. package/dist/IconRoundedCorner-adbcfd09.js +16 -0
  72. package/dist/IconSailing-19762955.js +16 -0
  73. package/dist/IconSailing-fa136eea.cjs +2 -0
  74. package/dist/IconSchool-0bca17f9.cjs +2 -0
  75. package/dist/IconSchool-2f3ff8d7.js +16 -0
  76. package/dist/IconSensors-c4387bc9.js +16 -0
  77. package/dist/IconSensors-f35e7566.cjs +2 -0
  78. package/dist/IconSettings-32dd2125.js +16 -0
  79. package/dist/IconSettings-b8848783.cjs +2 -0
  80. package/dist/IconShieldCheck-0c47755d.js +16 -0
  81. package/dist/IconShieldCheck-b57fd628.cjs +2 -0
  82. package/dist/IconSummarize-69ab122a.js +16 -0
  83. package/dist/IconSummarize-f73dec0e.cjs +2 -0
  84. package/dist/IconSwapHoriz-2d9550c3.js +16 -0
  85. package/dist/IconSwapHoriz-4a33bd68.cjs +2 -0
  86. package/dist/IconVerified-04c12500.cjs +2 -0
  87. package/dist/IconVerified-a78449ea.js +16 -0
  88. package/dist/IconWarehouse-23085045.cjs +2 -0
  89. package/dist/IconWarehouse-764da944.js +16 -0
  90. package/dist/IconWorkspacePremium-bc3aeb0c.cjs +2 -0
  91. package/dist/IconWorkspacePremium-efd0a531.js +16 -0
  92. package/dist/IconWrench-6c52ef4f.js +16 -0
  93. package/dist/IconWrench-bd1d2907.cjs +2 -0
  94. package/dist/css/realm/aero.css +3 -3
  95. package/dist/css/realm/boatmart.css +1 -1
  96. package/dist/css/realm/cycle.css +1 -1
  97. package/dist/css/realm/equipment.css +1 -1
  98. package/dist/css/realm/pwc.css +1 -1
  99. package/dist/css/reset.css +7 -0
  100. package/dist/style.css +1 -1
  101. package/dist/tide-design-system.cjs +2 -2
  102. package/dist/tide-design-system.esm.d.ts +93 -27
  103. package/dist/tide-design-system.esm.js +869 -816
  104. package/dist/utilities/event.ts +4 -0
  105. package/dist/utilities/storybook.ts +4 -0
  106. package/dist/utilities/viewport.ts +44 -0
  107. package/index.ts +2 -4
  108. package/package.json +4 -1
  109. package/src/assets/css/realm/aero.css +3 -3
  110. package/src/assets/css/realm/boatmart.css +1 -1
  111. package/src/assets/css/realm/cycle.css +1 -1
  112. package/src/assets/css/realm/equipment.css +1 -1
  113. package/src/assets/css/realm/pwc.css +1 -1
  114. package/src/assets/css/reset.css +7 -0
  115. package/src/assets/svg/icons/IconAcute.svg +3 -0
  116. package/src/assets/svg/icons/IconAutoRenew.svg +3 -0
  117. package/src/assets/svg/icons/IconBolt.svg +3 -0
  118. package/src/assets/svg/icons/IconCallQuality.svg +3 -0
  119. package/src/assets/svg/icons/IconCarRental.svg +3 -0
  120. package/src/assets/svg/icons/IconContract.svg +3 -0
  121. package/src/assets/svg/icons/IconCrash.svg +3 -0
  122. package/src/assets/svg/icons/IconDashboardCustomize.svg +3 -0
  123. package/src/assets/svg/icons/IconDirectionsBoat.svg +3 -0
  124. package/src/assets/svg/icons/IconDomain.svg +3 -0
  125. package/src/assets/svg/icons/IconEngineering.svg +3 -0
  126. package/src/assets/svg/icons/IconFlag.svg +3 -0
  127. package/src/assets/svg/icons/IconGears.svg +3 -0
  128. package/src/assets/svg/icons/IconGlobeLocationPin.svg +3 -0
  129. package/src/assets/svg/icons/IconHandyman.svg +3 -0
  130. package/src/assets/svg/icons/IconInformation.svg +3 -0
  131. package/src/assets/svg/icons/IconMoneyBag.svg +3 -0
  132. package/src/assets/svg/icons/IconPersonSearch.svg +3 -0
  133. package/src/assets/svg/icons/IconPolicy.svg +3 -0
  134. package/src/assets/svg/icons/IconPower.svg +3 -0
  135. package/src/assets/svg/icons/IconPriorityHigh.svg +3 -0
  136. package/src/assets/svg/icons/IconRequestQuote.svg +3 -0
  137. package/src/assets/svg/icons/IconResetWrench.svg +3 -0
  138. package/src/assets/svg/icons/IconRoad.svg +3 -0
  139. package/src/assets/svg/icons/IconSailing.svg +3 -0
  140. package/src/assets/svg/icons/IconSchool.svg +3 -0
  141. package/src/assets/svg/icons/IconSensors.svg +3 -0
  142. package/src/assets/svg/icons/IconSettings.svg +3 -0
  143. package/src/assets/svg/icons/IconShieldCheck.svg +3 -0
  144. package/src/assets/svg/icons/IconSummarize.svg +3 -0
  145. package/src/assets/svg/icons/IconSwapHoriz.svg +3 -0
  146. package/src/assets/svg/icons/IconVerified.svg +3 -0
  147. package/src/assets/svg/icons/IconWarehouse.svg +3 -0
  148. package/src/assets/svg/icons/IconWorkspacePremium.svg +3 -0
  149. package/src/assets/svg/icons/IconWrench.svg +3 -0
  150. package/src/assets/svg/icons/realm/atv/IconAtvAtv.svg +3 -0
  151. package/src/assets/svg/icons/realm/atv/IconAtvDuneBuggy.svg +3 -0
  152. package/src/assets/svg/icons/realm/atv/IconAtvGoKart.svg +3 -0
  153. package/src/assets/svg/icons/realm/atv/IconAtvGolfCart.svg +3 -0
  154. package/src/assets/svg/icons/realm/atv/IconAtvSandRail.svg +3 -0
  155. package/src/assets/svg/icons/realm/atv/IconAtvSideBySide.svg +3 -0
  156. package/src/assets/svg/icons/realm/atv/IconAtvTrailer.svg +3 -0
  157. package/src/assets/svg/icons/realm/boatmart/IconBoatmartPwc.svg +3 -0
  158. package/src/assets/svg/icons/realm/boatmart/IconBoatmartTrailer.svg +3 -0
  159. package/src/components/TideCard.vue +3 -7
  160. package/src/components/TideInputTextarea.vue +10 -3
  161. package/src/components/TideModal.vue +164 -132
  162. package/src/components/TidePopover.vue +167 -0
  163. package/src/stories/TideAccordionItem.stories.ts +1 -0
  164. package/src/stories/TideButtonSegmented.stories.ts +1 -0
  165. package/src/stories/TideCard.stories.ts +1 -11
  166. package/src/stories/TideCarousel.stories.ts +1 -0
  167. package/src/stories/TideIcon.stories.ts +4 -1
  168. package/src/stories/TideModal.stories.ts +68 -6
  169. package/src/stories/TidePagination.stories.ts +1 -0
  170. package/src/stories/TidePopover.stories.ts +98 -0
  171. package/src/stories/TideSwitch.stories.ts +1 -0
  172. package/src/types/Card.ts +0 -7
  173. package/src/types/Icon.ts +50 -2
  174. package/src/utilities/event.ts +4 -0
  175. package/src/utilities/storybook.ts +4 -0
  176. package/src/utilities/viewport.ts +44 -0
  177. package/dist/IconAlignSpace-5d64a8e4.js +0 -16
  178. package/dist/IconAlignSpace-7ee811f8.cjs +0 -2
  179. package/dist/IconRoundedCorners-53cb2cfc.cjs +0 -2
  180. package/dist/IconRoundedCorners-e21c4321.js +0 -16
  181. /package/src/assets/svg/icons/{IconAlignSpace.svg → IconAlignSpaceEven.svg} +0 -0
  182. /package/src/assets/svg/icons/{IconRoundedCorners.svg → IconRoundedCorner.svg} +0 -0
@@ -2,17 +2,33 @@ import { action } from '@storybook/addon-actions';
2
2
 
3
3
  import TideButton from '@/components/TideButton.vue';
4
4
  import TideModal from '@/components/TideModal.vue';
5
- import { disabledArgType, doSomething, lineBreak, tab } from '@/utilities/storybook';
5
+ import {
6
+ argTypeBooleanUnrequired,
7
+ disabledArgType,
8
+ doSomething,
9
+ doSomethingElse,
10
+ lineBreak,
11
+ tab,
12
+ } from '@/utilities/storybook';
6
13
 
7
14
  import type { StoryContext } from '@storybook/vue3';
8
15
 
9
16
  const formatSnippet = (code: string, context: StoryContext) => {
10
17
  const { args } = context;
11
18
 
19
+ const argsWithValues: string[] = [`:is-open="${args.isOpen}"`];
12
20
  const slotContentIndentationFixed = (args.default as string).replace(/(<\/[^>]+>)$/, `${tab}$1`);
13
21
 
22
+ if (args.isBackButton !== undefined) argsWithValues.push(`:is-back-button="${args.isBackButton}"`);
23
+ if (args.isDismissible !== undefined) argsWithValues.push(`:is-dismissible="${args.isDismissible}"`);
24
+ if (args.title !== undefined) argsWithValues.push(`title="${args.title}"`);
25
+ if (args.width !== '') argsWithValues.push(`width="${args.width}"`);
26
+
27
+ if (args.handleBack !== undefined) argsWithValues.push(`@back="${args.handleBack}"`);
28
+ if (args.handleClose !== undefined) argsWithValues.push(`@close="${args.handleClose}"`);
29
+
14
30
  return (
15
- `<TideModal @close="handleClose">${lineBreak}` +
31
+ `<TideModal ${argsWithValues.join(' ')}>${lineBreak}` +
16
32
  `${tab}${slotContentIndentationFixed}${lineBreak}${lineBreak}` +
17
33
  `${tab}<template #footer>${lineBreak}` +
18
34
  `${tab}${tab}${args.footer}${lineBreak}` +
@@ -35,6 +51,20 @@ const render = (args: any, { updateArgs }: any) => ({
35
51
  components: { TideButton, TideModal },
36
52
  methods: {
37
53
  doSomething,
54
+ doSomethingElse,
55
+ handleBack: () => {
56
+ action('Back button pressed')({});
57
+
58
+ try {
59
+ const callback = eval(args.handleBack);
60
+
61
+ if (callback) {
62
+ callback();
63
+ }
64
+ } catch {
65
+ alert('Please specify a valid handler in the "back" control.');
66
+ }
67
+ },
38
68
  handleClose: () => {
39
69
  action('Modal closed')({});
40
70
  updateArgs({ ...args, isOpen: false });
@@ -49,11 +79,14 @@ const render = (args: any, { updateArgs }: any) => ({
49
79
  alert('Please specify a valid handler in the "close" control.');
50
80
  }
51
81
  },
82
+ handleOpenModalClick: () => {
83
+ updateArgs({ ...args, isOpen: true });
84
+ },
52
85
  },
53
86
  setup: () => ({ args }),
54
87
  template: `
55
- <p>Toggle "isOpen" prop below to preview.</p>
56
- <TideModal v-bind="args" @close="handleClose">
88
+ <TideButton label="Open Modal" @click="handleOpenModalClick" />
89
+ <TideModal v-bind="args" @close="handleClose" @back="handleBack">
57
90
  ${args.default}
58
91
  <template #footer>${args.footer}</template>
59
92
  </TideModal>`,
@@ -61,6 +94,7 @@ const render = (args: any, { updateArgs }: any) => ({
61
94
 
62
95
  export default {
63
96
  argTypes: {
97
+ back: disabledArgType,
64
98
  close: disabledArgType,
65
99
  default: {
66
100
  control: 'text',
@@ -78,15 +112,40 @@ export default {
78
112
  type: { summary: 'HTML' },
79
113
  },
80
114
  },
115
+ handleBack: {
116
+ control: 'text',
117
+ description: "JS function to execute when modal's back button is pressed",
118
+ name: 'back',
119
+ table: {
120
+ category: 'Events',
121
+ defaultValue: { summary: 'None' },
122
+ type: { summary: '() => void' },
123
+ },
124
+ },
81
125
  handleClose: {
82
126
  control: 'text',
83
127
  description: 'JS function to execute when modal is closed',
84
128
  name: 'close',
85
129
  table: {
130
+ category: 'Events',
86
131
  defaultValue: { summary: 'None' },
87
132
  type: { summary: '() => void' },
88
133
  },
89
134
  },
135
+ isBackButton: {
136
+ ...argTypeBooleanUnrequired,
137
+ description: 'Determines whether the back button is displayed',
138
+ table: {
139
+ defaultValue: { summary: 'False' },
140
+ },
141
+ },
142
+ isDismissible: {
143
+ ...argTypeBooleanUnrequired,
144
+ description: 'Determines whether the close button is displayed',
145
+ table: {
146
+ defaultValue: { summary: 'False' },
147
+ },
148
+ },
90
149
  isOpen: {
91
150
  description: 'Determines whether the Modal is displayed',
92
151
  table: {
@@ -109,10 +168,13 @@ export default {
109
168
  args: {
110
169
  default: `<div>${lineBreak}${tab}Default Slot Demo${lineBreak}</div>`,
111
170
  footer: '<TideButton label="Footer Slot Demo" />',
112
- handleClose: 'doSomething',
171
+ handleBack: 'doSomething',
172
+ handleClose: 'doSomethingElse',
173
+ isBackButton: undefined,
174
+ isDismissible: undefined,
113
175
  isOpen: false,
114
176
  title: 'Modal Demo',
115
- width: '400px',
177
+ width: '',
116
178
  },
117
179
  component: TideModal,
118
180
  parameters,
@@ -50,6 +50,7 @@ export default {
50
50
  handleChange: {
51
51
  ...change,
52
52
  table: {
53
+ category: 'Events',
53
54
  defaultValue: { summary: 'None' },
54
55
  type: { summary: '(pageIndex: number) => void' },
55
56
  },
@@ -0,0 +1,98 @@
1
+ import TideIcon from '@/components/TideIcon.vue';
2
+ import TidePopover from '@/components/TidePopover.vue';
3
+ import { ICON } from '@/types/Icon';
4
+ import { lineBreak, tab } from '@/utilities/storybook';
5
+
6
+ import type { StoryContext } from '@storybook/vue3';
7
+
8
+ const formatSnippet = (code: string, context: StoryContext) => {
9
+ const { args } = context;
10
+
11
+ const argsWithValues: string[] = [];
12
+
13
+ if (args.anchorId !== '') argsWithValues.push(`anchor-id="${args.anchorId}"`);
14
+ if (args.offset !== '') argsWithValues.push(`:offset="${args.offset}"`);
15
+
16
+ return (
17
+ `<TideIcon :icon="ICON.INFO" id="anchorDemo" />${lineBreak}${lineBreak}` +
18
+ `<TidePopover ${argsWithValues.join(' ')}>${lineBreak}` +
19
+ `${tab}${args.default}${lineBreak}` +
20
+ `</TidePopover>`
21
+ );
22
+ };
23
+
24
+ const parameters = {
25
+ docs: {
26
+ source: {
27
+ format: 'vue',
28
+ language: 'html',
29
+ transform: formatSnippet,
30
+ },
31
+ },
32
+ };
33
+
34
+ const render = (args: any) => ({
35
+ components: { TideIcon, TidePopover },
36
+ setup: () => {
37
+ if (args.offset === '') {
38
+ delete args.offset;
39
+ }
40
+
41
+ return { ICON, args };
42
+ },
43
+ template: `
44
+ <TideIcon :icon="ICON.INFO" id="anchorDemo" />
45
+
46
+ <TidePopover v-bind="args">
47
+ ${args.default}
48
+ </TidePopover>
49
+ `,
50
+ updated: () => {
51
+ if (args.offset === '') {
52
+ delete args.offset;
53
+ }
54
+
55
+ return { ICON, args };
56
+ },
57
+ });
58
+
59
+ export default {
60
+ argTypes: {
61
+ anchorId: {
62
+ control: 'text',
63
+ description: 'Determines the HTML node over which the Popover will appear',
64
+ table: {
65
+ defaultValue: { summary: 'None' },
66
+ type: { summary: 'string' },
67
+ },
68
+ },
69
+ default: {
70
+ control: 'text',
71
+ description: 'Popover content',
72
+ table: {
73
+ defaultValue: { summary: 'None' },
74
+ type: { summary: 'HTML' },
75
+ },
76
+ },
77
+ offset: {
78
+ control: 'text',
79
+ description: 'Determines spacing between Popover and anchor node',
80
+ table: {
81
+ defaultValue: { summary: '16' },
82
+ type: { summary: 'number' },
83
+ },
84
+ },
85
+ },
86
+ args: {
87
+ anchorId: 'anchorDemo',
88
+ default: '<span>Demo</span>',
89
+ offset: '',
90
+ },
91
+ component: TidePopover,
92
+ parameters,
93
+ render,
94
+ tags: ['autodocs'],
95
+ title: 'Basic Components/TidePopover',
96
+ };
97
+
98
+ export const Demo = {};
@@ -44,6 +44,7 @@ export default {
44
44
  handleChange: {
45
45
  ...change,
46
46
  table: {
47
+ category: 'Events',
47
48
  defaultValue: { summary: 'None' },
48
49
  type: { summary: '() => void' },
49
50
  },
package/src/types/Card.ts CHANGED
@@ -5,10 +5,3 @@ export const TYPE_CARD = {
5
5
  } as const;
6
6
 
7
7
  export type CardType = (typeof TYPE_CARD)[keyof typeof TYPE_CARD];
8
-
9
- export const POSITION_CARD_ICON = {
10
- LEFT: 'left',
11
- TOP: 'top',
12
- } as const;
13
-
14
- export type CardIconPosition = (typeof POSITION_CARD_ICON)[keyof typeof POSITION_CARD_ICON];
package/src/types/Icon.ts CHANGED
@@ -2,9 +2,10 @@ import type { RealmKey } from '@/types/Realm';
2
2
 
3
3
  export const ICON = {
4
4
  ACCOUNT_BALANCE: 'account-balance',
5
+ ACUTE: 'acute',
5
6
  ADD: 'add',
6
7
  AI_DESCRIPTION: 'ai-description',
7
- ALIGN_SPACE: 'align-space',
8
+ ALIGN_SPACE_EVEN: 'align-space-even',
8
9
  APPLE_PAY: 'apple-pay',
9
10
  ARROW_BACK: 'arrow-back',
10
11
  ARROW_CYCLE: 'arrow-cycle',
@@ -12,22 +13,32 @@ export const ICON = {
12
13
  ARROW_RIGHT: 'arrow-right',
13
14
  ASSIGNMENT: 'assignment',
14
15
  ATTACH_MONEY: 'attach-money',
16
+ AUTO_RENEW: 'auto-renew',
15
17
  AWARD_STAR: 'award-star',
16
18
  BED: 'bed',
19
+ BOLT: 'bolt',
17
20
  BOOKMARK: 'bookmark',
18
21
  BUNKHOUSE: 'bunkhouse',
19
22
  CALENDAR_MONTH: 'calendar-month',
20
23
  CALL: 'call',
24
+ CALL_QUALITY: 'call-quality',
25
+ CAR_RENTAL: 'car-rental',
21
26
  CHECK: 'check',
22
27
  CHEVRON_LEFT: 'chevron-left',
23
28
  CHEVRON_RIGHT: 'chevron-right',
24
29
  CLEAR: 'clear',
25
30
  CLOSE: 'close',
31
+ CONTRACT: 'contract',
32
+ CRASH: 'crash',
33
+ DASHBOARD_CUSTOMIZE: 'dashboard-customize',
26
34
  DELETE: 'delete',
27
35
  DIAMOND: 'diamond',
36
+ DIRECTIONS_BOAT: 'directions-boat',
37
+ DOMAIN: 'domain',
28
38
  DRAFT: 'draft',
29
39
  EDIT: 'edit',
30
40
  ENGINE: 'engine',
41
+ ENGINEERING: 'engineering',
31
42
  ERROR: 'error',
32
43
  EXPAND_CONTENT: 'expand-content',
33
44
  EXPAND_LESS: 'expand-less',
@@ -35,19 +46,24 @@ export const ICON = {
35
46
  FACEBOOK: 'facebook',
36
47
  FAVORITE: 'favorite',
37
48
  FAVORITE_FILLED: 'favorite-filled',
49
+ FLAG: 'flag',
38
50
  FORMAT_BOLD: 'format-bold',
39
51
  FORMAT_ITALIC: 'format-italic',
40
52
  FORMAT_LIST_BULLETED: 'format-list-bulleted',
41
53
  FORUM: 'forum',
42
54
  GAS: 'gas',
43
55
  GAVEL: 'gavel',
56
+ GEARS: 'gears',
57
+ GLOBE_LOCATION_PIN: 'globe-location-pin',
44
58
  GOOGLE: 'google',
45
59
  GOOGLE_PAY: 'google-pay',
46
60
  GRID: 'grid',
47
61
  HANDSHAKE: 'handshake',
62
+ HANDYMAN: 'handyman',
48
63
  HEIGHT: 'height',
49
64
  HELP: 'help',
50
65
  INFO: 'info',
66
+ INFORMATION: 'information',
51
67
  INSERT_TEXT: 'insert-text',
52
68
  INSTAGRAM: 'instagram',
53
69
  IOS_SHARE: 'ios-share',
@@ -58,6 +74,7 @@ export const ICON = {
58
74
  LOCK: 'lock',
59
75
  MAIL: 'mail',
60
76
  MENU: 'menu',
77
+ MONEY_BAG: 'money-bag',
61
78
  MORE_HORIZ: 'more-horiz',
62
79
  NOTIFICATIONS: 'notifications',
63
80
  ODOMETER: 'odometer',
@@ -65,22 +82,36 @@ export const ICON = {
65
82
  PALETTE: 'palette',
66
83
  PAYPAL: 'paypal',
67
84
  PERSON: 'person',
85
+ PERSON_SEARCH: 'person-search',
68
86
  PHOTO_CAMERA: 'photo-camera',
69
87
  PINTEREST: 'pinterest',
70
88
  PLAY_ARROW: 'play-arrow',
89
+ POLICY: 'policy',
90
+ POWER: 'power',
71
91
  POWER_OFF: 'power-off',
92
+ PRIORITY_HIGH: 'priority-high',
72
93
  REMOVE: 'remove',
73
- ROUNDED_CORNERS: 'rounded-corners',
94
+ REQUEST_QUOTE: 'request-quote',
95
+ RESET_WRENCH: 'reset-wrench',
96
+ ROAD: 'road',
97
+ ROUNDED_CORNER: 'rounded-corner',
74
98
  RULER: 'ruler',
99
+ SAILING: 'sailing',
100
+ SCHOOL: 'school',
75
101
  SEARCH: 'search',
76
102
  SEATING: 'seating',
77
103
  SELL: 'sell',
104
+ SENSORS: 'sensors',
105
+ SETTINGS: 'settings',
78
106
  SHARE: 'share',
107
+ SHIELD_CHECK: 'shield-check',
79
108
  SHOPPING_CART: 'shopping-cart',
80
109
  SLEEPS: 'sleeps',
81
110
  SMS: 'sms',
82
111
  SNOWFLAKE: 'snowflake',
83
112
  STAR: 'star',
113
+ SUMMARIZE: 'summarize',
114
+ SWAP_HORIZ: 'swap-horiz',
84
115
  SWAP_VERT: 'swap-vert',
85
116
  THREE_D_ROTATION: 'three-d-rotation',
86
117
  THUMB_UP: 'thumb-up',
@@ -89,19 +120,36 @@ export const ICON = {
89
120
  TUNE: 'tune',
90
121
  TWITTER: 'twitter',
91
122
  UMBRELLA: 'umbrella',
123
+ VERIFIED: 'verified',
92
124
  VIDEOCAM: 'videocam',
93
125
  VIEW_IN_AR: 'view-in-ar',
94
126
  VISIBILITY: 'visibility',
95
127
  VOLUME_OFF: 'volume-off',
96
128
  VOLUME_ON: 'volume-on',
129
+ WAREHOUSE: 'warehouse',
97
130
  WARNING: 'warning',
98
131
  WATER: 'water',
99
132
  WEIGHT: 'weight',
100
133
  WIDTH: 'width',
134
+ WORKSPACE_PREMIUM: 'workspace-premium',
135
+ WRENCH: 'wrench',
101
136
  YOUTUBE: 'youtube',
102
137
  } as const;
103
138
 
104
139
  export const ICON_REALM = {
140
+ ATV: {
141
+ ATV: 'atv-atv',
142
+ DUNE_BUGGY: 'atv-dune-buggy',
143
+ GOLF_CART: 'atv-golf-cart',
144
+ GO_KART: 'atv-go-kart',
145
+ SAND_RAIL: 'atv-sand-rail',
146
+ SIDE_BY_SIDE: 'atv-side-by-side',
147
+ TRAILER: 'atv-trailer',
148
+ },
149
+ BOATMART: {
150
+ PWC: 'boatmart-pwc',
151
+ TRAILER: 'boatmart-trailer',
152
+ },
105
153
  RV: {
106
154
  CLASS_A: 'rv-class-a',
107
155
  CLASS_B: 'rv-class-b',
@@ -0,0 +1,4 @@
1
+ export const isClickOutside = (event: MouseEvent, elements: HTMLElement | HTMLElement[]): boolean => {
2
+ const targets = Array.isArray(elements) ? elements : [elements];
3
+ return !targets.some((el) => el.contains(event.target as Node));
4
+ };
@@ -95,6 +95,10 @@ export const doSomething = () => {
95
95
  alert('Did something.');
96
96
  };
97
97
 
98
+ export const doSomethingElse = () => {
99
+ alert('Did something else.');
100
+ };
101
+
98
102
  // Flatten a nested constant into a simple constant.
99
103
  export const flatten = (input: Nested): KeyString => {
100
104
  const output: KeyString = {};
@@ -0,0 +1,44 @@
1
+ import { nextTick } from 'vue';
2
+
3
+ /**
4
+ * Directly modifies the `<body>` element to apply or remove scroll lock.
5
+ * When `false` is provided, it only unlocks scroll if there are no open
6
+ * HTML dialog elements.
7
+ */
8
+ export const setScrollLock = async (isLocked: boolean) => {
9
+ const BODY_LOCK_CLASS = 'body-scroll-lock';
10
+ const body = document.body;
11
+
12
+ if (isLocked) {
13
+ if (!body.dataset.scrollLockY) {
14
+ const scrollY = window.scrollY;
15
+ body.dataset.scrollLockY = scrollY.toString();
16
+ body.style.setProperty('--saved-scroll-y', `${scrollY}px`);
17
+ body.classList.add(BODY_LOCK_CLASS);
18
+ }
19
+ } else {
20
+ await nextTick();
21
+ if (!document.querySelector('dialog[open]')) {
22
+ const savedScrollY = parseInt(body.dataset.scrollLockY || '0');
23
+ body.classList.remove(BODY_LOCK_CLASS);
24
+ body.style.removeProperty('--saved-scroll-y');
25
+ window.scrollTo({
26
+ behavior: 'auto',
27
+ top: savedScrollY,
28
+ });
29
+ delete body.dataset.scrollLockY;
30
+ }
31
+ }
32
+ };
33
+
34
+ export const TOP_LAYER_ID = 'tideTopLayer';
35
+
36
+ export const initFauxTopLayer = () => {
37
+ let topLayer = document.getElementById(TOP_LAYER_ID);
38
+ if (!topLayer) {
39
+ topLayer = document.createElement('div');
40
+ topLayer.id = TOP_LAYER_ID;
41
+ document.body.appendChild(topLayer);
42
+ }
43
+ topLayer.style.isolation = 'isolate';
44
+ };
@@ -1,16 +0,0 @@
1
- import { openBlock as e, createElementBlock as t, createElementVNode as o } from "vue";
2
- const n = {
3
- xmlns: "http://www.w3.org/2000/svg",
4
- viewBox: "0 0 24 24"
5
- }, c = /* @__PURE__ */ o("path", { d: "M2 4V2h20v2H2Zm0 18v-2h20v2H2Zm5-12V7h10v3H7Zm0 7v-3h10v3H7Z" }, null, -1), r = [
6
- c
7
- ];
8
- function s(h, l) {
9
- return e(), t("svg", n, r);
10
- }
11
- const d = { render: s };
12
- export {
13
- d as default,
14
- s as render
15
- };
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWNvbkFsaWduU3BhY2UtNWQ2NGE4ZTQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3NldHMvc3ZnL2ljb25zL0ljb25BbGlnblNwYWNlLnN2ZyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbn1cbmNvbnN0IF9ob2lzdGVkXzIgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0yIDRWMmgyMHYySDJabTAgMTh2LTJoMjB2MkgyWm01LTEyVjdoMTB2M0g3Wm0wIDd2LTNoMTB2M0g3WlwiIH0sIG51bGwsIC0xKVxuY29uc3QgX2hvaXN0ZWRfMyA9IFtcbiAgX2hvaXN0ZWRfMlxuXVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSkge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8xLCBfaG9pc3RlZF8zKSlcbn1cbmV4cG9ydCBkZWZhdWx0IHsgcmVuZGVyOiByZW5kZXIgfSJdLCJuYW1lcyI6WyJfaG9pc3RlZF8xIiwiX2hvaXN0ZWRfMiIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF8zIiwicmVuZGVyIiwiX2N0eCIsIl9jYWNoZSIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwiSWNvbkFsaWduU3BhY2UiXSwibWFwcGluZ3MiOiI7QUFFQSxNQUFNQSxJQUFhO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUNYLEdBQ01DLElBQTBCQyxnQkFBQUEsRUFBb0IsUUFBUSxFQUFFLEdBQUcsa0VBQWtFLE1BQU0sRUFBRSxHQUNySUMsSUFBYTtBQUFBLEVBQ2pCRjtBQUNGO0FBRU8sU0FBU0csRUFBT0MsR0FBTUMsR0FBUTtBQUNuQyxTQUFRQyxFQUFZLEdBQUVDLEVBQW9CLE9BQU9SLEdBQVlHLENBQVU7QUFDekU7QUFDQSxNQUFlTSxJQUFBLEVBQUUsUUFBUUwsRUFBTTsifQ==
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),n={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},o=e.createElementVNode("path",{d:"M2 4V2h20v2H2Zm0 18v-2h20v2H2Zm5-12V7h10v3H7Zm0 7v-3h10v3H7Z"},null,-1),c=[o];function t(s,l){return e.openBlock(),e.createElementBlock("svg",n,c)}const r={render:t};exports.default=r;exports.render=t;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWNvbkFsaWduU3BhY2UtN2VlODExZjguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvYXNzZXRzL3N2Zy9pY29ucy9JY29uQWxpZ25TcGFjZS5zdmciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jayB9IGZyb20gXCJ2dWVcIlxuXG5jb25zdCBfaG9pc3RlZF8xID0ge1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG59XG5jb25zdCBfaG9pc3RlZF8yID0gLyojX19QVVJFX18qL19jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHsgZDogXCJNMiA0VjJoMjB2MkgyWm0wIDE4di0yaDIwdjJIMlptNS0xMlY3aDEwdjNIN1ptMCA3di0zaDEwdjNIN1pcIiB9LCBudWxsLCAtMSlcbmNvbnN0IF9ob2lzdGVkXzMgPSBbXG4gIF9ob2lzdGVkXzJcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUpIHtcbiAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwgX2hvaXN0ZWRfMSwgX2hvaXN0ZWRfMykpXG59XG5leHBvcnQgZGVmYXVsdCB7IHJlbmRlcjogcmVuZGVyIH0iXSwibmFtZXMiOlsiX2hvaXN0ZWRfMSIsIl9ob2lzdGVkXzIiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfMyIsInJlbmRlciIsIl9jdHgiLCJfY2FjaGUiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIkljb25BbGlnblNwYWNlIl0sIm1hcHBpbmdzIjoidUdBRU1BLEVBQWEsQ0FDakIsTUFBTyw2QkFDUCxRQUFTLFdBQ1gsRUFDTUMsRUFBMEJDLEVBQUFBLG1CQUFvQixPQUFRLENBQUUsRUFBRyxnRUFBa0UsS0FBTSxFQUFFLEVBQ3JJQyxFQUFhLENBQ2pCRixDQUNGLEVBRU8sU0FBU0csRUFBT0MsRUFBTUMsRUFBUSxDQUNuQyxPQUFRQyxFQUFBQSxVQUFZLEVBQUVDLEVBQW1CLG1CQUFDLE1BQU9SLEVBQVlHLENBQVUsQ0FDekUsQ0FDQSxNQUFlTSxFQUFBLENBQUUsT0FBUUwsQ0FBTSJ9
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),v={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},h=e.createElementVNode("path",{d:"M3 21v-2h2v2H3Zm0-4v-2h2v2H3Zm0-4v-2h2v2H3Zm0-4V7h2v2H3Zm0-4V3h2v2H3Zm4 16v-2h2v2H7ZM7 5V3h2v2H7Zm4 16v-2h2v2h-2Zm4 0v-2h2v2h-2Zm4 0v-2h2v2h-2Zm0-4v-2h2v2h-2Zm2-4h-2V8c0-.833-.292-1.542-.875-2.125A2.893 2.893 0 0 0 16 5h-5V3h5c1.383 0 2.563.487 3.538 1.463C20.512 5.437 21 6.617 21 8v5Z"},null,-1),o=[h];function t(r,c){return e.openBlock(),e.createElementBlock("svg",v,o)}const n={render:t};exports.default=n;exports.render=t;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWNvblJvdW5kZWRDb3JuZXJzLTUzY2IyY2ZjLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL2Fzc2V0cy9zdmcvaWNvbnMvSWNvblJvdW5kZWRDb3JuZXJzLnN2ZyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbn1cbmNvbnN0IF9ob2lzdGVkXzIgPSAvKiNfX1BVUkVfXyovX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwgeyBkOiBcIk0zIDIxdi0yaDJ2MkgzWm0wLTR2LTJoMnYySDNabTAtNHYtMmgydjJIM1ptMC00VjdoMnYySDNabTAtNFYzaDJ2MkgzWm00IDE2di0yaDJ2Mkg3Wk03IDVWM2gydjJIN1ptNCAxNnYtMmgydjJoLTJabTQgMHYtMmgydjJoLTJabTQgMHYtMmgydjJoLTJabTAtNHYtMmgydjJoLTJabTItNGgtMlY4YzAtLjgzMy0uMjkyLTEuNTQyLS44NzUtMi4xMjVBMi44OTMgMi44OTMgMCAwIDAgMTYgNWgtNVYzaDVjMS4zODMgMCAyLjU2My40ODcgMy41MzggMS40NjNDMjAuNTEyIDUuNDM3IDIxIDYuNjE3IDIxIDh2NVpcIiB9LCBudWxsLCAtMSlcbmNvbnN0IF9ob2lzdGVkXzMgPSBbXG4gIF9ob2lzdGVkXzJcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihfY3R4LCBfY2FjaGUpIHtcbiAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwgX2hvaXN0ZWRfMSwgX2hvaXN0ZWRfMykpXG59XG5leHBvcnQgZGVmYXVsdCB7IHJlbmRlcjogcmVuZGVyIH0iXSwibmFtZXMiOlsiX2hvaXN0ZWRfMSIsIl9ob2lzdGVkXzIiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfMyIsInJlbmRlciIsIl9jdHgiLCJfY2FjaGUiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIkljb25Sb3VuZGVkQ29ybmVycyJdLCJtYXBwaW5ncyI6InVHQUVNQSxFQUFhLENBQ2pCLE1BQU8sNkJBQ1AsUUFBUyxXQUNYLEVBQ01DLEVBQTBCQyxFQUFBQSxtQkFBb0IsT0FBUSxDQUFFLEVBQUcsa1NBQW9TLEtBQU0sRUFBRSxFQUN2V0MsRUFBYSxDQUNqQkYsQ0FDRixFQUVPLFNBQVNHLEVBQU9DLEVBQU1DLEVBQVEsQ0FDbkMsT0FBUUMsRUFBQUEsVUFBWSxFQUFFQyxFQUFtQixtQkFBQyxNQUFPUixFQUFZRyxDQUFVLENBQ3pFLENBQ0EsTUFBZU0sRUFBQSxDQUFFLE9BQVFMLENBQU0ifQ==
@@ -1,16 +0,0 @@
1
- import { openBlock as e, createElementBlock as h, createElementVNode as v } from "vue";
2
- const o = {
3
- xmlns: "http://www.w3.org/2000/svg",
4
- viewBox: "0 0 24 24"
5
- }, t = /* @__PURE__ */ v("path", { d: "M3 21v-2h2v2H3Zm0-4v-2h2v2H3Zm0-4v-2h2v2H3Zm0-4V7h2v2H3Zm0-4V3h2v2H3Zm4 16v-2h2v2H7ZM7 5V3h2v2H7Zm4 16v-2h2v2h-2Zm4 0v-2h2v2h-2Zm4 0v-2h2v2h-2Zm0-4v-2h2v2h-2Zm2-4h-2V8c0-.833-.292-1.542-.875-2.125A2.893 2.893 0 0 0 16 5h-5V3h5c1.383 0 2.563.487 3.538 1.463C20.512 5.437 21 6.617 21 8v5Z" }, null, -1), n = [
6
- t
7
- ];
8
- function c(m, r) {
9
- return e(), h("svg", o, n);
10
- }
11
- const Z = { render: c };
12
- export {
13
- Z as default,
14
- c as render
15
- };
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWNvblJvdW5kZWRDb3JuZXJzLWUyMWM0MzIxLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYXNzZXRzL3N2Zy9pY29ucy9JY29uUm91bmRlZENvcm5lcnMuc3ZnIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxufVxuY29uc3QgX2hvaXN0ZWRfMiA9IC8qI19fUFVSRV9fKi9fY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7IGQ6IFwiTTMgMjF2LTJoMnYySDNabTAtNHYtMmgydjJIM1ptMC00di0yaDJ2MkgzWm0wLTRWN2gydjJIM1ptMC00VjNoMnYySDNabTQgMTZ2LTJoMnYySDdaTTcgNVYzaDJ2Mkg3Wm00IDE2di0yaDJ2MmgtMlptNCAwdi0yaDJ2MmgtMlptNCAwdi0yaDJ2MmgtMlptMC00di0yaDJ2MmgtMlptMi00aC0yVjhjMC0uODMzLS4yOTItMS41NDItLjg3NS0yLjEyNUEyLjg5MyAyLjg5MyAwIDAgMCAxNiA1aC01VjNoNWMxLjM4MyAwIDIuNTYzLjQ4NyAzLjUzOCAxLjQ2M0MyMC41MTIgNS40MzcgMjEgNi42MTcgMjEgOHY1WlwiIH0sIG51bGwsIC0xKVxuY29uc3QgX2hvaXN0ZWRfMyA9IFtcbiAgX2hvaXN0ZWRfMlxuXVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHgsIF9jYWNoZSkge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8xLCBfaG9pc3RlZF8zKSlcbn1cbmV4cG9ydCBkZWZhdWx0IHsgcmVuZGVyOiByZW5kZXIgfSJdLCJuYW1lcyI6WyJfaG9pc3RlZF8xIiwiX2hvaXN0ZWRfMiIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF8zIiwicmVuZGVyIiwiX2N0eCIsIl9jYWNoZSIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwiSWNvblJvdW5kZWRDb3JuZXJzIl0sIm1hcHBpbmdzIjoiO0FBRUEsTUFBTUEsSUFBYTtBQUFBLEVBQ2pCLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFDWCxHQUNNQyxJQUEwQkMsZ0JBQUFBLEVBQW9CLFFBQVEsRUFBRSxHQUFHLG9TQUFvUyxNQUFNLEVBQUUsR0FDdldDLElBQWE7QUFBQSxFQUNqQkY7QUFDRjtBQUVPLFNBQVNHLEVBQU9DLEdBQU1DLEdBQVE7QUFDbkMsU0FBUUMsRUFBWSxHQUFFQyxFQUFvQixPQUFPUixHQUFZRyxDQUFVO0FBQ3pFO0FBQ0EsTUFBZU0sSUFBQSxFQUFFLFFBQVFMLEVBQU07In0=