@hyvor/design 1.1.25-beta-org-20 → 2.0.0

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 (56) hide show
  1. package/README.md +9 -0
  2. package/dist/cloud/HyvorBar/BarProducts/BarProducts.svelte +1 -4
  3. package/dist/cloud/HyvorBar/BarUpdatesList.svelte +1 -3
  4. package/dist/cloud/HyvorBar/HyvorBar.svelte +0 -2
  5. package/dist/cloud/HyvorBar/bar.d.ts +1 -1
  6. package/dist/cloud/OrganizationMembers/OrganizationMembersSearch.svelte +1 -4
  7. package/dist/cloud/ResourceCreator/Accordian.svelte +2 -4
  8. package/dist/cloud/index.d.ts +1 -0
  9. package/dist/cloud/index.js +1 -0
  10. package/dist/components/Accordion/Accordion.svelte +134 -134
  11. package/dist/components/Button/Button.svelte +2 -12
  12. package/dist/components/CodeBlock/CodeBlock.svelte +45 -28
  13. package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +2 -3
  14. package/dist/components/CodeBlock/TabbedCodeBlock.svelte +60 -64
  15. package/dist/components/CodeBlock/TabbedCodeBlock.svelte.d.ts +1 -1
  16. package/dist/components/CodeBlock/getCode.d.ts +3 -1
  17. package/dist/components/CodeBlock/getCode.js +33 -50
  18. package/dist/components/ColorPicker/ColorPicker.svelte +1 -1
  19. package/dist/components/Dark/DarkProvider.svelte +1 -1
  20. package/dist/components/DetailCard/DetailCard.svelte +43 -46
  21. package/dist/components/DetailCard/DetailCard.svelte.d.ts +1 -1
  22. package/dist/components/DetailCard/DetailCards.svelte +13 -16
  23. package/dist/components/DetailCard/DetailCards.svelte.d.ts +1 -1
  24. package/dist/components/Dropdown/DropdownContent.svelte +1 -2
  25. package/dist/components/EmojiPicker/EmojiSelector.svelte +3 -14
  26. package/dist/components/EmojiPicker/emojidata.js +3 -3
  27. package/dist/components/FileUploader/Preview/Preview.svelte +1 -1
  28. package/dist/components/FileUploader/TabUpload/TabUpload.svelte +2 -4
  29. package/dist/components/FileUploader/file-uploader.js +5 -10
  30. package/dist/components/FileUploader/helpers.js +1 -1
  31. package/dist/components/IconButton/IconButton.svelte +2 -10
  32. package/dist/components/Internationalization/LanguageToggle.svelte +2 -2
  33. package/dist/components/Internationalization/T.svelte +2 -9
  34. package/dist/components/Internationalization/i18n.js +3 -1
  35. package/dist/components/Modal/Modal.svelte +16 -12
  36. package/dist/components/TextInput/TextInput.svelte +29 -52
  37. package/dist/components/TextInput/TextInput.svelte.d.ts +5 -3
  38. package/dist/components/Textarea/Textarea.svelte +84 -98
  39. package/dist/index.css +4 -4
  40. package/dist/legacy.js +2 -2
  41. package/dist/marketing/Affiliate/Affiliate.svelte +53 -51
  42. package/dist/marketing/Container/Container.svelte +4 -5
  43. package/dist/marketing/Docs/Nav/Nav.svelte +1 -2
  44. package/dist/marketing/Footer/Footer.svelte +2 -2
  45. package/dist/marketing/Header/Header.svelte +131 -140
  46. package/dist/marketing/Header/Header.svelte.d.ts +3 -1
  47. package/dist/marketing/Header/HeaderNotification.svelte +64 -0
  48. package/dist/marketing/Header/HeaderNotification.svelte.d.ts +7 -0
  49. package/dist/marketing/cloud.d.ts +1 -0
  50. package/dist/marketing/cloud.js +15 -0
  51. package/dist/marketing/track/track.d.ts +0 -1
  52. package/dist/marketing/track/track.js +3 -6
  53. package/dist/variables.scss +1 -1
  54. package/package.json +24 -22
  55. package/dist/components/CodeBlock/hljs.scss +0 -228
  56. package/dist/components/CodeBlock/prism.scss +0 -375
