@hanzo/ui 4.6.0 → 4.7.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 (290) hide show
  1. package/dist/index.d.mts +16 -0
  2. package/dist/index.d.ts +16 -0
  3. package/dist/index.js +9458 -0
  4. package/dist/index.mjs +9449 -0
  5. package/dist/lib/utils.d.mts +2 -0
  6. package/dist/lib/utils.d.ts +2 -0
  7. package/dist/lib/utils.js +47 -0
  8. package/dist/lib/utils.mjs +28 -0
  9. package/dist/src/utils.d.mts +7 -0
  10. package/dist/src/utils.d.ts +7 -0
  11. package/dist/src/utils.js +47 -0
  12. package/dist/src/utils.mjs +28 -0
  13. package/dist/tailwind/index.d.mts +2 -0
  14. package/dist/tailwind/index.d.ts +2 -0
  15. package/dist/tailwind/index.js +2048 -0
  16. package/dist/tailwind/index.mjs +2017 -0
  17. package/dist/types/index.d.mts +12 -0
  18. package/dist/types/index.d.ts +12 -0
  19. package/dist/types/index.js +79 -0
  20. package/dist/types/index.mjs +56 -0
  21. package/package.json +151 -25
  22. package/MCP-INSTRUCTIONS.md +0 -73
  23. package/README-MCP.md +0 -175
  24. package/assets/ai-icons.tsx +0 -207
  25. package/assets/crypto.tsx +0 -33
  26. package/assets/file-type-icon.tsx +0 -66
  27. package/assets/file.tsx +0 -45
  28. package/assets/general.tsx +0 -2318
  29. package/assets/hanzo-logo.svg +0 -9
  30. package/assets/hanzo-logo.tsx +0 -15
  31. package/assets/index.ts +0 -8
  32. package/assets/index.tsx +0 -4
  33. package/assets/llm-provider.tsx +0 -1094
  34. package/blocks/components/accordian-block.tsx +0 -48
  35. package/blocks/components/block-component-props.ts +0 -11
  36. package/blocks/components/bullet-cards-block.tsx +0 -46
  37. package/blocks/components/card-block/index.tsx +0 -171
  38. package/blocks/components/card-block/link-out-button.tsx +0 -20
  39. package/blocks/components/card-block/util.ts +0 -28
  40. package/blocks/components/carte-blanche-block/index.tsx +0 -127
  41. package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
  42. package/blocks/components/content.tsx +0 -70
  43. package/blocks/components/cta-block.tsx +0 -115
  44. package/blocks/components/enh-heading-block.tsx +0 -204
  45. package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
  46. package/blocks/components/grid-block/index.tsx +0 -83
  47. package/blocks/components/grid-block/mutator-registry.ts +0 -10
  48. package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
  49. package/blocks/components/group-block.tsx +0 -83
  50. package/blocks/components/heading-block.tsx +0 -88
  51. package/blocks/components/image-block.tsx +0 -111
  52. package/blocks/components/index.ts +0 -30
  53. package/blocks/components/screenful-block/content.tsx +0 -123
  54. package/blocks/components/screenful-block/index.tsx +0 -107
  55. package/blocks/components/screenful-block/poster-background.tsx +0 -34
  56. package/blocks/components/screenful-block/video-background.tsx +0 -45
  57. package/blocks/components/space-block.tsx +0 -66
  58. package/blocks/components/video-block.tsx +0 -138
  59. package/blocks/def/accordian-block.ts +0 -14
  60. package/blocks/def/block.ts +0 -7
  61. package/blocks/def/bullet-cards-block.ts +0 -22
  62. package/blocks/def/card-block.ts +0 -22
  63. package/blocks/def/carte-blanche-block.ts +0 -21
  64. package/blocks/def/cta-block.ts +0 -19
  65. package/blocks/def/element-block.ts +0 -11
  66. package/blocks/def/enh-heading-block.ts +0 -44
  67. package/blocks/def/grid-block.ts +0 -16
  68. package/blocks/def/group-block.ts +0 -11
  69. package/blocks/def/heading-block.ts +0 -15
  70. package/blocks/def/image-block.ts +0 -31
  71. package/blocks/def/index.ts +0 -35
  72. package/blocks/def/screenful-block.ts +0 -54
  73. package/blocks/def/space-block.ts +0 -64
  74. package/blocks/def/video-block.ts +0 -9
  75. package/blocks/index.ts +0 -2
  76. package/components/index.ts +0 -56
  77. package/dist/button.d.ts +0 -1
  78. package/dist/button.js +0 -1
  79. package/dist/hooks/index.d.ts +0 -7
  80. package/dist/hooks/index.js +0 -7
  81. package/dist/hooks/use-click-away.d.ts +0 -2
  82. package/dist/hooks/use-click-away.js +0 -23
  83. package/dist/hooks/use-combined-refs.d.ts +0 -3
  84. package/dist/hooks/use-combined-refs.js +0 -18
  85. package/dist/hooks/use-copy-clipboard.d.ts +0 -9
  86. package/dist/hooks/use-copy-clipboard.js +0 -21
  87. package/dist/hooks/use-debounce.d.ts +0 -1
  88. package/dist/hooks/use-debounce.js +0 -13
  89. package/dist/hooks/use-fill-ids.d.ts +0 -8
  90. package/dist/hooks/use-fill-ids.js +0 -20
  91. package/dist/hooks/use-map.d.ts +0 -1
  92. package/dist/hooks/use-map.js +0 -20
  93. package/dist/hooks/use-measure.d.ts +0 -8
  94. package/dist/hooks/use-measure.js +0 -25
  95. package/dist/hooks/use-reverse-video-playback.d.ts +0 -1
  96. package/dist/hooks/use-reverse-video-playback.js +0 -41
  97. package/dist/hooks/use-scroll-restoration.d.ts +0 -8
  98. package/dist/hooks/use-scroll-restoration.js +0 -36
  99. package/dist/mcp/enhanced-server.d.ts +0 -29
  100. package/dist/mcp/enhanced-server.js +0 -1128
  101. package/dist/mcp/index.d.ts +0 -28
  102. package/dist/mcp/index.js +0 -436
  103. package/dist/registry/api.d.ts +0 -37
  104. package/dist/registry/api.js +0 -129
  105. package/dist/registry/index.d.ts +0 -353
  106. package/dist/registry/index.js +0 -45
  107. package/dist/utils.d.ts +0 -1
  108. package/dist/utils.js +0 -1
  109. package/environment.d.ts +0 -6
  110. package/helpers/file.ts +0 -33
  111. package/helpers/memoization.ts +0 -40
  112. package/primitives/accordion.tsx +0 -74
  113. package/primitives/action-button.tsx +0 -42
  114. package/primitives/alert-dialog.tsx +0 -185
  115. package/primitives/alert.tsx +0 -74
  116. package/primitives/apply-typography.tsx +0 -55
  117. package/primitives/aspect-ratio.tsx +0 -5
  118. package/primitives/avatar.tsx +0 -57
  119. package/primitives/background-beams.tsx +0 -142
  120. package/primitives/badge.tsx +0 -44
  121. package/primitives/breadcrumb.tsx +0 -130
  122. package/primitives/breakpoint-indicator.tsx +0 -19
  123. package/primitives/button.tsx +0 -82
  124. package/primitives/calendar.tsx +0 -72
  125. package/primitives/card.tsx +0 -97
  126. package/primitives/carousel.tsx +0 -237
  127. package/primitives/chat/chat-input-area.tsx +0 -87
  128. package/primitives/chat/chat-input.tsx +0 -71
  129. package/primitives/chat/files-preview.tsx +0 -330
  130. package/primitives/chat/index.ts +0 -6
  131. package/primitives/chat/json-form.tsx +0 -8
  132. package/primitives/chat/message-list.tsx +0 -307
  133. package/primitives/chat/message.tsx +0 -569
  134. package/primitives/chat/sqlite-preview.tsx +0 -215
  135. package/primitives/checkbox.tsx +0 -31
  136. package/primitives/collapsible.tsx +0 -9
  137. package/primitives/combobox.tsx +0 -239
  138. package/primitives/command.tsx +0 -149
  139. package/primitives/context-menu.tsx +0 -206
  140. package/primitives/copy-to-clipboard-icon.tsx +0 -60
  141. package/primitives/dialog-video-controller.tsx +0 -38
  142. package/primitives/dialog.tsx +0 -123
  143. package/primitives/dot-pattern.tsx +0 -57
  144. package/primitives/dots-loader.tsx +0 -13
  145. package/primitives/drawer.tsx +0 -110
  146. package/primitives/dropdown-menu.tsx +0 -199
  147. package/primitives/error-message.tsx +0 -19
  148. package/primitives/file-uploader.tsx +0 -200
  149. package/primitives/form.tsx +0 -183
  150. package/primitives/hover-card.tsx +0 -28
  151. package/primitives/icons/github.tsx +0 -14
  152. package/primitives/icons/index.ts +0 -18
  153. package/primitives/icons/youtube-logo.tsx +0 -59
  154. package/primitives/index-common.ts +0 -303
  155. package/primitives/index-next.ts +0 -4
  156. package/primitives/input-otp.tsx +0 -65
  157. package/primitives/input.tsx +0 -125
  158. package/primitives/label.tsx +0 -20
  159. package/primitives/list-adaptor.ts +0 -12
  160. package/primitives/list-box.tsx +0 -74
  161. package/primitives/loading-spinner.tsx +0 -33
  162. package/primitives/markdown-preview.tsx +0 -609
  163. package/primitives/mermaid.tsx +0 -196
  164. package/primitives/navigation-menu.tsx +0 -147
  165. package/primitives/next/image.tsx +0 -90
  166. package/primitives/next/index.ts +0 -7
  167. package/primitives/next/inline-icon.tsx +0 -36
  168. package/primitives/next/link-element.tsx +0 -109
  169. package/primitives/next/mdx-link.tsx +0 -22
  170. package/primitives/next/media-stack.tsx +0 -69
  171. package/primitives/next/nav-items.tsx +0 -45
  172. package/primitives/next/youtube-embed.tsx +0 -83
  173. package/primitives/pagination.tsx +0 -117
  174. package/primitives/popover.tsx +0 -32
  175. package/primitives/pretty-json-print.tsx +0 -28
  176. package/primitives/progress.tsx +0 -26
  177. package/primitives/prompt-textarea.tsx +0 -72
  178. package/primitives/qr-code.tsx +0 -112
  179. package/primitives/radio-group.tsx +0 -42
  180. package/primitives/resizable.tsx +0 -47
  181. package/primitives/scroll-area.tsx +0 -57
  182. package/primitives/search-input.tsx +0 -66
  183. package/primitives/select.tsx +0 -122
  184. package/primitives/separator.tsx +0 -25
  185. package/primitives/sheet.tsx +0 -139
  186. package/primitives/skeleton.tsx +0 -17
  187. package/primitives/slider.tsx +0 -62
  188. package/primitives/sonner.tsx +0 -35
  189. package/primitives/step-indicator.tsx +0 -69
  190. package/primitives/stepper.tsx +0 -272
  191. package/primitives/switch.tsx +0 -26
  192. package/primitives/table.tsx +0 -105
  193. package/primitives/tabs.tsx +0 -50
  194. package/primitives/text-area.tsx +0 -26
  195. package/primitives/text-link.tsx +0 -25
  196. package/primitives/textarea.tsx +0 -61
  197. package/primitives/textfield.tsx +0 -75
  198. package/primitives/toast.tsx +0 -30
  199. package/primitives/toggle-group.tsx +0 -63
  200. package/primitives/toggle.tsx +0 -44
  201. package/primitives/tooltip.tsx +0 -47
  202. package/primitives/video-player.tsx +0 -23
  203. package/public/r/accordion.json +0 -11
  204. package/public/r/alert.json +0 -11
  205. package/public/r/avatar.json +0 -11
  206. package/public/r/badge.json +0 -11
  207. package/public/r/button.json +0 -11
  208. package/public/r/card.json +0 -11
  209. package/public/r/checkbox.json +0 -11
  210. package/public/r/default.json +0 -6
  211. package/public/r/dialog.json +0 -11
  212. package/public/r/input.json +0 -11
  213. package/public/r/label.json +0 -11
  214. package/public/r/new-york.json +0 -6
  215. package/public/r/popover.json +0 -11
  216. package/public/r/select.json +0 -11
  217. package/public/r/table.json +0 -11
  218. package/public/r/tabs.json +0 -11
  219. package/public/r/toast.json +0 -11
  220. package/registry.json +0 -184
  221. package/src/button.ts +0 -1
  222. package/src/hooks/index.ts +0 -7
  223. package/src/hooks/use-click-away.ts +0 -31
  224. package/src/hooks/use-combined-refs.ts +0 -22
  225. package/src/hooks/use-copy-clipboard.ts +0 -30
  226. package/src/hooks/use-debounce.ts +0 -17
  227. package/src/hooks/use-fill-ids.ts +0 -25
  228. package/src/hooks/use-map.ts +0 -26
  229. package/src/hooks/use-measure.ts +0 -42
  230. package/src/hooks/use-reverse-video-playback.ts +0 -43
  231. package/src/hooks/use-scroll-restoration.ts +0 -50
  232. package/src/mcp/README.md +0 -141
  233. package/src/mcp/enhanced-server.ts +0 -1208
  234. package/src/mcp/index.ts +0 -518
  235. package/src/mcp/package.json +0 -10
  236. package/src/registry/api.ts +0 -164
  237. package/src/registry/index.ts +0 -60
  238. package/src/registry/package.json +0 -10
  239. package/src/utils.ts +0 -1
  240. package/tailwind/colors.tailwind.js +0 -53
  241. package/tailwind/fontFamily.tailwind.ts +0 -7
  242. package/tailwind/fontSize.tailwind.ts +0 -13
  243. package/tailwind/index.ts +0 -7
  244. package/tailwind/safelist.tailwind.js +0 -26
  245. package/tailwind/screens.tailwind.js +0 -8
  246. package/tailwind/spacing.tailwind.js +0 -65
  247. package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
  248. package/tailwind/tailwind.config.hanzo-preset.js +0 -915
  249. package/tailwind/tw-font-desc.ts +0 -15
  250. package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
  251. package/tailwind/typo-plugin/index.d.ts +0 -9
  252. package/tailwind/typo-plugin/index.js +0 -141
  253. package/tailwind/typo-plugin/utils.js +0 -60
  254. package/tailwind/typography-test.mdx +0 -35
  255. package/tailwind/z-index.tailwind.js +0 -71
  256. package/test/test-registry.js +0 -73
  257. package/test-imports.mjs +0 -19
  258. package/tsconfig.json +0 -22
  259. package/types/animation-def.ts +0 -3
  260. package/types/breakpoints.ts +0 -11
  261. package/types/bullet-item.ts +0 -10
  262. package/types/button-def.ts +0 -39
  263. package/types/dimensions.ts +0 -8
  264. package/types/grid-def.ts +0 -56
  265. package/types/image-def.ts +0 -32
  266. package/types/index.ts +0 -29
  267. package/types/link-def.ts +0 -56
  268. package/types/media-stack-def.ts +0 -31
  269. package/types/t-shirt-size.ts +0 -5
  270. package/types/tshirt-dimensions.ts +0 -20
  271. package/types/video-def.ts +0 -25
  272. package/util/blob.ts +0 -28
  273. package/util/copy-to-clipboard.ts +0 -17
  274. package/util/create-shadow-root.ts +0 -22
  275. package/util/date.ts +0 -83
  276. package/util/debounce.ts +0 -11
  277. package/util/file.ts +0 -15
  278. package/util/format-and-abbreviate-as-currency.ts +0 -125
  279. package/util/format-text.ts +0 -33
  280. package/util/format-to-max-char.ts +0 -68
  281. package/util/index-client.ts +0 -3
  282. package/util/index.ts +0 -9
  283. package/util/number-abbreviate.ts +0 -49
  284. package/util/specifier.ts +0 -43
  285. package/util/spread-to-transform.ts +0 -24
  286. package/util/step-animation.ts +0 -90
  287. package/util/timing.ts +0 -3
  288. package/util/toasts.tsx +0 -17
  289. package/util/two-way-map.ts +0 -19
  290. package/utils.ts +0 -9
