Next steps
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -13,8 +13,7 @@ dist-ssr
|
|||||||
*.local
|
*.local
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
.vscode/*
|
.vscode
|
||||||
!.vscode/extensions.json
|
|
||||||
.idea
|
.idea
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.suo
|
*.suo
|
||||||
|
|||||||
41
biome.json
Normal file
41
biome.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://biomejs.dev/schemas/2.4.2/schema.json",
|
||||||
|
"vcs": {
|
||||||
|
"enabled": true,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": true
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"includes": ["**", "!!**/dist"]
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"indentStyle": "space",
|
||||||
|
"indentWidth": 2,
|
||||||
|
"lineWidth": 100
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": true,
|
||||||
|
"rules": {
|
||||||
|
"recommended": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"formatter": {
|
||||||
|
"quoteStyle": "double"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"assist": {
|
||||||
|
"enabled": true,
|
||||||
|
"actions": {
|
||||||
|
"source": {
|
||||||
|
"organizeImports": "on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"parser": {
|
||||||
|
"tailwindDirectives": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,11 +3,15 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
|
||||||
|
/>
|
||||||
<title>Tauri + Vue + Typescript App</title>
|
<title>Tauri + Vue + Typescript App</title>
|
||||||
|
<link href="/src/styles/main.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body class="overflow-hidden">
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script type="module" src="/src/main.ts"></script>
|
<script type="module" src="/src/main.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
34
package.json
34
package.json
@@ -5,20 +5,34 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vue-tsc --noEmit && vite build",
|
"dev:desktop": "tauri dev",
|
||||||
|
"dev:ios": "tauri ios dev",
|
||||||
|
"dev:ios:simulator": "tauri ios dev \"iPhone 16e\"",
|
||||||
|
"build": "tsc && vite build",
|
||||||
|
"build:desktop": "tauri build",
|
||||||
|
"build:ios": "tauri ios build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"tauri": "tauri"
|
"tauri": "tauri",
|
||||||
|
"format": "biome format --write"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"vue": "^3.5.13",
|
"@phosphor-icons/vue": "^2.2.1",
|
||||||
"@tauri-apps/api": "^2",
|
"@tauri-apps/api": "^2",
|
||||||
"@tauri-apps/plugin-opener": "^2"
|
"@tauri-apps/plugin-http": "~2.5.7",
|
||||||
|
"@tauri-apps/plugin-opener": "^2",
|
||||||
|
"daisyui": "^5.5.18",
|
||||||
|
"vue": "^3.5.28",
|
||||||
|
"vue-router": "^4.6.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@biomejs/biome": "2.4.2",
|
||||||
"typescript": "~5.6.2",
|
"@tailwindcss/vite": "^4.2.0",
|
||||||
"vite": "^6.0.3",
|
"@tauri-apps/cli": "^2",
|
||||||
"vue-tsc": "^2.1.10",
|
"@vitejs/plugin-vue": "^6.0.4",
|
||||||
"@tauri-apps/cli": "^2"
|
"tailwindcss": "^4.2.0",
|
||||||
}
|
"typescript": "~5.9.3",
|
||||||
|
"vite": "^7.3.1",
|
||||||
|
"vue-tsc": "^2.1.10"
|
||||||
|
},
|
||||||
|
"packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a"
|
||||||
}
|
}
|
||||||
|
|||||||
792
pnpm-lock.yaml
generated
792
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
5816
src-tauri/Cargo.lock
generated
Normal file
5816
src-tauri/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,4 +22,5 @@ tauri = { version = "2", features = [] }
|
|||||||
tauri-plugin-opener = "2"
|
tauri-plugin-opener = "2"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
tauri-plugin-http = "2"
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,16 @@
|
|||||||
"$schema": "../gen/schemas/desktop-schema.json",
|
"$schema": "../gen/schemas/desktop-schema.json",
|
||||||
"identifier": "default",
|
"identifier": "default",
|
||||||
"description": "Capability for the main window",
|
"description": "Capability for the main window",
|
||||||
"windows": ["main"],
|
"windows": [
|
||||||
|
"main"
|
||||||
|
],
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"core:default",
|
"core:default",
|
||||||
"opener:default"
|
"opener:default",
|
||||||
|
{
|
||||||
|
"identifier": "http:default",
|
||||||
|
"allow": [{ "url": "https://*.deep-node.de" }],
|
||||||
|
"deny": [{ "url": "https://private.tauri.app" }]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 77;
|
objectVersion = 63;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -27,17 +27,17 @@
|
|||||||
1CF53E7B2849E2C09FF8FB57 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
1CF53E7B2849E2C09FF8FB57 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
2242402D4B45A2B0A59DAB07 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
2242402D4B45A2B0A59DAB07 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
23163FF2AFDAE1984D5A9363 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
23163FF2AFDAE1984D5A9363 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||||
31C9F7302B958060B2D466B9 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
|
31C9F7302B958060B2D466B9 /* lib.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = lib.rs; sourceTree = "<group>"; };
|
||||||
48B11840029B955B38CC94BF /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
48B11840029B955B38CC94BF /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||||
4B1B3E3FFE8B72EB9B9E3A75 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
4B1B3E3FFE8B72EB9B9E3A75 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
||||||
6D81329460D5AD9A968CBE94 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
6D81329460D5AD9A968CBE94 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||||
76E2475088F603959477B3FC /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
|
76E2475088F603959477B3FC /* main.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = main.rs; sourceTree = "<group>"; };
|
||||||
7E8680A29C703F6DE9CD3DD8 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
|
7E8680A29C703F6DE9CD3DD8 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
|
||||||
92148B69B11E9196394DF7EB /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; };
|
92148B69B11E9196394DF7EB /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; };
|
||||||
A1DD970B40E795087AEDDBE3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
A1DD970B40E795087AEDDBE3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
AB9FFC59D64DEA1B4618AC24 /* pomoday_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = pomoday_iOS.entitlements; sourceTree = "<group>"; };
|
AB9FFC59D64DEA1B4618AC24 /* pomoday_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = pomoday_iOS.entitlements; sourceTree = "<group>"; };
|
||||||
BB480DDD4ED4A46AF1C2A8C7 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
BB480DDD4ED4A46AF1C2A8C7 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
||||||
C1C51021B6DCA8C9656A1279 /* pomoday_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = pomoday_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
C1C51021B6DCA8C9656A1279 /* pomoday.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pomoday.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
DEA87E41F94E1A51293D9837 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
|
DEA87E41F94E1A51293D9837 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
|
||||||
F7353A75219A409DB7E495FB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
F7353A75219A409DB7E495FB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
2DBE1B8DFF7B37AC6C1C1822 /* Products */ = {
|
2DBE1B8DFF7B37AC6C1C1822 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C1C51021B6DCA8C9656A1279 /* pomoday_iOS.app */,
|
C1C51021B6DCA8C9656A1279 /* pomoday.app */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
);
|
);
|
||||||
productName = pomoday_iOS;
|
productName = pomoday_iOS;
|
||||||
productReference = C1C51021B6DCA8C9656A1279 /* pomoday_iOS.app */;
|
productReference = C1C51021B6DCA8C9656A1279 /* pomoday.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
@@ -192,7 +192,6 @@
|
|||||||
);
|
);
|
||||||
mainGroup = 2995AF4E31E30F1685B35647;
|
mainGroup = 2995AF4E31E30F1685B35647;
|
||||||
minimizedProjectReferenceProxies = 1;
|
minimizedProjectReferenceProxies = 1;
|
||||||
preferredProjectObjectVersion = 77;
|
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
@@ -234,7 +233,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "pnpm tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}";
|
shellScript = "export PATH=\"$HOME/.nvm/versions/node/v20.19.5/bin:/opt/homebrew/bin:/usr/local/bin:$PATH\"\npnpm tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}\n";
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
@@ -310,12 +309,11 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ARCHS = (
|
ARCHS = arm64;
|
||||||
arm64,
|
|
||||||
);
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = pomoday_iOS/pomoday_iOS.entitlements;
|
CODE_SIGN_ENTITLEMENTS = pomoday_iOS/pomoday_iOS.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
|
DEVELOPMENT_TEAM = H4J8NKV342;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@@ -327,10 +325,22 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
"LIBRARY_SEARCH_PATHS[arch=arm64]" = (
|
||||||
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)",
|
||||||
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)",
|
||||||
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.paulspenke.pomoday;
|
PRODUCT_BUNDLE_IDENTIFIER = com.paulspenke.pomoday;
|
||||||
PRODUCT_NAME = pomoday;
|
PRODUCT_NAME = "pomoday";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALID_ARCHS = arm64;
|
VALID_ARCHS = arm64;
|
||||||
@@ -341,12 +351,11 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ARCHS = (
|
ARCHS = arm64;
|
||||||
arm64,
|
|
||||||
);
|
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = pomoday_iOS/pomoday_iOS.entitlements;
|
CODE_SIGN_ENTITLEMENTS = pomoday_iOS/pomoday_iOS.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
|
DEVELOPMENT_TEAM = H4J8NKV342;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@@ -358,10 +367,22 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
"LIBRARY_SEARCH_PATHS[arch=arm64]" = (
|
||||||
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)",
|
||||||
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)",
|
||||||
|
"$(SDKROOT)/usr/lib/swift",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
|
||||||
|
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.paulspenke.pomoday;
|
PRODUCT_BUNDLE_IDENTIFIER = com.paulspenke.pomoday;
|
||||||
PRODUCT_NAME = pomoday;
|
PRODUCT_NAME = "pomoday";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALID_ARCHS = arm64;
|
VALID_ARCHS = arm64;
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1430"
|
LastUpgradeVersion = "1430"
|
||||||
version = "1.7">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
buildImplicitDependencies = "YES"
|
buildImplicitDependencies = "YES">
|
||||||
runPostActionsOnFailure = "NO">
|
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForTesting = "YES"
|
buildForTesting = "YES"
|
||||||
@@ -16,7 +15,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
||||||
BuildableName = "pomoday_iOS.app"
|
BuildableName = "pomoday.app"
|
||||||
BlueprintName = "pomoday_iOS"
|
BlueprintName = "pomoday_iOS"
|
||||||
ReferencedContainer = "container:pomoday.xcodeproj">
|
ReferencedContainer = "container:pomoday.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
@@ -27,21 +26,16 @@
|
|||||||
buildConfiguration = "debug"
|
buildConfiguration = "debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
shouldUseLaunchSchemeArgsEnv = "NO"
|
shouldUseLaunchSchemeArgsEnv = "NO">
|
||||||
onlyGenerateCoverageForSpecifiedTargets = "NO">
|
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
||||||
BuildableName = "pomoday_iOS.app"
|
BuildableName = "pomoday.app"
|
||||||
BlueprintName = "pomoday_iOS"
|
BlueprintName = "pomoday_iOS"
|
||||||
ReferencedContainer = "container:pomoday.xcodeproj">
|
ReferencedContainer = "container:pomoday.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<Testables>
|
|
||||||
</Testables>
|
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
<EnvironmentVariables>
|
||||||
<EnvironmentVariable
|
<EnvironmentVariable
|
||||||
key = "RUST_BACKTRACE"
|
key = "RUST_BACKTRACE"
|
||||||
@@ -54,6 +48,8 @@
|
|||||||
isEnabled = "YES">
|
isEnabled = "YES">
|
||||||
</EnvironmentVariable>
|
</EnvironmentVariable>
|
||||||
</EnvironmentVariables>
|
</EnvironmentVariables>
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "debug"
|
buildConfiguration = "debug"
|
||||||
@@ -70,13 +66,11 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
||||||
BuildableName = "pomoday_iOS.app"
|
BuildableName = "pomoday.app"
|
||||||
BlueprintName = "pomoday_iOS"
|
BlueprintName = "pomoday_iOS"
|
||||||
ReferencedContainer = "container:pomoday.xcodeproj">
|
ReferencedContainer = "container:pomoday.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
<EnvironmentVariables>
|
||||||
<EnvironmentVariable
|
<EnvironmentVariable
|
||||||
key = "RUST_BACKTRACE"
|
key = "RUST_BACKTRACE"
|
||||||
@@ -101,13 +95,11 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
BlueprintIdentifier = "DF2F87996592ABEDF947D52A"
|
||||||
BuildableName = "pomoday_iOS.app"
|
BuildableName = "pomoday.app"
|
||||||
BlueprintName = "pomoday_iOS"
|
BlueprintName = "pomoday_iOS"
|
||||||
ReferencedContainer = "container:pomoday.xcodeproj">
|
ReferencedContainer = "container:pomoday.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
<CommandLineArguments>
|
|
||||||
</CommandLineArguments>
|
|
||||||
<EnvironmentVariables>
|
<EnvironmentVariables>
|
||||||
<EnvironmentVariable
|
<EnvironmentVariable
|
||||||
key = "RUST_BACKTRACE"
|
key = "RUST_BACKTRACE"
|
||||||
|
|||||||
@@ -41,4 +41,4 @@
|
|||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
@@ -7,6 +7,7 @@ fn greet(name: &str) -> String {
|
|||||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||||
pub fn run() {
|
pub fn run() {
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
|
.plugin(tauri_plugin_http::init())
|
||||||
.plugin(tauri_plugin_opener::init())
|
.plugin(tauri_plugin_opener::init())
|
||||||
.invoke_handler(tauri::generate_handler![greet])
|
.invoke_handler(tauri::generate_handler![greet])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
|
|||||||
178
src/App.vue
178
src/App.vue
@@ -1,160 +1,34 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { PhCheckSquareOffset, PhListChecks, PhSliders } from '@phosphor-icons/vue';
|
||||||
import { invoke } from "@tauri-apps/api/core";
|
import { useRouter } from 'vue-router';
|
||||||
|
import { computed } from 'vue';
|
||||||
const greetMsg = ref("");
|
const router = useRouter();
|
||||||
const name = ref("");
|
const currentPath = computed(() => router.currentRoute.value.path);
|
||||||
|
|
||||||
async function greet() {
|
|
||||||
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
|
|
||||||
greetMsg.value = await invoke("greet", { name: name.value });
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<main class="container">
|
<div class="overflow-hidden">
|
||||||
<h1>Welcome to Tauri + Vue</h1>
|
|
||||||
|
|
||||||
<div class="row">
|
<main class="pb-40 overflow-y-scroll h-screen">
|
||||||
<a href="https://vite.dev" target="_blank">
|
<RouterView v-slot="{ Component }">
|
||||||
<img src="/vite.svg" class="logo vite" alt="Vite logo" />
|
<Transition name="fade">
|
||||||
</a>
|
<component :is="Component" />
|
||||||
<a href="https://tauri.app" target="_blank">
|
</Transition>
|
||||||
<img src="/tauri.svg" class="logo tauri" alt="Tauri logo" />
|
</RouterView>
|
||||||
</a>
|
</main>
|
||||||
<a href="https://vuejs.org/" target="_blank">
|
<div class="dock dock-xl bg-neutral-400">
|
||||||
<img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
|
<RouterLink to="/create" :class="currentPath === '/create' ? 'dock-active' : ''">
|
||||||
</a>
|
<PhCheckSquareOffset :size="32" />
|
||||||
|
</RouterLink>
|
||||||
|
|
||||||
|
<RouterLink to="/" :class="currentPath === '/' ? 'dock-active' : ''">
|
||||||
|
<PhListChecks :size="32" />
|
||||||
|
</RouterLink>
|
||||||
|
|
||||||
|
<RouterLink to="/settings" :class="currentPath === '/settings' ? 'dock-active' : ''">
|
||||||
|
<PhSliders :size="32" />
|
||||||
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
<p>Click on the Tauri, Vite, and Vue logos to learn more.</p>
|
</div>
|
||||||
|
|
||||||
<form class="row" @submit.prevent="greet">
|
|
||||||
<input id="greet-input" v-model="name" placeholder="Enter a name..." />
|
|
||||||
<button type="submit">Greet</button>
|
|
||||||
</form>
|
|
||||||
<p>{{ greetMsg }}</p>
|
|
||||||
</main>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.logo.vite:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #747bff);
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo.vue:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #249b73);
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 24px;
|
|
||||||
font-weight: 400;
|
|
||||||
|
|
||||||
color: #0f0f0f;
|
|
||||||
background-color: #f6f6f6;
|
|
||||||
|
|
||||||
font-synthesis: none;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container {
|
|
||||||
margin: 0;
|
|
||||||
padding-top: 10vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
height: 6em;
|
|
||||||
padding: 1.5em;
|
|
||||||
will-change: filter;
|
|
||||||
transition: 0.75s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo.tauri:hover {
|
|
||||||
filter: drop-shadow(0 0 2em #24c8db);
|
|
||||||
}
|
|
||||||
|
|
||||||
.row {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
font-weight: 500;
|
|
||||||
color: #646cff;
|
|
||||||
text-decoration: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #535bf2;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
button {
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
padding: 0.6em 1.2em;
|
|
||||||
font-size: 1em;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: inherit;
|
|
||||||
color: #0f0f0f;
|
|
||||||
background-color: #ffffff;
|
|
||||||
transition: border-color 0.25s;
|
|
||||||
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
border-color: #396cd8;
|
|
||||||
}
|
|
||||||
button:active {
|
|
||||||
border-color: #396cd8;
|
|
||||||
background-color: #e8e8e8;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
button {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#greet-input {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background-color: #2f2f2f;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #24c8db;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,
|
|
||||||
button {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #0f0f0f98;
|
|
||||||
}
|
|
||||||
button:active {
|
|
||||||
background-color: #0f0f0f69;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
20
src/components/Tauri.vue
Normal file
20
src/components/Tauri.vue
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { invoke } from "@tauri-apps/api/core";
|
||||||
|
|
||||||
|
const greetMsg = ref("");
|
||||||
|
const name = ref("");
|
||||||
|
|
||||||
|
async function greet() {
|
||||||
|
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
|
||||||
|
greetMsg.value = await invoke("greet", { name: name.value });
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<form class="row" @submit.prevent="greet">
|
||||||
|
<input id="greet-input" v-model="name" placeholder="Enter a name..." />
|
||||||
|
<button class="btn" type="submit">Greet</button>
|
||||||
|
</form>
|
||||||
|
<p>{{ greetMsg }}</p>
|
||||||
|
</template>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { createApp } from "vue";
|
import { createApp } from "vue";
|
||||||
import App from "./App.vue";
|
import App from "./App.vue";
|
||||||
|
import { router } from './router.ts';
|
||||||
|
|
||||||
createApp(App).mount("#app");
|
createApp(App).use(router).mount("#app");
|
||||||
|
|||||||
16
src/router.ts
Normal file
16
src/router.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { createWebHistory, createRouter } from 'vue-router'
|
||||||
|
import ListScreen from './screens/ListScreen.vue';
|
||||||
|
import SettingsScreen from './screens/SettingsScreen.vue';
|
||||||
|
import CreateScreen from './screens/CreateScreen.vue';
|
||||||
|
|
||||||
|
|
||||||
|
const routes = [
|
||||||
|
{ path: '/', component: ListScreen },
|
||||||
|
{ path: '/settings', component: SettingsScreen },
|
||||||
|
{ path: '/create', component: CreateScreen }
|
||||||
|
]
|
||||||
|
|
||||||
|
export const router = createRouter({
|
||||||
|
history: createWebHistory(),
|
||||||
|
routes,
|
||||||
|
})
|
||||||
41
src/screens/CreateScreen.vue
Normal file
41
src/screens/CreateScreen.vue
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { fetch } from '@tauri-apps/plugin-http';
|
||||||
|
import { router } from '../router.ts';
|
||||||
|
import { Task } from '../types.ts';
|
||||||
|
|
||||||
|
const handleSubmit = async(e: Event) => {
|
||||||
|
const data = new FormData(e.target as HTMLFormElement);
|
||||||
|
const task: Partial<Task> = Object.fromEntries(data)
|
||||||
|
|
||||||
|
const nextId = await fetch(
|
||||||
|
'https://automation.deep-node.de/webhook/d49dde4c-530d-46ee-8205-d1357563ac16',
|
||||||
|
{ method: 'GET', headers: { 'Content-Type': 'application/json', 'Authorization': 'Basic cGF1bDoxMG1hYmF1MTU=', }}
|
||||||
|
).then((response) => response.json()).then((json) => json.nextId as number).catch(() => null);
|
||||||
|
|
||||||
|
if (!nextId) return;
|
||||||
|
task.id_ = nextId;
|
||||||
|
task.logs = [];
|
||||||
|
|
||||||
|
await fetch(
|
||||||
|
'https://automation.deep-node.de/webhook/e5880167-9322-4d7b-8a38-e06bae8a7734/list',
|
||||||
|
{ method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ tasks: [task] } )}
|
||||||
|
);
|
||||||
|
await router.push('/');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<form @submit.prevent="handleSubmit">
|
||||||
|
<fieldset class="fieldset">
|
||||||
|
<legend class="fieldset-legend">What is your name?</legend>
|
||||||
|
<input type="text" class="input" name="title" placeholder="Type here" />
|
||||||
|
</fieldset>
|
||||||
|
<button class="btn btn-primary">Submit</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
73
src/screens/ListScreen.vue
Normal file
73
src/screens/ListScreen.vue
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { fetch } from '@tauri-apps/plugin-http';
|
||||||
|
import { computed, onMounted, ref } from 'vue';
|
||||||
|
import { Task, TaskStatus } from '../types.ts';
|
||||||
|
import { PhCaretDown, PhCaretUp, PhCheckSquare, PhDotsThree, PhPlay, PhSquare } from '@phosphor-icons/vue';
|
||||||
|
|
||||||
|
const rawTasks = ref<Task[]>([]);
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
rawTasks.value = await fetch('https://automation.deep-node.de/webhook/e5880167-9322-4d7b-8a38-e06bae8a7734/list', { method: 'GET', headers: { 'Content-Type': 'application/json'} })
|
||||||
|
.then(response => response.json())
|
||||||
|
.then((data: { tasks: Task[] }) => rawTasks.value = data.tasks ?? [])
|
||||||
|
.catch(() => []);
|
||||||
|
})
|
||||||
|
|
||||||
|
const visibleTasks = computed(() => rawTasks.value.filter(task => !task.archived))
|
||||||
|
|
||||||
|
const categorizedTasks = computed(() => visibleTasks.value.reduce((acc, task) => {
|
||||||
|
const tag = task.tag ?? 'Uncategorized';
|
||||||
|
acc[tag] = acc[tag] ?? [];
|
||||||
|
acc[tag].push(task);
|
||||||
|
return acc;
|
||||||
|
}, {} as Record<string, Task[]>))
|
||||||
|
|
||||||
|
const collapsed = ref<string[]>([]);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="flex flex-col gap-4">
|
||||||
|
<div class="m-4 rounded-box border border-neutral-100 shadow-md" v-for="(tasks, category) in categorizedTasks" :key="category">
|
||||||
|
<div class="m-4 flex justify-between items-center">
|
||||||
|
<div class="badge badge-xl badge-primary">{{ category }}</div>
|
||||||
|
<button
|
||||||
|
@click="collapsed.includes(category) ? collapsed.splice(collapsed.indexOf(category), 1) : collapsed.push(category)"
|
||||||
|
class="btn btn-square btn-sm"
|
||||||
|
>
|
||||||
|
<PhCaretDown :size="20" v-if="collapsed.includes(category)" />
|
||||||
|
<PhCaretUp :size="20" v-else />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<Transition name="fade">
|
||||||
|
<ul v-if="!collapsed.includes(category)" class="list bg-base-100 rounded-box" >
|
||||||
|
<li class="list-row" v-for="task in tasks" :key="task.id">
|
||||||
|
<div class="flex items-center justify-center">
|
||||||
|
<PhSquare v-if="task.status === TaskStatus.WAIT" :size="20" />
|
||||||
|
<PhCheckSquare v-else-if="task.status === TaskStatus.DONE" :size="20" weight="fill" class="text-success" />
|
||||||
|
<PhSquare v-else-if="task.status === TaskStatus.FLAG" :size="20" weight="fill" class="text-warning" />
|
||||||
|
<PhPlay v-else-if="task.status === TaskStatus.WIP" :size="20" weight="fill" class="text-info" />
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<div>{{task.title}}</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-square btn-ghost btn-sm">
|
||||||
|
<PhDotsThree :size="24" weight="regular" />
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</Transition>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
13
src/screens/SettingsScreen.vue
Normal file
13
src/screens/SettingsScreen.vue
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
Settings SCREEN
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
50
src/styles/main.css
Normal file
50
src/styles/main.css
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
@import "tailwindcss";
|
||||||
|
@plugin "daisyui";
|
||||||
|
|
||||||
|
|
||||||
|
@plugin "daisyui/theme" {
|
||||||
|
name: "emerald";
|
||||||
|
default: true;
|
||||||
|
prefersdark: true;
|
||||||
|
color-scheme: "light";
|
||||||
|
--color-base-100: oklch(100% 0 0);
|
||||||
|
--color-base-200: oklch(93% 0 0);
|
||||||
|
--color-base-300: oklch(86% 0 0);
|
||||||
|
--color-base-content: oklch(35.519% 0.032 262.988);
|
||||||
|
--color-primary: oklch(76.662% 0.135 153.45);
|
||||||
|
--color-primary-content: oklch(33.387% 0.04 162.24);
|
||||||
|
--color-secondary: oklch(61.302% 0.202 261.294);
|
||||||
|
--color-secondary-content: oklch(100% 0 0);
|
||||||
|
--color-accent: oklch(72.772% 0.149 33.2);
|
||||||
|
--color-accent-content: oklch(0% 0 0);
|
||||||
|
--color-neutral: oklch(35.519% 0.032 262.988);
|
||||||
|
--color-neutral-content: oklch(98.462% 0.001 247.838);
|
||||||
|
--color-info: oklch(72.06% 0.191 231.6);
|
||||||
|
--color-info-content: oklch(0% 0 0);
|
||||||
|
--color-success: oklch(64.8% 0.15 160);
|
||||||
|
--color-success-content: oklch(0% 0 0);
|
||||||
|
--color-warning: oklch(84.71% 0.199 83.87);
|
||||||
|
--color-warning-content: oklch(0% 0 0);
|
||||||
|
--color-error: oklch(71.76% 0.221 22.18);
|
||||||
|
--color-error-content: oklch(0% 0 0);
|
||||||
|
--radius-selector: 1rem;
|
||||||
|
--radius-field: 0.5rem;
|
||||||
|
--radius-box: 1rem;
|
||||||
|
--size-selector: 0.25rem;
|
||||||
|
--size-field: 0.25rem;
|
||||||
|
--border: 1px;
|
||||||
|
--depth: 0;
|
||||||
|
--noise: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Transitions */
|
||||||
|
|
||||||
|
.fade-enter-active,
|
||||||
|
.fade-leave-active {
|
||||||
|
transition: opacity 0.25s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-enter-from,
|
||||||
|
.fade-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
25
src/types.ts
Normal file
25
src/types.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
export enum TaskStatus {
|
||||||
|
NONE,
|
||||||
|
DONE,
|
||||||
|
WIP,
|
||||||
|
WAIT,
|
||||||
|
FLAG,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Worklog = {
|
||||||
|
start: number;
|
||||||
|
end: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Task = {
|
||||||
|
"uuid": string,
|
||||||
|
"archived": boolean,
|
||||||
|
"tag": string,
|
||||||
|
"title": string,
|
||||||
|
"status": TaskStatus,
|
||||||
|
"lastaction": number,
|
||||||
|
"logs": Worklog[],
|
||||||
|
"dueDate": number,
|
||||||
|
"id_": number,
|
||||||
|
"id": number
|
||||||
|
}
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import vue from "@vitejs/plugin-vue";
|
import vue from "@vitejs/plugin-vue";
|
||||||
|
import tailwindcss from '@tailwindcss/vite'
|
||||||
|
|
||||||
|
|
||||||
// @ts-expect-error process is a nodejs global
|
// @ts-expect-error process is a nodejs global
|
||||||
const host = process.env.TAURI_DEV_HOST;
|
const host = process.env.TAURI_DEV_HOST;
|
||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default defineConfig(async () => ({
|
export default defineConfig(async () => ({
|
||||||
plugins: [vue()],
|
plugins: [vue(), tailwindcss(),],
|
||||||
|
|
||||||
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
|
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user