package/README.md CHANGED
@@ -14,4 +14,13 @@ docker compose up
14
14
 
15
15
  # visit https://design.hyvor.localhost
16
16
  # API calls will work as long as you set instance to https://hyvor.localhost
17
+ ## Commands
18
+ ```
19
+
20
+ ```bash
21
+ # fix prettier
22
+ npm run format
23
+
24
+ # fix prettier via Docker (recommended for compatibility issues with CI)
25
+ docker compose run design npm run format
17
26
  ```
@@ -43,10 +43,7 @@
43
43
  <product.logo size={20} />
44
44
  {:else}
45
45
  <img
46
- src={instance +
47
- '/api/public/logo/' +
48
- product.component +
49
- '.svg'}
46
+ src={instance + '/api/public/logo/' + product.component + '.svg'}
50
47
  alt={product.name}
51
48
  width="20"
52
49
  height="20"
@@ -89,9 +89,7 @@
89
89
  {update.content}
90
90
  </div>
91
91
  <div class="date">
92
- {new Intl.DateTimeFormat('en-US').format(
93
- new Date(update.created_at * 1000)
94
- )}
92
+ {new Intl.DateTimeFormat('en-US').format(new Date(update.created_at * 1000))}
95
93
  </div>
96
94
  </div>
97
95
  {/snippet}
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import BarUser from './BarUser.svelte';
3
- import { onMount } from 'svelte';
4
3
  import BarProducts from './BarProducts/BarProducts.svelte';
5
4
  import BarSupport from './BarSupport.svelte';
6
5
  import { initBar, type BarConfig } from './bar.js';
@@ -11,7 +10,6 @@
11
10
  import BarOrganization from './Organization/BarOrganization.svelte';
12
11
  import { cloudContextId, getCloudContext } from '../CloudContext/cloudContext.svelte.js';
13
12
  import { PRODUCTS } from './BarProducts/products.js';
14
- import { get } from 'svelte/store';
15
13
 
16
14
  interface Props {
17
15
  config?: Partial<BarConfig>;
@@ -12,7 +12,7 @@ export interface BarUpdate {
12
12
  content: string;
13
13
  url?: string;
14
14
  }
15
- export type BarUpdateType = 'company' | 'core' | 'talk' | 'blogs' | 'fortguard';
15
+ export type BarUpdateType = 'company' | 'core' | 'talk' | 'blogs' | 'post' | 'relay' | 'fortguard';
16
16
  export declare const barUnreadUpdates: import("svelte/store").Writable<number>;
17
17
  export declare const barHasFailedInvoices: import("svelte/store").Writable<boolean>;
18
18
  export declare function initBar(): Promise<void>;
@@ -2,10 +2,7 @@
2
2
  import { clickOutside, IconMessage, toast } from '../../components/index.js';
3
3
  import Loader from '../../components/Loader/Loader.svelte';
4
4
  import TextInput from '../../components/TextInput/TextInput.svelte';
5
- import {
6
- getCloudContext,
7
- type OrganizationMember
8
- } from '../CloudContext/cloudContext.svelte.js';
5
+ import { getCloudContext, type OrganizationMember } from '../CloudContext/cloudContext.svelte.js';
9
6
  import { searchMembers } from './members.js';
10
7
  import { dropdownSlide } from '../../components/Dropdown/dropdownSlide.js';
11
8
  import UserPicture from '../@components/UserPicture.svelte';
@@ -94,10 +94,8 @@
94
94
  {#if loading}
95
95
  <Loader size="small" />
96
96
  {/if}
97
- <Button
98
- size="large"
99
- onclick={onButtonClick}
100
- disabled={loading || buttonDisabled}>{buttonText}</Button
97
+ <Button size="large" onclick={onButtonClick} disabled={loading || buttonDisabled}
98
+ >{buttonText}</Button
101
99
  >
102
100
  </div>
103
101
  </div>
@@ -3,3 +3,4 @@ export { getCloudContext, setCloudContext, type CloudContext as CloudContextType
3
3
  export { default as HyvorBar } from './HyvorBar/HyvorBar.svelte';
4
4
  export { bar as hyvorBar } from './HyvorBar/bar.js';
5
5
  export { default as ResourceCreator } from './ResourceCreator/ResourceCreator.svelte';
6
+ export { default as OrganizationMemberSearch } from './OrganizationMembers/OrganizationMembersSearch.svelte';
@@ -3,3 +3,4 @@ export { getCloudContext, setCloudContext } from './CloudContext/cloudContext.sv
3
3
  export { default as HyvorBar } from './HyvorBar/HyvorBar.svelte';
4
4
  export { bar as hyvorBar } from './HyvorBar/bar.js';
5
5
  export { default as ResourceCreator } from './ResourceCreator/ResourceCreator.svelte';
6
+ export { default as OrganizationMemberSearch } from './OrganizationMembers/OrganizationMembersSearch.svelte';
@@ -1,143 +1,143 @@
1
1
  <script lang="ts">
2
- import type { Component, Snippet } from 'svelte';
3
- import IconCaretDownFill from '@hyvor/icons/IconCaretDownFill';
4
-
5
- interface Props {
6
- title: string;
7
- children?: Snippet;
8
- open?: boolean;
9
- icon?: Component;
10
- headerColor?: string;
11
- textColor?: string;
12
- openedColor?: string;
13
- borderColor?: string;
14
- topBorderColor?: string;
15
- }
16
-
17
- let {
18
- title,
19
- children,
20
- open = $bindable(false),
21
- icon,
22
- headerColor,
23
- textColor,
24
- openedColor,
25
- borderColor,
26
- topBorderColor
27
- }: Props = $props();
28
-
29
- const Icon = icon;
30
-
31
- function handleClick() {
32
- open = !open;
33
- }
2
+ import type { Component, Snippet } from 'svelte';
3
+ import IconCaretDownFill from '@hyvor/icons/IconCaretDownFill';
4
+
5
+ interface Props {
6
+ title: string;
7
+ children?: Snippet;
8
+ open?: boolean;
9
+ icon?: Component;
10
+ headerColor?: string;
11
+ textColor?: string;
12
+ openedColor?: string;
13
+ borderColor?: string;
14
+ topBorderColor?: string;
15
+ }
16
+
17
+ let {
18
+ title,
19
+ children,
20
+ open = $bindable(false),
21
+ icon,
22
+ headerColor,
23
+ textColor,
24
+ openedColor,
25
+ borderColor,
26
+ topBorderColor
27
+ }: Props = $props();
28
+
29
+ const Icon = icon;
30
+
31
+ function handleClick() {
32
+ open = !open;
33
+ }
34
34
  </script>
35
35
 
36
36
  <div
37
- class="accordion-item"
38
- style:--custom-border={borderColor}
39
- style:--custom-text={textColor}
40
- style:--custom-opened={openedColor}
41
- style:--custom-header={headerColor}
37
+ class="accordion-item"
38
+ style:--custom-border={borderColor}
39
+ style:--custom-text={textColor}
40
+ style:--custom-opened={openedColor}
41
+ style:--custom-header={headerColor}
42
42
  >
43
- <button class="accordion-header" class:open onclick={handleClick}>
44
- {#if icon}
45
- <span class="icon">
46
- <Icon size={20} />
47
- </span>
48
- {/if}
49
- <span class="title">{title}</span>
50
- <span class="chevron" class:rotated={open}>
51
- <IconCaretDownFill />
52
- </span>
53
- </button>
54
-
55
- <div class="accordion-content"
56
- class:show={open}>
57
- <div class="content-text"
58
- style:--custom-top-border={topBorderColor}
59
- style:--custom-header={headerColor}
60
- >
61
- {@render children?.()}
62
- </div>
63
- </div>
43
+ <button class="accordion-header" class:open onclick={handleClick}>
44
+ {#if icon}
45
+ <span class="icon">
46
+ <Icon size={20} />
47
+ </span>
48
+ {/if}
49
+ <span class="title">{title}</span>
50
+ <span class="chevron" class:rotated={open}>
51
+ <IconCaretDownFill />
52
+ </span>
53
+ </button>
54
+
55
+ <div class="accordion-content" class:show={open}>
56
+ <div
57
+ class="content-text"
58
+ style:--custom-top-border={topBorderColor}
59
+ style:--custom-header={headerColor}
60
+ >
61
+ {@render children?.()}
62
+ </div>
63
+ </div>
64
64
  </div>
65
65
 
66
66
  <style>
67
- .accordion-item {
68
- overflow: hidden;
69
- border-radius: 20px;
70
- border: 1px solid var(--custom-border, var(--border));
71
- }
72
-
73
- .accordion-header {
74
- width: 100%;
75
- padding: 14px 20px;
76
- background: var(--custom-header, none);
77
- border: none;
78
- display: flex;
79
- justify-content: space-between;
80
- align-items: center;
81
- cursor: pointer;
82
- font-size: 16px;
83
- border-radius: 20px;
84
- color: var(--custom-text, var(--text));
85
- }
86
-
87
- .accordion-header.open {
88
- border-radius: 20px 20px 0 0;
89
- background-color: var(--custom-opened, var(--hover));
90
- }
91
-
92
- .title {
93
- font-weight: 500;
94
- text-align: left;
95
- }
96
-
97
- .chevron {
98
- display: flex;
99
- align-items: center;
100
- transition: transform 0.3s ease;
101
- color: var(--custom-text, var(--text));
102
- }
103
-
104
- .chevron.rotated {
105
- transform: rotate(180deg);
106
- }
107
-
108
- .accordion-content {
109
- height: 0;
110
- overflow: hidden;
111
- }
112
-
113
- .accordion-content.show {
114
- height: auto;
115
- overflow: visible;
116
- animation: slideDown 0.3s ease-out;
117
- }
118
-
119
- .content-text {
120
- padding: 20px;
121
- color: var(--custom-text, var(--text));
122
- line-height: 1.6;
123
- border-top: 1px solid var(--custom-top-border, var(--border));
124
- background: var(--custom-header, none);
125
- }
126
-
127
- .icon {
128
- display: inline-block;
129
- margin-right: 10px;
130
- vertical-align: middle;
131
- }
132
-
133
- @keyframes slideDown {
134
- from {
135
- opacity: 0;
136
- transform: translateY(-10px);
137
- }
138
- to {
139
- opacity: 1;
140
- transform: translateY(0);
141
- }
142
- }
67
+ .accordion-item {
68
+ overflow: hidden;
69
+ border-radius: 20px;
70
+ border: 1px solid var(--custom-border, var(--border));
71
+ }
72
+
73
+ .accordion-header {
74
+ width: 100%;
75
+ padding: 14px 20px;
76
+ background: var(--custom-header, none);
77
+ border: none;
78
+ display: flex;
79
+ justify-content: space-between;
80
+ align-items: center;
81
+ cursor: pointer;
82
+ font-size: 16px;
83
+ border-radius: 20px;
84
+ color: var(--custom-text, var(--text));
85
+ }
86
+
87
+ .accordion-header.open {
88
+ border-radius: 20px 20px 0 0;
89
+ background-color: var(--custom-opened, var(--hover));
90
+ }
91
+
92
+ .title {
93
+ font-weight: 500;
94
+ text-align: left;
95
+ }
96
+
97
+ .chevron {
98
+ display: flex;
99
+ align-items: center;
100
+ transition: transform 0.3s ease;
101
+ color: var(--custom-text, var(--text));
102
+ }
103
+
104
+ .chevron.rotated {
105
+ transform: rotate(180deg);
106
+ }
107
+
108
+ .accordion-content {
109
+ height: 0;
110
+ overflow: hidden;
111
+ }
112
+
113
+ .accordion-content.show {
114
+ height: auto;
115
+ overflow: visible;
116
+ animation: slideDown 0.3s ease-out;
117
+ }
118
+
119
+ .content-text {
120
+ padding: 20px;
121
+ color: var(--custom-text, var(--text));
122
+ line-height: 1.6;
123
+ border-top: 1px solid var(--custom-top-border, var(--border));
124
+ background: var(--custom-header, none);
125
+ }
126
+
127
+ .icon {
128
+ display: inline-block;
129
+ margin-right: 10px;
130
+ vertical-align: middle;
131
+ }
132
+
133
+ @keyframes slideDown {
134
+ from {
135
+ opacity: 0;
136
+ transform: translateY(-10px);
137
+ }
138
+ to {
139
+ opacity: 1;
140
+ transform: translateY(0);
141
+ }
142
+ }
143
143
  </style>
@@ -62,7 +62,6 @@
62
62
  this={as}
63
63
  class="button {size} {color} {variant} {align}"
64
64
  class:block
65
-
66
65
  onkeyup={legacyHandlers(onkeyup, bubble('keyup'))}
67
66
  onkeydown={legacyHandlers(onkeydown, bubble('keydown'))}
68
67
  onkeypress={legacyHandlers(onkeypress, bubble('keypress'))}
@@ -73,7 +72,6 @@
73
72
  onmouseenter={legacyHandlers(onmouseenter, bubble('mouseenter'))}
74
73
  onmouseleave={legacyHandlers(onmouseleave, bubble('mouseleave'))}
75
74
  onchange={legacyHandlers(onchange, bubble('change'))}
76
-
77
75
  role="button"
78
76
  tabindex="0"
79
77
  bind:this={button}
@@ -282,11 +280,7 @@
282
280
  background-color: var(--orange-light);
283
281
  color: var(--orange-dark);
284
282
  transition: 0.2s box-shadow;
285
- --local-hover-shadow-color: color-mix(
286
- in srgb,
287
- var(--orange-light) 40%,
288
- transparent
289
- );
283
+ --local-hover-shadow-color: color-mix(in srgb, var(--orange-light) 40%, transparent);
290
284
  }
291
285
  .button.outline {
292
286
  border: 1px solid;
@@ -341,11 +335,7 @@
341
335
  border-color: var(--accent);
342
336
  color: var(--accent);
343
337
  transition: 0.2s box-shadow;
344
- --local-hover-shadow-color: color-mix(
345
- in srgb,
346
- var(--accent-light) 40%,
347
- transparent
348
- );
338
+ --local-hover-shadow-color: color-mix(in srgb, var(--accent-light) 40%, transparent);
349
339
  }
350
340
  .button.outline-fill.gray {
351
341
  background-color: var(--gray-light);
@@ -1,39 +1,52 @@
1
1
  <script lang="ts">
2
- //import './prism.scss';
3
- import './hljs.scss';
2
+ import Button from '../Button/Button.svelte';
3
+ import IconCopy from '@hyvor/icons/IconCopy';
4
+ import toast from '../Toast/toast.js';
5
+ import { getCode, sanitizeLines, type Language } from './getCode.js';
4
6
 
5
- type InputLanguage = 'html' | 'css' | 'js' | 'ts' | 'yaml' | 'json' | 'svelte' | 'jsx' | 'php';
6
-
7
- const languagesMap: Partial<Record<InputLanguage, Language>> = {
8
- svelte: 'html',
9
- jsx: 'js'
10
- };
11
-
12
- type Language = any;
13
-
14
- // import getCode, { type Language } from './getCode.js';
15
7
  interface Props {
16
8
  code: string;
17
- language?: InputLanguage | null;
9
+ language?: Language | null;
18
10
  }
19
11
 
20
12
  let { code, language = 'html' }: Props = $props();
21
13
 
22
- let languageCode = $derived(
23
- language ? languagesMap[language] || language : null
24
- ) as Language | null;
14
+ let sanitizedCode = $derived(sanitizeLines(code));
25
15
 
26
- function getCode(code: string, languageCode: any) {
27
- // TODO: must change
28
- return code.replace(/</g, '&lt;').replace(/>/g, '&gt;').trim();
16
+ function copyToClipboard() {
17
+ navigator.clipboard.writeText(sanitizedCode);
18
+ toast.success('Copied');
29
19
  }
30
20
  </script>
31
21
 
32
- <pre class="language-{languageCode} hljs"><code>{@html getCode(code, languageCode)}</code></pre>
22
+ <div class="code-container">
23
+ <div class="copy-button">
24
+ <Button color="input" size="x-small" onclick={copyToClipboard}>
25
+ <IconCopy size={10} />
26
+ </Button>
27
+ </div>
28
+ {@html await getCode(sanitizedCode, language)}
29
+ </div>
33
30
 
34
31
  <style>
35
32
  /*styles for CodeBlock component */
36
- pre {
33
+ .code-container {
34
+ position: relative;
35
+ }
36
+
37
+ .code-container .copy-button {
38
+ position: absolute;
39
+ top: 0px;
40
+ right: 12px;
41
+ transform: translateY(-40%);
42
+ z-index: 10;
43
+ }
44
+
45
+ .copy-button :global(button) {
46
+ border: 1px solid var(--border);
47
+ }
48
+
49
+ .code-container :global(pre) {
37
50
  text-align: left;
38
51
  white-space: pre;
39
52
  word-spacing: normal;
@@ -43,18 +56,22 @@
43
56
  border-radius: 20px;
44
57
  padding: 20px;
45
58
  line-height: 1.2;
59
+ background-color: #f4f2f0 !important;
46
60
  }
47
- pre code {
61
+
62
+ .code-container :global(pre code) {
48
63
  all: unset;
49
- font-family:
50
- Consolas,
51
- Monaco,
52
- Andale Mono,
53
- Ubuntu Mono,
54
- monospace;
55
64
  font-size: 14px;
56
65
  line-height: 1.5 !important;
57
66
  tab-size: 4;
58
67
  hyphens: none;
59
68
  }
69
+
70
+ :global(:root.dark .shiki, :root.dark .shiki span) {
71
+ color: var(--shiki-dark) !important;
72
+ background-color: var(--shiki-dark-bg) !important;
73
+ font-style: var(--shiki-dark-font-style) !important;
74
+ font-weight: var(--shiki-dark-font-weight) !important;
75
+ text-decoration: var(--shiki-dark-text-decoration) !important;
76
+ }
60
77
  </style>
@@ -1,8 +1,7 @@
1
- import './hljs.scss';
2
- type InputLanguage = 'html' | 'css' | 'js' | 'ts' | 'yaml' | 'json' | 'svelte' | 'jsx' | 'php';
1
+ import { type Language } from './getCode.js';
3
2
  interface Props {
4
3
  code: string;
5
- language?: InputLanguage | null;
4
+ language?: Language | null;
6
5
  }
7
6
  declare const CodeBlock: import("svelte").Component<Props, {}, "">;
8
7
  type CodeBlock = ReturnType<typeof CodeBlock>;