Compare commits
10 Commits
ac07cea06e
...
2ffd3a64cb
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ffd3a64cb | |||
|
|
62d97413bc | ||
|
|
aa19cba156 | ||
|
|
d45016468a | ||
|
|
ffd55a77e8 | ||
|
|
51f7728c17 | ||
|
|
00ecfc4951 | ||
|
|
e2f9f636ae | ||
|
|
8a845df38c | ||
|
|
bdc43d6d54 |
48
.github/workflows/ios.verify.sdk.yml
vendored
Normal file
48
.github/workflows/ios.verify.sdk.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: iOS SDK Verify
|
||||||
|
|
||||||
|
on: workflow_dispatch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
verify-ios-sdk:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: packages/mobile
|
||||||
|
runs-on: macos-15
|
||||||
|
timeout-minutes: 90
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Select Xcode 26
|
||||||
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
|
with:
|
||||||
|
xcode-version: "26.0"
|
||||||
|
|
||||||
|
- name: Verify Xcode and available iOS SDKs
|
||||||
|
run: |
|
||||||
|
xcodebuild -version
|
||||||
|
xcodebuild -showsdks | grep -E "iphoneos"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --immutable && yarn install:pods
|
||||||
|
|
||||||
|
- name: Build mobile workspace dependencies
|
||||||
|
working-directory: ${{ github.workspace }}
|
||||||
|
run: yarn build:mobile
|
||||||
|
|
||||||
|
- name: Archive app without signing or upload
|
||||||
|
run: |
|
||||||
|
xcodebuild \
|
||||||
|
-workspace ios/StandardNotes.xcworkspace \
|
||||||
|
-scheme StandardNotes \
|
||||||
|
-configuration Release \
|
||||||
|
-destination "generic/platform=iOS" \
|
||||||
|
-archivePath build/StandardNotes.xcarchive \
|
||||||
|
CODE_SIGNING_ALLOWED=NO \
|
||||||
|
CODE_SIGNING_REQUIRED=NO \
|
||||||
|
archive
|
||||||
|
|
||||||
|
- name: Validate archive SDK metadata
|
||||||
|
run: |
|
||||||
|
plutil -p build/StandardNotes.xcarchive/Info.plist | grep -E "DTSDKName"
|
||||||
|
plutil -p build/StandardNotes.xcarchive/Info.plist | grep -E "iphoneos26\\."
|
||||||
29
Dockerfile
Normal file
29
Dockerfile
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Etap 1: build
|
||||||
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
RUN corepack enable
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN yarn install --frozen-lockfile
|
||||||
|
RUN yarn build:web
|
||||||
|
|
||||||
|
# Etap 2: serwer nginx
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
COPY --from=builder /app/packages/web/dist /usr/share/nginx/html
|
||||||
|
|
||||||
|
# SPA fallback
|
||||||
|
RUN printf 'server {\n\
|
||||||
|
listen 80;\n\
|
||||||
|
server_name _;\n\
|
||||||
|
root /usr/share/nginx/html;\n\
|
||||||
|
index index.html;\n\
|
||||||
|
location / {\n\
|
||||||
|
try_files $uri /index.html;\n\
|
||||||
|
}\n\
|
||||||
|
}\n' > /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [1.1.580](https://github.com/standardnotes/app/compare/@standardnotes/clipper@1.1.579...@standardnotes/clipper@1.1.580) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/clipper
|
||||||
|
|
||||||
|
## [1.1.579](https://github.com/standardnotes/app/compare/@standardnotes/clipper@1.1.578...@standardnotes/clipper@1.1.579) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/clipper
|
||||||
|
|
||||||
## [1.1.578](https://github.com/standardnotes/app/compare/@standardnotes/clipper@1.1.577...@standardnotes/clipper@1.1.578) (2026-02-24)
|
## [1.1.578](https://github.com/standardnotes/app/compare/@standardnotes/clipper@1.1.577...@standardnotes/clipper@1.1.578) (2026-02-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/clipper
|
**Note:** Version bump only for package @standardnotes/clipper
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/clipper",
|
"name": "@standardnotes/clipper",
|
||||||
"description": "Web clipper browser extension for Standard Notes",
|
"description": "Web clipper browser extension for Standard Notes",
|
||||||
"version": "1.1.578",
|
"version": "1.1.580",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
|
"build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [3.110.185](https://github.com/standardnotes/app/compare/@standardnotes/desktop@3.201.20...@standardnotes/desktop@3.110.185) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/desktop
|
||||||
|
|
||||||
|
## [3.110.184](https://github.com/standardnotes/app/compare/@standardnotes/desktop@3.201.19...@standardnotes/desktop@3.110.184) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/desktop
|
||||||
|
|
||||||
## [3.110.183](https://github.com/standardnotes/app/compare/@standardnotes/desktop@3.201.18...@standardnotes/desktop@3.110.183) (2026-02-24)
|
## [3.110.183](https://github.com/standardnotes/app/compare/@standardnotes/desktop@3.201.18...@standardnotes/desktop@3.110.183) (2026-02-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/desktop
|
**Note:** Version bump only for package @standardnotes/desktop
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/desktop",
|
"name": "@standardnotes/desktop",
|
||||||
"main": "./app/dist/index.js",
|
"main": "./app/dist/index.js",
|
||||||
"version": "3.110.183",
|
"version": "3.110.185",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"author": "Standard Notes.",
|
"author": "Standard Notes.",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [3.58.245](https://github.com/standardnotes/app/compare/@standardnotes/mobile@3.58.244...@standardnotes/mobile@3.58.245) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/mobile
|
||||||
|
|
||||||
|
## [3.58.244](https://github.com/standardnotes/app/compare/@standardnotes/mobile@3.58.243...@standardnotes/mobile@3.58.244) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/mobile
|
||||||
|
|
||||||
## [3.58.243](https://github.com/standardnotes/app/compare/@standardnotes/mobile@3.58.242...@standardnotes/mobile@3.58.243) (2026-02-24)
|
## [3.58.243](https://github.com/standardnotes/app/compare/@standardnotes/mobile@3.58.242...@standardnotes/mobile@3.58.243) (2026-02-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/mobile
|
**Note:** Version bump only for package @standardnotes/mobile
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/mobile",
|
"name": "@standardnotes/mobile",
|
||||||
"version": "3.58.243",
|
"version": "3.58.245",
|
||||||
"author": "Standard Notes.",
|
"author": "Standard Notes.",
|
||||||
"private": true,
|
"private": true,
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [1.4.885](https://github.com/standardnotes/app/compare/@standardnotes/releases@1.4.884...@standardnotes/releases@1.4.885) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/releases
|
||||||
|
|
||||||
|
## [1.4.884](https://github.com/standardnotes/app/compare/@standardnotes/releases@1.4.883...@standardnotes/releases@1.4.884) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/releases
|
||||||
|
|
||||||
## [1.4.883](https://github.com/standardnotes/app/compare/@standardnotes/releases@1.4.882...@standardnotes/releases@1.4.883) (2026-02-24)
|
## [1.4.883](https://github.com/standardnotes/app/compare/@standardnotes/releases@1.4.882...@standardnotes/releases@1.4.883) (2026-02-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @standardnotes/releases
|
**Note:** Version bump only for package @standardnotes/releases
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/releases",
|
"name": "@standardnotes/releases",
|
||||||
"version": "1.4.883",
|
"version": "1.4.885",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/standardnotes/app",
|
"url": "https://github.com/standardnotes/app",
|
||||||
|
|||||||
@@ -683,7 +683,7 @@ export class LegacyApiService
|
|||||||
throw Error('Cannot download offline repo without url and offlineKEy')
|
throw Error('Cannot download offline repo without url and offlineKEy')
|
||||||
}
|
}
|
||||||
|
|
||||||
const TRUSTED_FEATURE_HOSTS = ['api.standardnotes.com', 'localhost']
|
const TRUSTED_FEATURE_HOSTS = ['api.standardnotes.com', 'localhost', 'apinotes.radmit.pl']
|
||||||
|
|
||||||
const { hostname } = new URL(featuresUrl)
|
const { hostname } = new URL(featuresUrl)
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ export class FeaturesService
|
|||||||
|
|
||||||
private getFeatureStatusUseCase = new GetFeatureStatusUseCase(this.items)
|
private getFeatureStatusUseCase = new GetFeatureStatusUseCase(this.items)
|
||||||
|
|
||||||
private readonly PROD_OFFLINE_FEATURES_URL = 'https://api.standardnotes.com/v1/offline/features'
|
private readonly PROD_OFFLINE_FEATURES_URL = 'https://apinotes.radmit.pl/v1/offline/features'
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private storage: StorageServiceInterface,
|
private storage: StorageServiceInterface,
|
||||||
|
|||||||
@@ -3,6 +3,19 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [3.201.21](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.20...@standardnotes/web@3.201.21) (2026-03-06)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @standardnotes/web
|
||||||
|
|
||||||
|
## [3.201.20](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.19...@standardnotes/web@3.201.20) (2026-03-06)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Adjusts lists items left marin on iOS ([#2991](https://github.com/standardnotes/app/issues/2991)) ([e2f9f63](https://github.com/standardnotes/app/commit/e2f9f636ae61929101ac778fde4a388e48f89179))
|
||||||
|
* Fixes dropdowns styling when labels are too long ([#2989](https://github.com/standardnotes/app/issues/2989)) ([bdc43d6](https://github.com/standardnotes/app/commit/bdc43d6d5496b10fbcefd501420bd79cea7db39e))
|
||||||
|
* Fixes prompt for Cmd/Ctrl+Backspace command on trashed note ([#2990](https://github.com/standardnotes/app/issues/2990)) ([8a845df](https://github.com/standardnotes/app/commit/8a845df38c98f774e52e968a94ec40dba64ad8cd))
|
||||||
|
* Renders single line breaks properly on Super editor Show markdown ([#2988](https://github.com/standardnotes/app/issues/2988)) ([ac07cea](https://github.com/standardnotes/app/commit/ac07cea06efa041957d1ac227dd6e9ff2190b613))
|
||||||
|
|
||||||
## [3.201.19](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.18...@standardnotes/web@3.201.19) (2026-02-24)
|
## [3.201.19](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.18...@standardnotes/web@3.201.19) (2026-02-24)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -1,5 +1,36 @@
|
|||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"version": "3.201.21",
|
||||||
|
"title": "[3.201.21](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.20...@standardnotes/web@3.201.21) (2026-03-06)",
|
||||||
|
"date": null,
|
||||||
|
"body": "**Note:** Version bump only for package @standardnotes/web",
|
||||||
|
"parsed": {
|
||||||
|
"_": [
|
||||||
|
"Note: Version bump only for package @standardnotes/web"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "3.201.20",
|
||||||
|
"title": "[3.201.20](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.19...@standardnotes/web@3.201.20) (2026-03-06)",
|
||||||
|
"date": null,
|
||||||
|
"body": "### Bug Fixes\n\n* Adjusts lists items left marin on iOS ([#2991](https://github.com/standardnotes/app/issues/2991)) ([e2f9f63](https://github.com/standardnotes/app/commit/e2f9f636ae61929101ac778fde4a388e48f89179))\n* Fixes dropdowns styling when labels are too long ([#2989](https://github.com/standardnotes/app/issues/2989)) ([bdc43d6](https://github.com/standardnotes/app/commit/bdc43d6d5496b10fbcefd501420bd79cea7db39e))\n* Fixes prompt for Cmd/Ctrl+Backspace command on trashed note ([#2990](https://github.com/standardnotes/app/issues/2990)) ([8a845df](https://github.com/standardnotes/app/commit/8a845df38c98f774e52e968a94ec40dba64ad8cd))\n* Renders single line breaks properly on Super editor Show markdown ([#2988](https://github.com/standardnotes/app/issues/2988)) ([ac07cea](https://github.com/standardnotes/app/commit/ac07cea06efa041957d1ac227dd6e9ff2190b613))",
|
||||||
|
"parsed": {
|
||||||
|
"_": [
|
||||||
|
"Adjusts lists items left marin on iOS (#2991) (e2f9f63)",
|
||||||
|
"Fixes dropdowns styling when labels are too long (#2989) (bdc43d6)",
|
||||||
|
"Fixes prompt for Cmd/Ctrl+Backspace command on trashed note (#2990) (8a845df)",
|
||||||
|
"Renders single line breaks properly on Super editor Show markdown (#2988) (ac07cea)"
|
||||||
|
],
|
||||||
|
"Bug Fixes": [
|
||||||
|
"Adjusts lists items left marin on iOS (#2991) (e2f9f63)",
|
||||||
|
"Fixes dropdowns styling when labels are too long (#2989) (bdc43d6)",
|
||||||
|
"Fixes prompt for Cmd/Ctrl+Backspace command on trashed note (#2990) (8a845df)",
|
||||||
|
"Renders single line breaks properly on Super editor Show markdown (#2988) (ac07cea)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "3.201.19",
|
"version": "3.201.19",
|
||||||
"title": "[3.201.19](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.18...@standardnotes/web@3.201.19) (2026-02-24)",
|
"title": "[3.201.19](https://github.com/standardnotes/app/compare/@standardnotes/web@3.201.18...@standardnotes/web@3.201.19) (2026-02-24)",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@standardnotes/web",
|
"name": "@standardnotes/web",
|
||||||
"version": "3.201.19",
|
"version": "3.201.21",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"main": "dist/app.js",
|
"main": "dist/app.js",
|
||||||
"author": "Standard Notes",
|
"author": "Standard Notes",
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export class WebApplication extends SNApplication implements WebApplicationInter
|
|||||||
/**
|
/**
|
||||||
* iOS file:// based origin does not work with production cookies
|
* iOS file:// based origin does not work with production cookies
|
||||||
*/
|
*/
|
||||||
apiVersion: platform === Platform.Ios || platform === Platform.Android ? ApiVersion.v0 : ApiVersion.v1,
|
apiVersion: platform === Platform.Ios || platform === Platform.Android ? ApiVersion.v0 : ApiVersion.v0,
|
||||||
loadBatchSize:
|
loadBatchSize:
|
||||||
deviceInterface.environment === Environment.Mobile ? 250 : ApplicationOptionsDefaults.loadBatchSize,
|
deviceInterface.environment === Environment.Mobile ? 250 : ApplicationOptionsDefaults.loadBatchSize,
|
||||||
sleepBetweenBatches:
|
sleepBetweenBatches:
|
||||||
|
|||||||
@@ -166,9 +166,22 @@ const ConfirmPassword: FunctionComponent<Props> = ({ setMenuPane, email, passwor
|
|||||||
const confirmPasswordForm = (
|
const confirmPasswordForm = (
|
||||||
<>
|
<>
|
||||||
<div className="mb-3 px-3 text-sm">
|
<div className="mb-3 px-3 text-sm">
|
||||||
{c('Info').jt`Because your notes are encrypted using your password, ${(
|
{
|
||||||
<span className="text-danger">Standard Notes does not have a password reset option</span>
|
// translator: Full sentence: "Because your notes are encrypted using your password, Standard Notes does not have a password reset option. If you forget your password, you will permanently lose access to your data."
|
||||||
)}. If you forget your password, you will permanently lose access to your data.`}
|
c('Info').t`Because your notes are encrypted using your password,`
|
||||||
|
}{' '}
|
||||||
|
{
|
||||||
|
<span className="text-danger">
|
||||||
|
{
|
||||||
|
// translator: Full sentence: "Because your notes are encrypted using your password, Standard Notes does not have a password reset option. If you forget your password, you will permanently lose access to your data."
|
||||||
|
c('Info').t`Standard Notes does not have a password reset option`
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
// translator: Full sentence: "Because your notes are encrypted using your password, Standard Notes does not have a password reset option. If you forget your password, you will permanently lose access to your data."
|
||||||
|
c('Info').t`. If you forget your password, you will permanently lose access to your data.`
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<form onSubmit={handleConfirmFormSubmit} className="mb-1 px-3">
|
<form onSubmit={handleConfirmFormSubmit} className="mb-1 px-3">
|
||||||
{!isRegistering && (
|
{!isRegistering && (
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ const Dropdown = ({
|
|||||||
</SelectLabel>
|
</SelectLabel>
|
||||||
<Select
|
<Select
|
||||||
className={classNames(
|
className={classNames(
|
||||||
'flex w-full min-w-55 items-center justify-between rounded border border-passive-3 bg-default px-3.5 py-1.5 text-sm text-foreground md:translucent-ui:bg-transparent',
|
'flex w-full min-w-55 max-w-full items-center justify-between rounded border border-passive-3 bg-default px-3.5 py-1.5 text-sm text-foreground md:translucent-ui:bg-transparent',
|
||||||
disabled && 'opacity-50',
|
disabled && 'opacity-50',
|
||||||
classNameOverride.button,
|
classNameOverride.button,
|
||||||
!fullWidth && 'md:w-fit',
|
!fullWidth && 'md:w-fit',
|
||||||
@@ -64,13 +64,13 @@ const Dropdown = ({
|
|||||||
store={select}
|
store={select}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex min-w-0 items-center overflow-hidden">
|
||||||
{currentItem?.icon ? (
|
{currentItem?.icon ? (
|
||||||
<div className="mr-2 flex">
|
<div className="mr-2 flex shrink-0">
|
||||||
<Icon type={currentItem.icon} className={currentItem.iconClassName ?? ''} size="small" />
|
<Icon type={currentItem.icon} className={currentItem.iconClassName ?? ''} size="small" />
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="text-base lg:text-sm">{currentItem?.label}</div>
|
<div className="truncate text-base lg:text-sm">{currentItem?.label}</div>
|
||||||
</div>
|
</div>
|
||||||
<Icon type="chevron-down" size="normal" className={isExpanded ? 'rotate-180' : ''} />
|
<Icon type="chevron-down" size="normal" className={isExpanded ? 'rotate-180' : ''} />
|
||||||
</Select>
|
</Select>
|
||||||
@@ -84,17 +84,17 @@ const Dropdown = ({
|
|||||||
>
|
>
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
<SelectItem
|
<SelectItem
|
||||||
className="group flex cursor-pointer items-center bg-transparent px-3 py-1.5 text-sm text-text hover:bg-contrast hover:text-foreground [&[data-active-item]]:bg-info [&[data-active-item]]:text-info-contrast"
|
className="group flex min-w-0 cursor-pointer items-center overflow-hidden bg-transparent px-3 py-1.5 text-sm text-text hover:bg-contrast hover:text-foreground [&[data-active-item]]:bg-info [&[data-active-item]]:text-info-contrast"
|
||||||
key={item.value}
|
key={item.value}
|
||||||
value={item.value}
|
value={item.value}
|
||||||
disabled={item.disabled}
|
disabled={item.disabled}
|
||||||
>
|
>
|
||||||
{item.icon ? (
|
{item.icon ? (
|
||||||
<div className="mr-3 flex">
|
<div className="mr-3 flex shrink-0">
|
||||||
<Icon type={item.icon} className={item.iconClassName ?? ''} size="small" />
|
<Icon type={item.icon} className={item.iconClassName ?? ''} size="small" />
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="text-base lg:text-sm">{item.label}</div>
|
<div className="truncate text-base lg:text-sm">{item.label}</div>
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectPopover>
|
</SelectPopover>
|
||||||
|
|||||||
@@ -761,7 +761,7 @@ class NoteView extends AbstractComponent<NoteViewProps, State> {
|
|||||||
|
|
||||||
registerKeyboardShortcuts() {
|
registerKeyboardShortcuts() {
|
||||||
const moveNoteToTrash = () => {
|
const moveNoteToTrash = () => {
|
||||||
this.deleteNote(false).catch(console.error)
|
this.deleteNote(this.note.trashed).catch(console.error)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.#observers.push(
|
this.#observers.push(
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ import { FunctionComponent, useEffect, useState } from 'react'
|
|||||||
import PreferencesGroup from '@/Components/Preferences/PreferencesComponents/PreferencesGroup'
|
import PreferencesGroup from '@/Components/Preferences/PreferencesComponents/PreferencesGroup'
|
||||||
import PreferencesSegment from '@/Components/Preferences/PreferencesComponents/PreferencesSegment'
|
import PreferencesSegment from '@/Components/Preferences/PreferencesComponents/PreferencesSegment'
|
||||||
import { useApplication } from '@/Components/ApplicationProvider'
|
import { useApplication } from '@/Components/ApplicationProvider'
|
||||||
import { SubscriptionManagerEvent, Subscription } from '@standardnotes/snjs'
|
import { SubscriptionManagerEvent, Subscription as SubscriptionType } from '@standardnotes/snjs'
|
||||||
|
|
||||||
const Subscription: FunctionComponent = () => {
|
const Subscription: FunctionComponent = () => {
|
||||||
const application = useApplication()
|
const application = useApplication()
|
||||||
|
|
||||||
const [onlineSubscription, setOnlineSubscription] = useState<Subscription | undefined>(
|
const [onlineSubscription, setOnlineSubscription] = useState<SubscriptionType | undefined>(
|
||||||
application.subscriptionController.onlineSubscription,
|
application.subscriptionController.onlineSubscription,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -198,10 +198,14 @@ const CreateAccount: FunctionComponent<Props> = ({ application }) => {
|
|||||||
<DiamondIcon className="absolute -right-2 top-0 -z-[1] h-18 w-18 translate-x-1/2" />
|
<DiamondIcon className="absolute -right-2 top-0 -z-[1] h-18 w-18 translate-x-1/2" />
|
||||||
|
|
||||||
<div className="mr-0 lg:mr-12">
|
<div className="mr-0 lg:mr-12">
|
||||||
// translator: Full sentence: "Create your free account"
|
{
|
||||||
<h1 className="mb-2 mt-0 text-2xl font-bold">{c('Title').t`Create your free account`}</h1>
|
// translator: Full sentence: "Create your free account"
|
||||||
// translator: Full sentence: "Create your free account to continue to Standard Notes."
|
<h1 className="mb-2 mt-0 text-2xl font-bold">{c('Title').t`Create your free account`}</h1>
|
||||||
<div className="mb-4 text-sm font-medium">{c('Info').t`to continue to Standard Notes.`}</div>
|
}
|
||||||
|
{
|
||||||
|
// translator: Full sentence: "Create your free account to continue to Standard Notes."
|
||||||
|
<div className="mb-4 text-sm font-medium">{c('Info').t`to continue to Standard Notes.`}</div>
|
||||||
|
}
|
||||||
{captchaURL ? captchaIframe : CreateAccountForm}
|
{captchaURL ? captchaIframe : CreateAccountForm}
|
||||||
<div className="flex flex-col-reverse items-start justify-between md:flex-row md:items-center">
|
<div className="flex flex-col-reverse items-start justify-between md:flex-row md:items-center">
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col">
|
||||||
@@ -210,8 +214,10 @@ const CreateAccount: FunctionComponent<Props> = ({ application }) => {
|
|||||||
disabled={isCreatingAccount}
|
disabled={isCreatingAccount}
|
||||||
className="mb-2 flex cursor-pointer items-start border-0 bg-default p-0 font-medium text-info hover:underline"
|
className="mb-2 flex cursor-pointer items-start border-0 bg-default p-0 font-medium text-info hover:underline"
|
||||||
>
|
>
|
||||||
// translator: "Instead" here refers to "instead of creating an account"
|
{
|
||||||
{c('Action').t`Sign in instead`}
|
// translator: "Instead" here refers to "instead of creating an account"
|
||||||
|
c('Action').t`Sign in instead`
|
||||||
|
}
|
||||||
</button>
|
</button>
|
||||||
{!application.isNativeIOS() && (
|
{!application.isNativeIOS() && (
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -168,14 +168,13 @@ const SignIn: FunctionComponent<Props> = ({ application }) => {
|
|||||||
<div className="mb-4 text-sm font-medium">{c('Info').t`to continue to Standard Notes.`}</div>
|
<div className="mb-4 text-sm font-medium">{c('Info').t`to continue to Standard Notes.`}</div>
|
||||||
{showCaptcha ? captchaIframe : signInForm}
|
{showCaptcha ? captchaIframe : signInForm}
|
||||||
<div className="text-sm font-medium text-passive-1">
|
<div className="text-sm font-medium text-passive-1">
|
||||||
{c('Info').jt`Don’t have an account yet? ${(
|
{c('Info').t`Don’t have an account yet?`}{' '}
|
||||||
<a
|
<a
|
||||||
className={`text-info ${isSigningIn ? 'cursor-not-allowed' : 'cursor-pointer '}`}
|
className={`text-info ${isSigningIn ? 'cursor-not-allowed' : 'cursor-pointer '}`}
|
||||||
onClick={handleCreateAccountInstead}
|
onClick={handleCreateAccountInstead}
|
||||||
>
|
>
|
||||||
{c('Action').t`Create account`}
|
{c('Action').t`Create account`}
|
||||||
</a>
|
</a>
|
||||||
)}`}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
--lexical-list-left-margin: 20px;
|
--lexical-list-left-margin: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.ios-web {
|
||||||
|
--lexical-list-left-margin: 24px;
|
||||||
|
}
|
||||||
.monospace-font {
|
.monospace-font {
|
||||||
--lexical-list-left-margin: 42px;
|
--lexical-list-left-margin: 42px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { KeyboardKey } from '@standardnotes/ui-services'
|
|||||||
import { useCallback, useState, useRef } from 'react'
|
import { useCallback, useState, useRef } from 'react'
|
||||||
import { useApplication } from '../ApplicationProvider'
|
import { useApplication } from '../ApplicationProvider'
|
||||||
import Icon from '../Icon/Icon'
|
import Icon from '../Icon/Icon'
|
||||||
import { Table, TableRow } from './CommonTypes'
|
import { Table as TableType, TableRow as TableRowType } from './CommonTypes'
|
||||||
|
|
||||||
function TableRow<Data>({
|
function TableRow<Data>({
|
||||||
row,
|
row,
|
||||||
@@ -13,12 +13,12 @@ function TableRow<Data>({
|
|||||||
handleRowContextMenu,
|
handleRowContextMenu,
|
||||||
handleActivateRow,
|
handleActivateRow,
|
||||||
}: {
|
}: {
|
||||||
row: TableRow<Data>
|
row: TableRowType<Data>
|
||||||
index: number
|
index: number
|
||||||
canSelectRows: Table<Data>['canSelectRows']
|
canSelectRows: TableType<Data>['canSelectRows']
|
||||||
handleRowClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>, id: string) => void
|
handleRowClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>, id: string) => void
|
||||||
handleRowContextMenu: Table<Data>['handleRowContextMenu']
|
handleRowContextMenu: TableType<Data>['handleRowContextMenu']
|
||||||
handleActivateRow: Table<Data>['handleActivateRow']
|
handleActivateRow: TableType<Data>['handleActivateRow']
|
||||||
}) {
|
}) {
|
||||||
const [isHovered, setIsHovered] = useState(false)
|
const [isHovered, setIsHovered] = useState(false)
|
||||||
const [isFocused, setIsFocused] = useState(false)
|
const [isFocused, setIsFocused] = useState(false)
|
||||||
@@ -96,7 +96,7 @@ const MinRowsToDisplay = 20
|
|||||||
const PageSize = Math.ceil(document.documentElement.clientHeight / MinTableRowHeight) || MinRowsToDisplay
|
const PageSize = Math.ceil(document.documentElement.clientHeight / MinTableRowHeight) || MinRowsToDisplay
|
||||||
const PageScrollThreshold = 200
|
const PageScrollThreshold = 200
|
||||||
|
|
||||||
function Table<Data>({ table }: { table: Table<Data> }) {
|
function Table<Data>({ table }: { table: TableType<Data> }) {
|
||||||
const application = useApplication()
|
const application = useApplication()
|
||||||
|
|
||||||
const [rowsToDisplay, setRowsToDisplay] = useState<number>(PageSize)
|
const [rowsToDisplay, setRowsToDisplay] = useState<number>(PageSize)
|
||||||
|
|||||||
Reference in New Issue
Block a user