@@ -1,31 +0,0 @@
1
- import type AnimationDef from './animation-def'
2
- import type ImageDef from './image-def'
3
- import type VideoDef from './video-def'
4
-
5
- /**
6
- * This will be implemented via css transforms,
7
- * so will be a subset of those capabilities.
8
- * Individual transforms will be added as they
9
- * are needed.
10
- */
11
- interface MediaTransform {
12
- /** (X and Y) or [X, Y] */
13
- scale?: number | number[]
14
- }
15
-
16
- interface MediaStackDef {
17
- img?: ImageDef
18
- video?: VideoDef
19
- animation?: AnimationDef
20
- mediaTransform?: MediaTransform
21
- /** prefered order of precedence.
22
- * If an type is missing, it will not be used.
23
- * default (inMediaStack component): ['a', 'v', 'i']
24
- * */
25
- order?: ('a' | 'v' | 'i')[]
26
- }
27
-
28
- export type {
29
- MediaStackDef,
30
- MediaTransform
31
- }
@@ -1,5 +0,0 @@
1
- type TShirtSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
2
-
3
- export {
4
- type TShirtSize as default
5
- }
@@ -1,20 +0,0 @@
1
- type ConcreteDimensions = {
2
- w: number
3
- h: number
4
- }
5
-
6
- // TODO: This is only used by VideoDef.
7
- // Is there a better way w @next/video?
8
- type TShirtDimensions = {
9
- xs?: ConcreteDimensions
10
- sm?: ConcreteDimensions
11
- md: ConcreteDimensions
12
- lg?: ConcreteDimensions
13
- xl?: ConcreteDimensions
14
- }
15
-
16
- export {
17
- type TShirtDimensions as default
18
- }
19
-
20
-
@@ -1,25 +0,0 @@
1
- import type TShirtDimensions from './tshirt-dimensions'
2
-
3
- interface VideoDef {
4
- videoProps?: any // For example,
5
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6
- videoProps: {
7
- autoPlay: true,
8
- loop: true,
9
- muted: true,
10
- playsInline: true
11
- },
12
-
13
- Valueless props are boolean.
14
- NOTE: Must be camalCase as per React conventions! (playsinline => playsInline)
15
- ~~~~~~~~~~~~~~~~~~~~~~~~ */
16
- poster?: string
17
- sources?: string[]
18
- dim: TShirtDimensions
19
- // These are suppored so far: { vh: 60, mobile: {vw: 70} }
20
- sizing?: any
21
- }
22
-
23
- export {
24
- type VideoDef as default
25
- }
package/util/blob.ts DELETED
@@ -1,28 +0,0 @@
1
- import { Buffer } from 'buffer';
2
-
3
- export const blobToBase64 = (blob: Blob): Promise<string> => {
4
- const reader = new FileReader();
5
- reader.readAsDataURL(blob);
6
- return new Promise((resolve) => {
7
- reader.onloadend = () => {
8
- resolve(reader.result as string);
9
- };
10
- });
11
- };
12
-
13
- export const dataUrlToFile = (
14
- dataUrl: string,
15
- filename: string,
16
- ): File | undefined => {
17
- const arr = dataUrl.split(',');
18
- if (arr.length < 2) {
19
- return undefined;
20
- }
21
- const mimeArr = arr[0].match(/:(.*?);/);
22
- if (!mimeArr || mimeArr.length < 2) {
23
- return undefined;
24
- }
25
- const mime = mimeArr[1];
26
- const buff = Buffer.from(arr[1], 'base64');
27
- return new File([buff], filename, { type: mime });
28
- };
@@ -1,17 +0,0 @@
1
- export async function copyToClipboard(text: string) {
2
- try {
3
- await navigator.clipboard.writeText(text);
4
- } catch {
5
- // Fallback for browsers where the Clipboard API is not supported
6
- const textarea = document.createElement('textarea');
7
- textarea.style.position = 'fixed';
8
- textarea.style.top = '-9999px';
9
- textarea.style.left = '-9999px';
10
- textarea.innerText = text;
11
- document.body.appendChild(textarea);
12
- textarea.focus();
13
- textarea.select();
14
- document.execCommand('copy');
15
- textarea.remove();
16
- }
17
- }
@@ -1,22 +0,0 @@
1
- import { createRoot } from 'react-dom/client';
2
-
3
- /**
4
- * Creates a shadow root with the specified styles and returns a React root in it.
5
- * @param {string} tagName - Node name to be applied to the shadow root.
6
- * @param {string} styles - CSS styles to be applied to the shadow root.
7
- * @returns {ReactRoot} - React root rendered inside the shadow root.
8
- */
9
-
10
- export function createShadowRoot(tagName: string, styles: string) {
11
- const container = document.createElement(tagName);
12
- const shadow = container.attachShadow({ mode: 'open' });
13
-
14
- // Create a new CSS style sheet and apply the specified styles and apply the style sheet to the shadow root
15
- const globalStyleSheet = new CSSStyleSheet();
16
- globalStyleSheet.replaceSync(styles);
17
- shadow.adoptedStyleSheets = [globalStyleSheet];
18
-
19
- const html = document.querySelector('html') as HTMLHtmlElement;
20
- html.prepend(container);
21
- return createRoot(shadow);
22
- }
package/util/date.ts DELETED
@@ -1,83 +0,0 @@
1
- import { FormattedMessage } from '@hanzo_network/hanzo-node-state/v2/queries/getChatConversation/types';
2
-
3
- export type ChatConversationMessage = {
4
- hash: string;
5
- parentHash: string;
6
- inboxId: string;
7
- scheduledTime: string | undefined;
8
- content: string;
9
- isLocal: boolean;
10
- sender: {
11
- avatar: string;
12
- };
13
- fileInbox?: {
14
- id: string;
15
- files: {
16
- name: string;
17
- preview?: string;
18
- }[];
19
- };
20
- };
21
- export type GetChatConversationOutput = ChatConversationMessage[];
22
-
23
- export const formatDateToUSLocaleString = (date: Date | undefined) => {
24
- if (!date) return '-';
25
- return new Date(date).toLocaleDateString('en-US', {
26
- year: 'numeric',
27
- month: 'numeric',
28
- day: 'numeric',
29
- });
30
- };
31
- export const formatDateToLocaleStringWithTime = (date: Date | undefined) => {
32
- if (!date) return '-';
33
- return new Date(date).toLocaleDateString('en-US', {
34
- year: 'numeric',
35
- month: 'numeric',
36
- day: 'numeric',
37
- hour: 'numeric',
38
- minute: 'numeric',
39
- });
40
- };
41
-
42
- export const getRelativeDateLabel = (date: Date): string => {
43
- const today = new Date();
44
- const yesterday = new Date();
45
- yesterday.setDate(today.getDate() - 1);
46
- if (date.toDateString() === today.toDateString()) {
47
- return 'today';
48
- } else if (date.toDateString() === yesterday.toDateString()) {
49
- return 'yesterday';
50
- } else {
51
- return date.toDateString();
52
- }
53
- };
54
-
55
- export const groupMessagesByDate = (messages: FormattedMessage[]) => {
56
- const groupedMessages: Record<string, FormattedMessage[]> = {};
57
- for (const message of messages) {
58
- const date = new Date(message.createdAt ?? '').toDateString();
59
- if (!groupedMessages[date]) {
60
- groupedMessages[date] = [];
61
- }
62
- groupedMessages[date].push(message);
63
- }
64
- return groupedMessages;
65
- };
66
-
67
- export const formatDateToMonthAndDay = (date: Date): string => {
68
- const today = new Date();
69
- if (
70
- date.getDate() === today.getDate() &&
71
- date.getMonth() === today.getMonth() &&
72
- date.getFullYear() === today.getFullYear()
73
- ) {
74
- return date.toLocaleTimeString('en-US', {
75
- hour: 'numeric',
76
- minute: 'numeric',
77
- hour12: true,
78
- });
79
- }
80
- const month = date.getMonth() + 1;
81
- const day = date.getDate();
82
- return `${month}/${day}`;
83
- };
package/util/debounce.ts DELETED
@@ -1,11 +0,0 @@
1
- export const debounce = (func: Function, delay: number) => {
2
- let timeoutId: NodeJS.Timeout | null = null;
3
- return (...args: any[]) => {
4
- if (timeoutId) {
5
- clearTimeout(timeoutId);
6
- }
7
- timeoutId = setTimeout(() => {
8
- func(...args);
9
- }, delay);
10
- };
11
- };
package/util/file.ts DELETED
@@ -1,15 +0,0 @@
1
- export const getFileName = (fileName: string): string => {
2
- const nameParts = fileName.split('.');
3
- return nameParts.slice(0, -1).join('.');
4
- };
5
- export const getFileExt = (fileName: string): string => {
6
- const nameParts = fileName.split('.');
7
- return nameParts.pop() || '';
8
- };
9
-
10
- export const isFileTypeImageOrPdf = (file: File): boolean => {
11
- if (!file) return false;
12
- return (
13
- file?.type.startsWith('image/') || file?.type.startsWith('application/pdf')
14
- );
15
- };
@@ -1,125 +0,0 @@
1
- import Abbr, { QuantityAbbrSymbol, ABBR_SYMBOLS_ARRAY } from './number-abbreviate'
2
-
3
- interface FormatThreshold {
4
- from: number
5
- use: QuantityAbbrSymbol
6
- }
7
-
8
- const usdFormatter = Intl.NumberFormat('en-US', {
9
- style: 'currency',
10
- currency: 'USD',
11
- minimumFractionDigits: 2,
12
- })
13
-
14
- const formatAsUSCurrency = (n: number) => {
15
- let result = usdFormatter.format(n)
16
- return result.endsWith('.00') ? result.slice(0, -3) : result
17
- }
18
-
19
- const formatAndAbbreviateAsCurrency = (
20
- n: number | null,
21
- thresholds: FormatThreshold[] = [{
22
- from: 1000000000,
23
- use: 'M'
24
- }],
25
- /**
26
- * Chars that will be added by ui if the number is rounded.
27
- * For example, if the desired output for 10.15 is "~10.1",
28
- * the tilda counts as 1 char.
29
- */
30
- roundingAdds: number = 1,
31
- maxDecimal: number = 2
32
- ): {
33
- full: string
34
- result: string
35
- change: 'rounded' | 'none' | 'abbr' | 'empty'
36
- } => {
37
- if (n === null) {
38
- return {
39
- full: '',
40
- result: '',
41
- change: 'empty'
42
- }
43
- }
44
-
45
- const formatted = formatAsUSCurrency(n)
46
-
47
- if (n < thresholds[0].from) {
48
- return {
49
- full: formatted,
50
- result: formatted,
51
- change: 'none'
52
- }
53
- }
54
-
55
- // Get operative FormatThreshold pair...
56
- let threshold: FormatThreshold
57
- for (
58
- let i = 0;
59
- i < thresholds.length && n >= thresholds[i].from;
60
- threshold = thresholds[i], i++
61
- ) {}
62
-
63
- // Build up units array to all units
64
- // up to threshold.use
65
- const units: QuantityAbbrSymbol[] = []
66
- for (let i = 0; i < ABBR_SYMBOLS_ARRAY.length; i++) {
67
- const current = ABBR_SYMBOLS_ARRAY[i]
68
- units.push(current)
69
- if (current === threshold!.use) {
70
- break
71
- }
72
- }
73
-
74
- const abbreviator = new Abbr(units)
75
-
76
- // Use threshold.from as a guide to how many chars are available:
77
- // first digit + comma = 2
78
- // Possible trailing cents: '.xx'.length = 3
79
- // 3 - 2 = 1
80
- const charsAvail = formatAsUSCurrency(threshold!.from).length + 1
81
- const abbr = abbreviator.abbreviate(n, charsAvail) // arbitrary, but good approx
82
- const numStr = abbr.slice(0, -1)
83
- const abbreviation = abbr.slice(-1)
84
- const numerical = parseFloat(numStr)
85
-
86
- const integral = Math.floor(numerical)
87
- const integralString = formatAsUSCurrency(integral)
88
- const commas = integralString.split(',').length - 1
89
-
90
- // minus abbr, dec point, dollar sign, and roundingAdds / tilda,
91
- // (1 + 1 + 1 + roundingAdds)
92
- // ("precision" does NOT include the decimal point itself,
93
- // so we have to explicitly factor it in.)
94
- const roundedString = numerical.toPrecision(charsAvail - commas - (3 + roundingAdds))
95
- // remove trailing zeros, if any
96
- const roundedNumerical = parseFloat(roundedString)
97
- const roundedIntegral = Math.trunc(roundedNumerical)
98
- const roundedIntegralString = formatAsUSCurrency(roundedIntegral)
99
-
100
- let decimalPortion = roundedNumerical - roundedIntegral
101
- let result
102
- if (decimalPortion !== 0) {
103
- // remove trailing zeros if any
104
- decimalPortion = parseFloat(decimalPortion.toFixed(maxDecimal))
105
- const decimalPortionString = decimalPortion.toString()
106
- const afterDecimalString = decimalPortionString.slice(decimalPortionString.indexOf('.') + 1)
107
- result = roundedIntegralString + '.' + afterDecimalString + abbreviation
108
- }
109
- else {
110
- result = roundedIntegralString + abbreviation
111
- }
112
- // Did we lose any precision?
113
- const rounded = (roundedIntegral + decimalPortion !== n)
114
- return {
115
- full: formatted,
116
- result,
117
- change: rounded ? 'rounded' : 'abbr'
118
- }
119
- }
120
-
121
- export {
122
- formatAndAbbreviateAsCurrency as default,
123
- type FormatThreshold,
124
- type QuantityAbbrSymbol
125
- }
@@ -1,33 +0,0 @@
1
- import { HanzoToolHeader } from '@hanzo_network/hanzo-message-ts/api/tools/types';
2
-
3
- export const formatText = (text: string) => {
4
- const camelToSpaces = text.replace(/([a-z])([A-Z])/g, '$1 $2');
5
- const snakeToSpaces = camelToSpaces.replace(/_/g, ' ');
6
- return snakeToSpaces
7
- .split(' ')
8
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
9
- .join(' ');
10
- };
11
-
12
- export const formatCamelCaseText = (text: string) => {
13
- const words = text.split(/(?=[A-Z])/);
14
-
15
- const formattedWords = words.map((word) => {
16
- return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
17
- });
18
-
19
- const result = formattedWords.join(' ');
20
-
21
- return result.charAt(0).toUpperCase() + result.slice(1);
22
- };
23
-
24
- export const getVersionFromTool = (toolRouterKey: HanzoToolHeader) => {
25
- if (toolRouterKey.version) {
26
- return toolRouterKey.version;
27
- }
28
- const parts = toolRouterKey.name.split(':::');
29
- if (parts.length === 4) {
30
- return parts[3];
31
- }
32
- return 'latest';
33
- };
@@ -1,68 +0,0 @@
1
- import Abbr from './number-abbreviate'
2
-
3
- const abbr = new Abbr(['K', 'M', 'B', 'T'])
4
-
5
- const formatToMaxChar = (
6
- n: number | null,
7
- maxChars: number,
8
- /**
9
- * Chars that will be added by ui if the number is rounded.
10
- * For example, if the desired output for 10.15 is "~10.1",
11
- * the tilda counts as 1 char.
12
- */
13
- roundingAdds: number = 1
14
- ): {
15
- result: string
16
- change: 'rounded' | 'none' | 'abbr' | 'empty'
17
- } => {
18
- if (n === null) {
19
- return {
20
- result: '',
21
- change: 'empty'
22
- }
23
- }
24
- const s = n.toString()
25
- if (s.length > maxChars) {
26
- // Highest number that can be rounded down to an
27
- // acceptable string.
28
- // Decimal point, plus one decimal place = 2 chars
29
- const cuttoff = Math.pow(10, maxChars - 2 - roundingAdds) - 0.05
30
- if (n < cuttoff) {
31
- const intPortion = Math.floor(n)
32
- const len = intPortion.toString().length
33
- // 1 is for dec point itself
34
- const availDecimals = maxChars - len - 1 - roundingAdds
35
- // removes trailing zeros, if any
36
- const roundedNumerical = parseFloat(n.toFixed(availDecimals))
37
- return {
38
- result: roundedNumerical.toString(),
39
- change: 'rounded'
40
- }
41
- }
42
- else {
43
-
44
- const str = abbr.abbreviate(n, maxChars)
45
- const numStr = str.slice(0, -1)
46
- const abbreviation = str.slice(-1)
47
- const numerical = parseFloat(numStr)
48
-
49
- // minus abbr, dec point, and roundingAdds / tilda,
50
- // (1 + 1 + roundingAdds)
51
- // ("precision" does NOT include the decimal point itself,
52
- // so we have to explicitly factor it in.)
53
- const roundedString = numerical.toPrecision(maxChars - (2 + roundingAdds))
54
- // remove trailing zeros, if any
55
- const roundedNumerical = parseFloat(roundedString)
56
- return {
57
- result: roundedNumerical.toString() + abbreviation,
58
- change: roundedNumerical === numerical ? 'abbr' : 'rounded'
59
- }
60
- }
61
- }
62
- return {
63
- result: s,
64
- change: 'none'
65
- }
66
- }
67
-
68
- export default formatToMaxChar
@@ -1,3 +0,0 @@
1
- export * from './index'
2
- // Must be imported from 'use client'
3
- export * from './step-animation'
package/util/index.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from './date';
2
- export * from './file';
3
- export * from './create-shadow-root';
4
- export * from './timing';
5
- export * from './blob';
6
- export * from './copy-to-clipboard';
7
- export * from './format-text';
8
- export * from './toasts';
9
- export * from './debounce';
@@ -1,49 +0,0 @@
1
- // cf: https://github.com/domharrington/js-number-abbreviate/blob/master/index.js
2
-
3
- type QuantityAbbrSymbol = 'K' | 'M' | 'B' | 'T'
4
- const ABBR_SYMBOLS_ARRAY = ['K', 'M', 'B', 'T'] satisfies QuantityAbbrSymbol[]
5
-
6
- class NumberAbbreviator {
7
-
8
- private _units: QuantityAbbrSymbol[]
9
-
10
- constructor(units?: QuantityAbbrSymbol[]) {
11
- this._units = units ?? ABBR_SYMBOLS_ARRAY
12
- }
13
-
14
- private _abbreviate = (
15
- n: number,
16
- decPlaces: number,
17
- log: boolean = false
18
- ): string => {
19
-
20
- const _decPlaces = Math.pow(10, decPlaces)
21
- let _n = n
22
-
23
- let _unit
24
- for (let i = this._units.length - 1; i >= 0; i--) {
25
- const size = Math.pow(10, (i + 1) * 3)
26
- if (size <= _n) {
27
- _n = Math.round(_n * _decPlaces / size) / _decPlaces
28
- if ((_n === 1000) && (i < this._units.length - 1)) {
29
- _n = 1
30
- i++
31
- }
32
- _unit = this._units[i]
33
- break
34
- }
35
- }
36
- return _n.toString() + (_unit ?? '')
37
- }
38
-
39
- abbreviate = (n: number, decPlaces: number, log: boolean = false) => {
40
- const abbreviatedNumber = this._abbreviate(Math.abs(n), decPlaces, log)
41
- return n < 0 ? '-' + abbreviatedNumber : abbreviatedNumber
42
- }
43
- }
44
-
45
- export {
46
- type QuantityAbbrSymbol,
47
- ABBR_SYMBOLS_ARRAY,
48
- NumberAbbreviator as default
49
- }
package/util/specifier.ts DELETED
@@ -1,43 +0,0 @@
1
- import type { Dimensions, TShirtSize } from '../types'
2
- import type { TypographySize } from '../primitives/apply-typography'
3
-
4
- export const getPrimaryStartingWith = (s: string, toFind: string) => {
5
- const tokenArray = s.split(' ')
6
- return tokenArray.find((tok) => (tok.startsWith(`${toFind}-`)))
7
- }
8
-
9
- export const getTShirtSize = (s: string): TShirtSize | undefined => {
10
- const subTokenArray = s.split('-')
11
- return subTokenArray[subTokenArray.length - 1] as TShirtSize
12
- }
13
-
14
- export const getTypographySize = (s: string): TypographySize | undefined => {
15
- const subTokenArray = s.split('-')
16
- return subTokenArray[subTokenArray.length - 1] as TypographySize
17
- }
18
-
19
- export const getDim = (s: string): Dimensions | undefined => {
20
- const subTokenArray = s.split('-')
21
- const dimStr = subTokenArray[subTokenArray.length - 1]
22
- if (dimStr) {
23
- const dimTokenArray = s.split('x')
24
- return dimTokenArray ? {
25
- w: Number(dimTokenArray[0]),
26
- h: Number(dimTokenArray[1])
27
- } : undefined
28
- }
29
- return undefined
30
- }
31
-
32
- export function getSpecifierData<T>(
33
- main: string,
34
- getPrimary: (s: string) => string | undefined,
35
- getData: (s: string) => T | undefined,
36
- def?: T
37
- ): T | undefined {
38
- const primary = getPrimary(main)
39
- if (primary) {
40
- return getData(primary) ?? def
41
- }
42
- return def ?? undefined
43
- }
@@ -1,24 +0,0 @@
1
- import type { MediaTransform } from '../types'
2
-
3
- export default (t: MediaTransform) => {
4
-
5
- let transformStrings: string[] = []
6
- const scaleVal = 'scale' in t ? t.scale : undefined
7
- if (scaleVal) {
8
- if (typeof scaleVal === 'number') {
9
- transformStrings.push(`scale(${scaleVal})`)
10
- }
11
- else if (
12
- Array.isArray(scaleVal) &&
13
- scaleVal.length == 2 &&
14
- typeof scaleVal[0] === 'number'
15
- ) {
16
- transformStrings.push(`scale(${scaleVal[0]}, ${scaleVal[1]})`)
17
- }
18
- else {
19
- throw new Error("parsing MediaTransform: Unrecognized value for 'scale'!")
20
- }
21
- }
22
-
23
- return transformStrings.length > 0 ? { transform: transformStrings.join(' ') } : {}
24
- }