Compare commits
82 Commits
ts-db-sele
...
fix-sql-in
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15e4023ced | ||
|
|
4b48f09112 | ||
|
|
6c7df7c1f9 | ||
|
|
0b9b440a7a | ||
|
|
ebb83aca51 | ||
|
|
e5c2ef47ac | ||
|
|
af068d1f89 | ||
|
|
35fe969b1b | ||
|
|
cc44fad62e | ||
|
|
42294d4a53 | ||
|
|
d8fcd43324 | ||
|
|
ccb07e12db | ||
|
|
f2267587c8 | ||
|
|
4bc34776fb | ||
|
|
63657a8496 | ||
|
|
b3e82c55f6 | ||
|
|
9a45d6707d | ||
|
|
46138997d1 | ||
|
|
c19d5a5722 | ||
|
|
c2cb61eb70 | ||
|
|
ca5cd55585 | ||
|
|
6fd5164987 | ||
|
|
60a864a790 | ||
|
|
c510f722ef | ||
|
|
1fed3ebbd7 | ||
|
|
84e4cda6ad | ||
|
|
4fb5bbca34 | ||
|
|
e0805c125f | ||
|
|
a2fc6bdd31 | ||
|
|
866f4891ce | ||
|
|
0f7a1e6b97 | ||
|
|
0b15ba18a0 | ||
|
|
cfc8186da1 | ||
|
|
47ad1492dc | ||
|
|
90af0466f4 | ||
|
|
98e4ece50a | ||
|
|
9e82032595 | ||
|
|
abb6e86f35 | ||
|
|
c8d14cae09 | ||
|
|
d815a22f6b | ||
|
|
d5e2030d23 | ||
|
|
f9b8dde199 | ||
|
|
c17cd28525 | ||
|
|
5ebbff4f87 | ||
|
|
ca2a930bd5 | ||
|
|
7346198360 | ||
|
|
17c4d168fa | ||
|
|
b74175e660 | ||
|
|
3628deee95 | ||
|
|
7650eed644 | ||
|
|
eeeb1d3bcd | ||
|
|
3863ce369d | ||
|
|
e10b105756 | ||
|
|
89006275a0 | ||
|
|
b4f423eac0 | ||
|
|
d5f55cee80 | ||
|
|
fcf110749d | ||
|
|
6db52ca7a8 | ||
|
|
e91f8e7e06 | ||
|
|
1425671d16 | ||
|
|
61364fb846 | ||
|
|
1a5f83d78c | ||
|
|
b0deedb411 | ||
|
|
103d95bbc8 | ||
|
|
d11fc59ec9 | ||
|
|
1c931cf01c | ||
|
|
7f50c73866 | ||
|
|
a7cde1f90d | ||
|
|
398ada0afd | ||
|
|
8b928b3b21 | ||
|
|
3897a5a51c | ||
|
|
94f94497af | ||
|
|
a72fd74c5e | ||
|
|
5214549ed3 | ||
|
|
3c8212e130 | ||
|
|
eface19216 | ||
|
|
f413fa03ae | ||
|
|
81b30d74e4 | ||
|
|
0fddcac76d | ||
|
|
1511587e88 | ||
|
|
ff7c358b83 | ||
|
|
f88b00ae77 |
6
.github/actions/bump-package-versions
vendored
@@ -1,7 +1,11 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
version="${1#v}"
|
||||
if [ "$#" -gt 0 ]; then
|
||||
version="${1#v}"
|
||||
else
|
||||
version=""
|
||||
fi
|
||||
|
||||
files_to_bump=(
|
||||
packages/api/package.json
|
||||
|
||||
2
.github/workflows/docker-edge.yml
vendored
@@ -24,6 +24,7 @@ env:
|
||||
IMAGES: |
|
||||
actualbudget/actual-server
|
||||
ghcr.io/actualbudget/actual-server
|
||||
ghcr.io/actualbudget/actual
|
||||
|
||||
# Creates the following tags:
|
||||
# - actual-server:edge
|
||||
@@ -33,6 +34,7 @@ env:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: ${{ github.event.repository.fork == false }}
|
||||
name: Build Docker image
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
|
||||
1
.github/workflows/docker-release.yml
vendored
@@ -13,6 +13,7 @@ env:
|
||||
IMAGES: |
|
||||
actualbudget/actual-server
|
||||
ghcr.io/actualbudget/actual-server
|
||||
ghcr.io/actualbudget/actual
|
||||
|
||||
# Creates the following tags:
|
||||
# - actual-server:latest (see docker/metadata-action flavor inputs, below)
|
||||
|
||||
3
.gitignore
vendored
@@ -53,3 +53,6 @@ bundle.mobile.js.map
|
||||
|
||||
# build output
|
||||
package.tgz
|
||||
|
||||
# Fly.io configuration
|
||||
fly.toml
|
||||
|
||||
@@ -9,6 +9,7 @@ if ! [ -d packages/desktop-client/locale ]; then
|
||||
git clone https://github.com/actualbudget/translations packages/desktop-client/locale
|
||||
fi
|
||||
pushd packages/desktop-client/locale > /dev/null
|
||||
git checkout .
|
||||
git pull
|
||||
popd > /dev/null
|
||||
packages/desktop-client/bin/remove-untranslated-languages
|
||||
|
||||
@@ -42,6 +42,7 @@ if ! [ -d packages/desktop-client/locale ]; then
|
||||
git clone https://github.com/actualbudget/translations packages/desktop-client/locale
|
||||
fi
|
||||
pushd packages/desktop-client/locale > /dev/null
|
||||
git checkout .
|
||||
git pull
|
||||
popd > /dev/null
|
||||
packages/desktop-client/bin/remove-untranslated-languages
|
||||
|
||||
@@ -94,6 +94,7 @@ export default [
|
||||
'packages/api/@types',
|
||||
'packages/api/migrations',
|
||||
'packages/crdt/dist',
|
||||
'packages/component-library/src/icons/**/*',
|
||||
'packages/desktop-client/bundle.browser.js',
|
||||
'packages/desktop-client/build/',
|
||||
'packages/desktop-client/build-electron/',
|
||||
@@ -102,7 +103,6 @@ export default [
|
||||
'packages/desktop-client/public/data/',
|
||||
'packages/desktop-client/**/node_modules/*',
|
||||
'packages/desktop-client/node_modules/',
|
||||
'packages/desktop-client/src/icons/**/*',
|
||||
'packages/desktop-client/test-results/',
|
||||
'packages/desktop-client/playwright-report/',
|
||||
'packages/desktop-electron/client-build/',
|
||||
@@ -789,7 +789,6 @@ export default [
|
||||
'packages/desktop-client/src/components/select/DateSelect.tsx',
|
||||
'packages/desktop-client/src/components/sidebar/Tools.tsx',
|
||||
'packages/desktop-client/src/components/sort.tsx',
|
||||
'packages/desktop-client/src/components/spreadsheet/useSheetValue.ts',
|
||||
],
|
||||
|
||||
rules: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@actual-app/api",
|
||||
"version": "25.2.1",
|
||||
"version": "25.3.1",
|
||||
"license": "MIT",
|
||||
"description": "An API for Actual",
|
||||
"engines": {
|
||||
|
||||
@@ -7,14 +7,22 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "^11.13.4",
|
||||
"react-aria-components": "^1.4.1"
|
||||
"react-aria-components": "^1.7.0",
|
||||
"usehooks-ts": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@svgr/cli": "^8.1.0",
|
||||
"@types/react": "^18.2.0",
|
||||
"react": "18.2.0"
|
||||
},
|
||||
"exports": {
|
||||
"./icons/*": "./src/icons/*.tsx",
|
||||
"./hooks/*": "./src/hooks/*.ts",
|
||||
"./icons/logo": "./src/icons/logo/index.ts",
|
||||
"./icons/v0": "./src/icons/v0/index.ts",
|
||||
"./icons/v1": "./src/icons/v1/index.ts",
|
||||
"./icons/v2": "./src/icons/v2/index.ts",
|
||||
"./icons/AnimatedLoading": "./src/icons/AnimatedLoading.tsx",
|
||||
"./icons/Loading": "./src/icons/Loading.tsx",
|
||||
"./aligned-text": "./src/AlignedText.tsx",
|
||||
"./block": "./src/Block.tsx",
|
||||
"./button": "./src/Button.tsx",
|
||||
@@ -22,10 +30,12 @@
|
||||
"./form-error": "./src/FormError.tsx",
|
||||
"./initial-focus": "./src/InitialFocus.ts",
|
||||
"./inline-field": "./src/InlineField.tsx",
|
||||
"./input": "./src/Input.tsx",
|
||||
"./label": "./src/Label.tsx",
|
||||
"./menu": "./src/Menu.tsx",
|
||||
"./paragraph": "./src/Paragraph.tsx",
|
||||
"./popover": "./src/Popover.tsx",
|
||||
"./select": "./src/Select.tsx",
|
||||
"./space-between": "./src/SpaceBetween.tsx",
|
||||
"./stack": "./src/Stack.tsx",
|
||||
"./styles": "./src/styles.ts",
|
||||
@@ -36,5 +46,8 @@
|
||||
"./toggle": "./src/Toggle.tsx",
|
||||
"./tooltip": "./src/Tooltip.tsx",
|
||||
"./view": "./src/View.tsx"
|
||||
},
|
||||
"scripts": {
|
||||
"generate:icons": "rm src/icons/*/*.tsx; cd src/icons && svgr --template template.ts --index-template index-template.ts --typescript --expand-props start -d . ."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,12 @@ import React, {
|
||||
type InputHTMLAttributes,
|
||||
type KeyboardEvent,
|
||||
type Ref,
|
||||
useRef,
|
||||
} from 'react';
|
||||
|
||||
import { styles } from '@actual-app/components/styles';
|
||||
import { css, cx } from '@emotion/css';
|
||||
|
||||
import { useMergedRefs } from '../../hooks/useMergedRefs';
|
||||
import { useProperFocus } from '../../hooks/useProperFocus';
|
||||
import { theme, type CSSProperties } from '../../style';
|
||||
import { styles, type CSSProperties } from './styles';
|
||||
import { theme } from './theme';
|
||||
|
||||
export const defaultInputStyle = {
|
||||
outline: 0,
|
||||
@@ -29,7 +26,6 @@ type InputProps = InputHTMLAttributes<HTMLInputElement> & {
|
||||
onEscape?: (event: KeyboardEvent<HTMLInputElement>) => void;
|
||||
onChangeValue?: (newValue: string) => void;
|
||||
onUpdate?: (newValue: string) => void;
|
||||
focused?: boolean;
|
||||
};
|
||||
|
||||
export function Input({
|
||||
@@ -39,18 +35,12 @@ export function Input({
|
||||
onEscape,
|
||||
onChangeValue,
|
||||
onUpdate,
|
||||
focused,
|
||||
className,
|
||||
...nativeProps
|
||||
}: InputProps) {
|
||||
const ref = useRef<HTMLInputElement>(null);
|
||||
useProperFocus(ref, focused);
|
||||
|
||||
const mergedRef = useMergedRefs<HTMLInputElement>(ref, inputRef);
|
||||
|
||||
return (
|
||||
<input
|
||||
ref={mergedRef}
|
||||
ref={inputRef}
|
||||
className={cx(
|
||||
css(
|
||||
defaultInputStyle,
|
||||
@@ -1,11 +1,10 @@
|
||||
import { useRef, useState, type CSSProperties } from 'react';
|
||||
|
||||
import { Button } from '@actual-app/components/button';
|
||||
import { Menu } from '@actual-app/components/menu';
|
||||
import { Popover } from '@actual-app/components/popover';
|
||||
import { View } from '@actual-app/components/view';
|
||||
|
||||
import { SvgExpandArrow } from '../../icons/v0';
|
||||
import { Button } from './Button';
|
||||
import { SvgExpandArrow } from './icons/v0';
|
||||
import { Menu } from './Menu';
|
||||
import { Popover } from './Popover';
|
||||
import { View } from './View';
|
||||
|
||||
function isValueOption<Value>(
|
||||
option: readonly [Value, string] | typeof Menu.line,
|
||||
23
packages/component-library/src/hooks/useResponsive.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { useWindowSize } from 'usehooks-ts';
|
||||
|
||||
import { breakpoints } from '../tokens';
|
||||
|
||||
export function useResponsive() {
|
||||
const { height, width } = useWindowSize({
|
||||
debounceDelay: 250,
|
||||
});
|
||||
|
||||
// Possible view modes: narrow, small, medium, wide
|
||||
// To check if we're at least small width, check !isNarrowWidth
|
||||
return {
|
||||
// atLeastMediumWidth is provided to avoid checking (isMediumWidth || isWideWidth)
|
||||
atLeastMediumWidth: width >= breakpoints.medium,
|
||||
isNarrowWidth: width < breakpoints.small,
|
||||
isSmallWidth: width >= breakpoints.small && width < breakpoints.medium,
|
||||
isMediumWidth: width >= breakpoints.medium && width < breakpoints.wide,
|
||||
// No atLeastWideWidth because that's identical to isWideWidth
|
||||
isWideWidth: width >= breakpoints.wide,
|
||||
height,
|
||||
width,
|
||||
};
|
||||
}
|
||||
@@ -6,8 +6,8 @@ function indexTemplate(filePaths) {
|
||||
const basename = path.basename(filePath, path.extname(filePath));
|
||||
const exportName = `Svg${basename}`;
|
||||
return `export { ${exportName} } from './${basename}'`;
|
||||
})
|
||||
});
|
||||
return exportEntries.join('\n');
|
||||
}
|
||||
|
||||
module.exports = indexTemplate
|
||||
module.exports = indexTemplate;
|
||||
|
Before Width: | Height: | Size: 1006 B After Width: | Height: | Size: 1006 B |
@@ -1,5 +1,5 @@
|
||||
// @ts-strict-ignore
|
||||
const template = ({ imports, interfaces, componentName, props, jsx }, { tpl }) => {
|
||||
const tmpl = ({ imports, interfaces, componentName, props, jsx }, { tpl }) => {
|
||||
return tpl`
|
||||
${imports};
|
||||
|
||||
@@ -8,7 +8,7 @@ ${interfaces};
|
||||
export const ${componentName} = (${props}) => (
|
||||
${jsx}
|
||||
);
|
||||
`
|
||||
}
|
||||
`;
|
||||
};
|
||||
|
||||
module.exports = template
|
||||
module.exports = tmpl;
|
||||
|
Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 601 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 817 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 379 B After Width: | Height: | Size: 379 B |
|
Before Width: | Height: | Size: 1005 B After Width: | Height: | Size: 1005 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |