diff --git a/packages/bbui/package.json b/packages/bbui/package.json
index 89f72bc46d..2caad20bf6 100644
--- a/packages/bbui/package.json
+++ b/packages/bbui/package.json
@@ -3,7 +3,7 @@
"description": "A UI solution used in the different Budibase projects.",
"version": "0.0.0",
"license": "MPL-2.0",
- "svelte": "src/index.js",
+ "svelte": "src/index.ts",
"module": "dist/bbui.mjs",
"exports": {
".": {
@@ -14,7 +14,8 @@
"./spectrum-icons-vite.js": "./src/spectrum-icons-vite.js"
},
"scripts": {
- "build": "vite build"
+ "build": "vite build",
+ "dev": "vite build --watch --mode=dev"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "1.4.0",
diff --git a/packages/bbui/src/Typography/Heading.svelte b/packages/bbui/src/Typography/Heading.svelte
index 90d53fb208..f48d5d958e 100644
--- a/packages/bbui/src/Typography/Heading.svelte
+++ b/packages/bbui/src/Typography/Heading.svelte
@@ -2,10 +2,10 @@
import "@spectrum-css/typography/dist/index-vars.css"
// Sizes
- export let size = "M"
- export let textAlign = undefined
- export let noPadding = false
- export let weight = "default" // light, heavy, default
+ export let size: "XS" | "S" | "M" | "L" = "M"
+ export let textAlign: string | undefined = undefined
+ export let noPadding: boolean = false
+ export let weight: "light" | "heavy" | "default" = "default"
(obj: T) => T
- export const copyToClipboard: (value: any) => Promise
-}
diff --git a/packages/bbui/src/helpers.js b/packages/bbui/src/helpers.ts
similarity index 86%
rename from packages/bbui/src/helpers.js
rename to packages/bbui/src/helpers.ts
index 246587af44..330f381d53 100644
--- a/packages/bbui/src/helpers.js
+++ b/packages/bbui/src/helpers.ts
@@ -6,9 +6,8 @@ export const deepGet = helpers.deepGet
/**
* Generates a DOM safe UUID.
* Starting with a letter is important to make it DOM safe.
- * @return {string} a random DOM safe UUID
*/
-export function uuid() {
+export function uuid(): string {
return "cxxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, c => {
const r = (Math.random() * 16) | 0
const v = c === "x" ? r : (r & 0x3) | 0x8
@@ -18,22 +17,18 @@ export function uuid() {
/**
* Capitalises a string
- * @param string the string to capitalise
- * @return {string} the capitalised string
*/
-export const capitalise = string => {
+export const capitalise = (string?: string | null): string => {
if (!string) {
- return string
+ return ""
}
return string.substring(0, 1).toUpperCase() + string.substring(1)
}
/**
* Computes a short hash of a string
- * @param string the string to compute a hash of
- * @return {string} the hash string
*/
-export const hashString = string => {
+export const hashString = (string?: string | null): string => {
if (!string) {
return "0"
}
@@ -54,11 +49,12 @@ export const hashString = string => {
* will override the value "foo" rather than "bar".
* If a deep path is specified and the parent keys don't exist then these will
* be created.
- * @param obj the object
- * @param key the key
- * @param value the value
*/
-export const deepSet = (obj, key, value) => {
+export const deepSet = (
+ obj: Record | null,
+ key: string | null,
+ value: any
+): void => {
if (!obj || !key) {
return
}
@@ -82,9 +78,8 @@ export const deepSet = (obj, key, value) => {
/**
* Deeply clones an object. Functions are not supported.
- * @param obj the object to clone
*/
-export const cloneDeep = obj => {
+export const cloneDeep = (obj: T): T => {
if (!obj) {
return obj
}
@@ -93,9 +88,8 @@ export const cloneDeep = obj => {
/**
* Copies a value to the clipboard
- * @param value the value to copy
*/
-export const copyToClipboard = value => {
+export const copyToClipboard = (value: any): Promise => {
return new Promise(res => {
if (navigator.clipboard && window.isSecureContext) {
// Try using the clipboard API first
@@ -117,9 +111,12 @@ export const copyToClipboard = value => {
})
}
-// Parsed a date value. This is usually an ISO string, but can be a
+// Parse a date value. This is usually an ISO string, but can be a
// bunch of different formats and shapes depending on schema flags.
-export const parseDate = (value, { enableTime = true }) => {
+export const parseDate = (
+ value: string | dayjs.Dayjs | null,
+ { enableTime = true }
+): dayjs.Dayjs | null => {
// If empty then invalid
if (!value) {
return null
@@ -128,7 +125,7 @@ export const parseDate = (value, { enableTime = true }) => {
// Certain string values need transformed
if (typeof value === "string") {
// Check for time only values
- if (!isNaN(new Date(`0-${value}`))) {
+ if (!isNaN(new Date(`0-${value}`).valueOf())) {
value = `0-${value}`
}
@@ -153,9 +150,9 @@ export const parseDate = (value, { enableTime = true }) => {
// Stringifies a dayjs object to create an ISO string that respects the various
// schema flags
export const stringifyDate = (
- value,
+ value: null | dayjs.Dayjs,
{ enableTime = true, timeOnly = false, ignoreTimezones = false } = {}
-) => {
+): string | null => {
if (!value) {
return null
}
@@ -192,7 +189,7 @@ export const stringifyDate = (
}
// Determine the dayjs-compatible format of the browser's default locale
-const getPatternForPart = part => {
+const getPatternForPart = (part: Intl.DateTimeFormatPart): string => {
switch (part.type) {
case "day":
return "D".repeat(part.value.length)
@@ -214,9 +211,9 @@ const localeDateFormat = new Intl.DateTimeFormat()
// Formats a dayjs date according to schema flags
export const getDateDisplayValue = (
- value,
+ value: dayjs.Dayjs | null,
{ enableTime = true, timeOnly = false } = {}
-) => {
+): string => {
if (!value?.isValid()) {
return ""
}
@@ -229,7 +226,7 @@ export const getDateDisplayValue = (
}
}
-export const hexToRGBA = (color, opacity) => {
+export const hexToRGBA = (color: string, opacity: number): string => {
if (color.includes("#")) {
color = color.replace("#", "")
}
diff --git a/packages/bbui/src/index.js b/packages/bbui/src/index.ts
similarity index 100%
rename from packages/bbui/src/index.js
rename to packages/bbui/src/index.ts
diff --git a/packages/bbui/svelte.config.js b/packages/bbui/svelte.config.js
new file mode 100644
index 0000000000..7d908c15d5
--- /dev/null
+++ b/packages/bbui/svelte.config.js
@@ -0,0 +1,7 @@
+const { vitePreprocess } = require("@sveltejs/vite-plugin-svelte")
+
+const config = {
+ preprocess: vitePreprocess(),
+}
+
+module.exports = config
diff --git a/packages/bbui/tsconfig.json b/packages/bbui/tsconfig.json
new file mode 100644
index 0000000000..2fe17da42e
--- /dev/null
+++ b/packages/bbui/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "allowJs": true,
+ "outDir": "./dist",
+ "lib": ["ESNext"],
+ "baseUrl": ".",
+ "paths": {
+ "@budibase/*": [
+ "../*/src/index.ts",
+ "../*/src/index.js",
+ "../*",
+ "../../node_modules/@budibase/*"
+ ]
+ }
+ },
+ "include": ["./src/**/*"],
+ "exclude": ["node_modules", "**/*.json", "**/*.spec.ts", "**/*.spec.js"]
+}
\ No newline at end of file
diff --git a/packages/bbui/vite.config.js b/packages/bbui/vite.config.js
index bf0f9fc26d..bccca20e43 100644
--- a/packages/bbui/vite.config.js
+++ b/packages/bbui/vite.config.js
@@ -9,7 +9,7 @@ export default defineConfig(({ mode }) => {
build: {
sourcemap: !isProduction,
lib: {
- entry: "src/index.js",
+ entry: "src/index.ts",
formats: ["es"],
},
},