diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 383b987..2cde614 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -76,8 +76,8 @@ jobs: args: "--target x86_64-apple-darwin" # - platform: "ubuntu-20.04" # for Tauri v1 you could replace this with ubuntu-20.04. # args: "" - - platform: "windows-latest" - args: "" + # - platform: "windows-latest" + # args: "" runs-on: ${{ matrix.platform }} steps: - name: Checkout repository diff --git a/assets/img/app-pulp.png b/assets/img/app-pulp.png index d8fda7c..9c4edb0 100644 Binary files a/assets/img/app-pulp.png and b/assets/img/app-pulp.png differ diff --git a/package-lock.json b/package-lock.json index 53e1e16..a0f5e12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "pulp", "version": "0.0.0-development", "dependencies": { - "@actions/core": "^1.10.0", + "@actions/core": "^1.10.1", "@actions/exec": "^1.1.1", "@actions/github": "^5.1.1", "@crabnebula/tauri-plugin-drag": "^0.3.1", @@ -20,7 +20,7 @@ "howler": "^2.2.3", "lodash-es": "^4.17.21", "pretty-ms": "^9.0.0", - "solid-heroicons": "^3.1.1", + "solid-heroicons": "^3.2.4", "solid-js": "^1.8.17", "solidjs-use": "^2.3.0", "wavesurfer.js": "^6.6.4" @@ -48,15 +48,15 @@ "prisma": "^4.9.0", "semantic-release": "^24.0.0", "tailwindcss": "^3.4.1", - "typescript": "^5", + "typescript": "^5.4.5", "vite": "^5.0.11", "vite-plugin-solid": "^2.10.2" } }, "node_modules/@actions/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", - "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -10736,11 +10736,11 @@ } }, "node_modules/solid-heroicons": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/solid-heroicons/-/solid-heroicons-3.1.1.tgz", - "integrity": "sha512-wfU/SqxqxWxInvfFlKJfCBPnJ94Zq1GQFiFL3M0KwZzT81lSF5yIC4HA/Czp3DYrn+dUumjO0qdrx8Ab3cy2sA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/solid-heroicons/-/solid-heroicons-3.2.4.tgz", + "integrity": "sha512-u6BMdFLvkJnvUGYzdFcWp1wvJ4hb9Y1zd3AbZ9D3bUmmiy9jBzNZX+RcqBCI2EKRvdQwAb1UB9bkESfqfhayDg==", "dependencies": { - "solid-js": "^1.6.2" + "solid-js": "^1.7.6" }, "peerDependencies": { "solid-js": ">= ^1.2.5" @@ -11329,9 +11329,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -11829,9 +11829,9 @@ }, "dependencies": { "@actions/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", - "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", "requires": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -19285,11 +19285,11 @@ "dev": true }, "solid-heroicons": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/solid-heroicons/-/solid-heroicons-3.1.1.tgz", - "integrity": "sha512-wfU/SqxqxWxInvfFlKJfCBPnJ94Zq1GQFiFL3M0KwZzT81lSF5yIC4HA/Czp3DYrn+dUumjO0qdrx8Ab3cy2sA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/solid-heroicons/-/solid-heroicons-3.2.4.tgz", + "integrity": "sha512-u6BMdFLvkJnvUGYzdFcWp1wvJ4hb9Y1zd3AbZ9D3bUmmiy9jBzNZX+RcqBCI2EKRvdQwAb1UB9bkESfqfhayDg==", "requires": { - "solid-js": "^1.6.2" + "solid-js": "^1.7.6" } }, "solid-js": { @@ -19740,9 +19740,9 @@ } }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 9ff7ff0..afec314 100644 --- a/package.json +++ b/package.json @@ -49,14 +49,13 @@ "@actions/github": "^5.1.1", "@crabnebula/tauri-plugin-drag": "^0.3.1", "@prisma/client": "^4.9.0", - "@tanstack/solid-table": "^8.10.6", + "@tanstack/solid-table": "^8.17.3", "@tanstack/solid-virtual": "^3.5.1", - "@tauri-apps/api": "^1.5.1", + "@tauri-apps/api": "^1.5.6 ", "github": "^14.0.0", - "howler": "^2.2.3", "lodash-es": "^4.17.21", "pretty-ms": "^9.0.0", - "solid-heroicons": "^3.1.1", + "solid-heroicons": "^3.2.4", "solid-js": "^1.8.17", "solidjs-use": "^2.3.0", "wavesurfer.js": "^6.6.4" diff --git a/src/components/Tabs/Tabs.tsx b/src/components/Tabs/Tabs.tsx index cfb24d7..f8418cb 100644 --- a/src/components/Tabs/Tabs.tsx +++ b/src/components/Tabs/Tabs.tsx @@ -1,8 +1,9 @@ import tabsStore from "@/stores/tabsStore/tabsStore"; import { Icon } from "solid-heroicons"; import { plus, xMark } from "solid-heroicons/outline"; -import { Component, FlowComponent, For } from "solid-js"; +import { Component, FlowComponent, For, createSignal } from "solid-js"; import { Dynamic } from "solid-js/web"; +import { useFocus } from "solidjs-use"; interface Props { setActive: (tabIndex: number) => void; @@ -13,30 +14,57 @@ interface Props { const Tabs: FlowComponent> = (props) => { return ( <> -
+
{(item, index) => { + const [target, setTarget] = createSignal(); + const [, setFocused] = useFocus(target); + const [getRenamingMode, setRenamingMode] = createSignal(false); + return ( - <> - props.setActive(index())} - class="tab" - classList={{ - "tab-active": item.active, + { + event.stopPropagation(); + setRenamingMode(true); + setFocused(true); + target()?.select(); + }} + onClick={() => props.setActive(index())} + class="tab flex-shrink-0" + classList={{ + "tab-active": item.active, + }} + > + + + - - + + + ); }} diff --git a/src/index.css b/src/index.css index d65945a..fd7a3b2 100644 --- a/src/index.css +++ b/src/index.css @@ -129,3 +129,33 @@ body { @apply text-base-content/60 whitespace-nowrap text-xs font-bold; } } + + + + + + +.input-sizer { + position: relative; + + & input, + textarea { + position: absolute; + left: 0; + top: 0; + width: 100%; + appearance: none; + border: none; + background: transparent; + padding: 0; + margin: 0; + outline: none; /* focus:outline-none equivalent */ + } + + &::after { + content: attr(data-value) ' '; + visibility: hidden; + white-space: pre-wrap; + } + +} \ No newline at end of file diff --git a/src/services/filesServices.ts b/src/services/filesServices.ts index 75ebeae..6f6fa21 100644 --- a/src/services/filesServices.ts +++ b/src/services/filesServices.ts @@ -25,8 +25,7 @@ export const getDirectoryFiles: ResourceFetcher< skip, }); - const response = paddedSplice(prevValue, skip, data); - return response; + return paddedSplice(prevValue, skip, data); }; export const getMetadataFiles: ResourceFetcher< diff --git a/src/stores/tabsStore/tabsStore.ts b/src/stores/tabsStore/tabsStore.ts index 5877899..5ce1f12 100644 --- a/src/stores/tabsStore/tabsStore.ts +++ b/src/stores/tabsStore/tabsStore.ts @@ -18,9 +18,9 @@ const setTabsStore: SetStoreFunction = (...args: any[]) => { }; const addTab = (): void => { - setTabsStore((t) => [ - ...t, - { ...cloneDeep(initialSearchStore), name: `Tab ${t.length}` }, + setTabsStore((tabs) => [ + ...tabs, + { ...cloneDeep(initialSearchStore), name: `Tab ${tabs.length + 1}` }, ]); }; @@ -30,6 +30,12 @@ const closeTab = (tabIndex: number): void => { }); }; +const activateNextOrPreviousTab = (tabIndex: number): void => { + const nextIndex = + tabIndex + 1 < appStore.tabs.length ? tabIndex + 1 : tabIndex - 1; + active(nextIndex); +}; + const active = (tabIndex: number): void => { setTabsStore({}, (_currentTab, [index]) => { return { @@ -38,6 +44,10 @@ const active = (tabIndex: number): void => { }); }; +const rename = (tabIndex: number, name: string): void => { + setTabsStore(tabIndex, "name", name); +}; + export default { get data() { return appStore.tabs; @@ -46,4 +56,6 @@ export default { addTab, active, closeTab, + activateNextOrPreviousTab, + rename, };