Merge branch 'release/10.9.0'
This commit is contained in:
3
app/assets/icons/ic-notes-remove.svg
Normal file
3
app/assets/icons/ic-notes-remove.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.05 13.2333L13.2333 12.05L15 13.825L16.7667 12.05L17.95 13.2333L16.175 15L17.95 16.7667L16.7667 17.95L15 16.175L13.2333 17.95L12.05 16.7667L13.825 15L12.05 13.2333ZM4.16667 2.5H15.8333C16.7583 2.5 17.5 3.24167 17.5 4.16667V10.6667C16.9917 10.375 16.4333 10.1667 15.8333 10.0667V4.16667H4.16667V15.8333H10.0667C10.1667 16.4333 10.375 16.9917 10.6667 17.5H4.16667C3.24167 17.5 2.5 16.7583 2.5 15.8333V4.16667C2.5 3.24167 3.24167 2.5 4.16667 2.5ZM5.83333 5.83333H14.1667V7.5H5.83333V5.83333ZM5.83333 9.16667H14.1667V10.0667C13.4583 10.1833 12.8083 10.45 12.2333 10.8333H5.83333V9.16667ZM5.83333 12.5H10V14.1667H5.83333V12.5Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 717 B |
3
app/assets/icons/ic-text.svg
Normal file
3
app/assets/icons/ic-text.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.4728 11.7841L10.4352 6.35376C10.2886 5.98329 10.1419 5.51532 9.99522 4.94986C9.92507 5.22934 9.85173 5.48932 9.7752 5.72981C9.70505 5.97029 9.6349 6.18477 9.56475 6.37326L7.53679 11.7841H12.4728ZM16.5 17H14.9312C14.7526 17 14.606 16.9545 14.4912 16.8635C14.3764 16.7725 14.2935 16.6555 14.2425 16.5125L13.0276 13.266H6.97241L5.75754 16.5125C5.7129 16.636 5.63 16.7498 5.50883 16.8538C5.38766 16.9513 5.24099 17 5.0688 17H3.5L8.97167 3H11.0283L16.5 17Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 548 B |
@@ -3,7 +3,7 @@ import { AppState } from '@/ui_models/app_state';
|
||||
import { isDev } from '@/utils';
|
||||
import { observer } from 'mobx-react-lite';
|
||||
import { FunctionComponent } from 'preact';
|
||||
import { useState } from 'preact/hooks';
|
||||
import { useEffect, useState } from 'preact/hooks';
|
||||
import { Checkbox } from '../Checkbox';
|
||||
import { Icon } from '../Icon';
|
||||
import { InputWithIcon } from '../InputWithIcon';
|
||||
@@ -20,12 +20,6 @@ export const AdvancedOptions: FunctionComponent<Props> = observer(
|
||||
appState.accountMenu;
|
||||
const [showAdvanced, setShowAdvanced] = useState(false);
|
||||
|
||||
if (isDev && window._devAccountServer) {
|
||||
setEnableServerOption(true);
|
||||
setServer(window._devAccountServer);
|
||||
application.setCustomHost(window._devAccountServer);
|
||||
}
|
||||
|
||||
const handleServerOptionChange = (e: Event) => {
|
||||
if (e.target instanceof HTMLInputElement) {
|
||||
setEnableServerOption(e.target.checked);
|
||||
|
||||
@@ -33,15 +33,14 @@ export const SignInPane: FunctionComponent<Props> = observer(
|
||||
const emailInputRef = useRef<HTMLInputElement>(null);
|
||||
const passwordInputRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
if (isDev && window._devAccountEmail) {
|
||||
setEmail(window._devAccountEmail);
|
||||
setPassword(window._devAccountPassword as string);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (emailInputRef?.current) {
|
||||
emailInputRef.current?.focus();
|
||||
}
|
||||
if (isDev && window._devAccountEmail) {
|
||||
setEmail(window._devAccountEmail);
|
||||
setPassword(window._devAccountPassword as string);
|
||||
}
|
||||
}, []);
|
||||
|
||||
const resetInvalid = () => {
|
||||
|
||||
@@ -9,21 +9,22 @@ import {
|
||||
import VisuallyHidden from '@reach/visually-hidden';
|
||||
import { FunctionComponent } from 'preact';
|
||||
import { IconType, Icon } from './Icon';
|
||||
import { useEffect, useState } from 'preact/hooks';
|
||||
|
||||
export type DropdownItem = {
|
||||
icon?: IconType;
|
||||
iconClassName?: string;
|
||||
label: string;
|
||||
value: string;
|
||||
disabled?: boolean;
|
||||
};
|
||||
|
||||
type DropdownProps = {
|
||||
id: string;
|
||||
label: string;
|
||||
items: DropdownItem[];
|
||||
defaultValue: string;
|
||||
onChange: (value: string) => void;
|
||||
value: string;
|
||||
onChange: (value: string, item: DropdownItem) => void;
|
||||
disabled?: boolean;
|
||||
};
|
||||
|
||||
type ListboxButtonProps = DropdownItem & {
|
||||
@@ -59,20 +60,18 @@ export const Dropdown: FunctionComponent<DropdownProps> = ({
|
||||
id,
|
||||
label,
|
||||
items,
|
||||
defaultValue,
|
||||
value,
|
||||
onChange,
|
||||
disabled,
|
||||
}) => {
|
||||
const [value, setValue] = useState(defaultValue);
|
||||
|
||||
useEffect(() => {
|
||||
setValue(defaultValue);
|
||||
}, [defaultValue]);
|
||||
|
||||
const labelId = `${id}-label`;
|
||||
|
||||
const handleChange = (value: string) => {
|
||||
setValue(value);
|
||||
onChange(value);
|
||||
const selectedItem = items.find(
|
||||
(item) => item.value === value
|
||||
) as DropdownItem;
|
||||
|
||||
onChange(value, selectedItem);
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -82,6 +81,7 @@ export const Dropdown: FunctionComponent<DropdownProps> = ({
|
||||
value={value}
|
||||
onChange={handleChange}
|
||||
aria-labelledby={labelId}
|
||||
disabled={disabled}
|
||||
>
|
||||
<ListboxButton
|
||||
className="sn-dropdown-button"
|
||||
@@ -106,6 +106,7 @@ export const Dropdown: FunctionComponent<DropdownProps> = ({
|
||||
className="sn-dropdown-item"
|
||||
value={item.value}
|
||||
label={item.label}
|
||||
disabled={item.disabled}
|
||||
>
|
||||
{item.icon ? (
|
||||
<div className="flex mr-3">
|
||||
|
||||
@@ -113,6 +113,7 @@ const ICONS = {
|
||||
add: AddIcon,
|
||||
help: HelpIcon,
|
||||
keyboard: KeyboardIcon,
|
||||
spellcheck: NotesIcon,
|
||||
'list-bulleted': ListBulleted,
|
||||
'link-off': LinkOffIcon,
|
||||
listed: ListedIcon,
|
||||
|
||||
@@ -35,6 +35,8 @@ const DeletePermanentlyButton = ({
|
||||
</button>
|
||||
);
|
||||
|
||||
const iconClass = 'color-neutral mr-2';
|
||||
|
||||
const getWordCount = (text: string) => {
|
||||
if (text.trim().length === 0) {
|
||||
return 0;
|
||||
@@ -133,6 +135,39 @@ const NoteAttributes: FunctionComponent<{ application: SNApplication, note: SNNo
|
||||
);
|
||||
};
|
||||
|
||||
const SpellcheckOptions: FunctionComponent<{
|
||||
appState: AppState, note: SNNote
|
||||
}> = ({ appState, note }) => {
|
||||
|
||||
const editor = appState.application.componentManager.editorForNote(note);
|
||||
const spellcheckControllable = Boolean(
|
||||
!editor ||
|
||||
appState.application.getFeature(editor.identifier)?.spellcheckControl
|
||||
);
|
||||
const noteSpellcheck = !spellcheckControllable ? true : note ? appState.notes.getSpellcheckStateForNote(note) : undefined;
|
||||
|
||||
return (
|
||||
<div className="flex flex-col px-3 py-1.5">
|
||||
<Switch
|
||||
className="px-0 py-0"
|
||||
checked={noteSpellcheck}
|
||||
disabled={!spellcheckControllable}
|
||||
onChange={() => {
|
||||
appState.notes.toggleGlobalSpellcheckForNote(note);
|
||||
}}
|
||||
>
|
||||
<span className="flex items-center">
|
||||
<Icon type='spellcheck' className={iconClass} />
|
||||
Spellcheck
|
||||
</span>
|
||||
</Switch>
|
||||
{!spellcheckControllable && (
|
||||
<p className="text-xs pt-1.5">Spellcheck cannot be controlled for this editor.</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const NotesOptions = observer(
|
||||
({ application, appState, closeOnBlur, onSubmenuChange }: Props) => {
|
||||
const [tagsMenuOpen, setTagsMenuOpen] = useState(false);
|
||||
@@ -171,8 +206,6 @@ export const NotesOptions = observer(
|
||||
|
||||
const tagsButtonRef = useRef<HTMLButtonElement>(null);
|
||||
|
||||
const iconClass = 'color-neutral mr-2';
|
||||
|
||||
useEffect(() => {
|
||||
if (onSubmenuChange) {
|
||||
onSubmenuChange(tagsMenuOpen);
|
||||
@@ -350,10 +383,9 @@ export const NotesOptions = observer(
|
||||
>
|
||||
<span
|
||||
className={`whitespace-nowrap overflow-hidden overflow-ellipsis
|
||||
${
|
||||
appState.notes.isTagInSelectedNotes(tag)
|
||||
? 'font-bold'
|
||||
: ''
|
||||
${appState.notes.isTagInSelectedNotes(tag)
|
||||
? 'font-bold'
|
||||
: ''
|
||||
}`}
|
||||
>
|
||||
{tag.title}
|
||||
@@ -484,9 +516,16 @@ export const NotesOptions = observer(
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
|
||||
|
||||
{notes.length === 1 ? (
|
||||
<>
|
||||
<div className="min-h-1px my-2 bg-border"></div>
|
||||
|
||||
<SpellcheckOptions appState={appState} note={notes[0]} />
|
||||
|
||||
<div className="min-h-1px my-2 bg-border"></div>
|
||||
|
||||
<NoteAttributes application={application} note={notes[0]} />
|
||||
</>
|
||||
) : null}
|
||||
|
||||
@@ -49,6 +49,19 @@ const toggleFocusMode = (enabled: boolean) => {
|
||||
}
|
||||
};
|
||||
|
||||
export const sortThemes = (a: SNTheme, b: SNTheme) => {
|
||||
const aIsLayerable = a.isLayerable();
|
||||
const bIsLayerable = b.isLayerable();
|
||||
|
||||
if (aIsLayerable && !bIsLayerable) {
|
||||
return 1;
|
||||
} else if (!aIsLayerable && bIsLayerable) {
|
||||
return -1;
|
||||
} else {
|
||||
return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;
|
||||
}
|
||||
};
|
||||
|
||||
const QuickSettingsMenu: FunctionComponent<MenuProps> = observer(
|
||||
({ application, appState }) => {
|
||||
const {
|
||||
@@ -79,23 +92,7 @@ const QuickSettingsMenu: FunctionComponent<MenuProps> = observer(
|
||||
const themes = application.getDisplayableItems(
|
||||
ContentType.Theme
|
||||
) as SNTheme[];
|
||||
setThemes(
|
||||
themes.sort((a, b) => {
|
||||
const aIsLayerable = a.isLayerable();
|
||||
const bIsLayerable = b.isLayerable();
|
||||
|
||||
if (aIsLayerable && !bIsLayerable) {
|
||||
return 1;
|
||||
} else if (!aIsLayerable && bIsLayerable) {
|
||||
return -1;
|
||||
} else {
|
||||
return a.name.toLowerCase() <
|
||||
b.name.toLowerCase()
|
||||
? -1
|
||||
: 1;
|
||||
}
|
||||
})
|
||||
);
|
||||
setThemes(themes.sort(sortThemes));
|
||||
setDefaultThemeOn(
|
||||
!themes.find((theme) => theme.active && !theme.isLayerable())
|
||||
);
|
||||
|
||||
@@ -29,7 +29,7 @@ export const Switch: FunctionalComponent<SwitchProps> = (
|
||||
|
||||
return (
|
||||
<label
|
||||
className={`sn-component flex justify-between items-center cursor-pointer px-3 ${className}`}
|
||||
className={`sn-component flex justify-between items-center cursor-pointer px-3 ${className} ${isDisabled ? 'faded' : ''}`}
|
||||
{...(props.role ? { role: props.role } : {})}
|
||||
>
|
||||
{props.children}
|
||||
@@ -51,9 +51,8 @@ export const Switch: FunctionalComponent<SwitchProps> = (
|
||||
/>
|
||||
<span
|
||||
aria-hidden
|
||||
className={`sn-switch-handle ${
|
||||
checked ? 'sn-switch-handle--right' : ''
|
||||
}`}
|
||||
className={`sn-switch-handle ${checked ? 'sn-switch-handle--right' : ''
|
||||
}`}
|
||||
/>
|
||||
</CustomCheckboxContainer>
|
||||
</label>
|
||||
|
||||
@@ -52,6 +52,7 @@ const PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [
|
||||
const READY_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [
|
||||
{ id: 'account', label: 'Account', icon: 'user' },
|
||||
{ id: 'general', label: 'General', icon: 'settings' },
|
||||
{ id: 'appearance', label: 'Appearance', icon: 'themes' },
|
||||
{ id: 'security', label: 'Security', icon: 'security' },
|
||||
{ id: 'backups', label: 'Backups', icon: 'restore' },
|
||||
{ id: 'listed', label: 'Listed', icon: 'listed' },
|
||||
|
||||
@@ -18,6 +18,7 @@ import { AppState } from '@/ui_models/app_state';
|
||||
import { useEffect, useMemo } from 'preact/hooks';
|
||||
import { ExtensionPane } from './panes/ExtensionPane';
|
||||
import { Backups } from '@/preferences/panes/Backups';
|
||||
import { Appearance } from './panes/Appearance';
|
||||
|
||||
interface PreferencesProps extends MfaProps {
|
||||
application: WebApplication;
|
||||
@@ -42,7 +43,7 @@ const PaneSelector: FunctionComponent<
|
||||
<AccountPreferences application={application} appState={appState} />
|
||||
);
|
||||
case 'appearance':
|
||||
return null;
|
||||
return <Appearance application={application} />;
|
||||
case 'security':
|
||||
return (
|
||||
<Security
|
||||
|
||||
196
app/assets/javascripts/preferences/panes/Appearance.tsx
Normal file
196
app/assets/javascripts/preferences/panes/Appearance.tsx
Normal file
@@ -0,0 +1,196 @@
|
||||
import { Dropdown, DropdownItem } from '@/components/Dropdown';
|
||||
import { PremiumModalProvider, usePremiumModal } from '@/components/Premium';
|
||||
import { sortThemes } from '@/components/QuickSettingsMenu/QuickSettingsMenu';
|
||||
import { HorizontalSeparator } from '@/components/shared/HorizontalSeparator';
|
||||
import { Switch } from '@/components/Switch';
|
||||
import { WebApplication } from '@/ui_models/application';
|
||||
import { Features } from '@standardnotes/features';
|
||||
import {
|
||||
ContentType,
|
||||
FeatureIdentifier,
|
||||
FeatureStatus,
|
||||
PrefKey,
|
||||
SNTheme,
|
||||
} from '@standardnotes/snjs';
|
||||
import { observer } from 'mobx-react-lite';
|
||||
import { FunctionComponent } from 'preact';
|
||||
import { useEffect, useState } from 'preact/hooks';
|
||||
import {
|
||||
PreferencesGroup,
|
||||
PreferencesPane,
|
||||
PreferencesSegment,
|
||||
Subtitle,
|
||||
Title,
|
||||
Text,
|
||||
} from '../components';
|
||||
|
||||
type Props = {
|
||||
application: WebApplication;
|
||||
};
|
||||
|
||||
const AppearancePane: FunctionComponent<Props> = observer(({ application }) => {
|
||||
const premiumModal = usePremiumModal();
|
||||
const isEntitledToMidnightTheme =
|
||||
application.getFeatureStatus(FeatureIdentifier.MidnightTheme) ===
|
||||
FeatureStatus.Entitled;
|
||||
|
||||
const [themeItems, setThemeItems] = useState<DropdownItem[]>([]);
|
||||
const [autoLightTheme, setAutoLightTheme] = useState<string>(
|
||||
() =>
|
||||
application.getPreference(
|
||||
PrefKey.AutoLightThemeIdentifier,
|
||||
'Default'
|
||||
) as string
|
||||
);
|
||||
const [autoDarkTheme, setAutoDarkTheme] = useState<string>(
|
||||
() =>
|
||||
application.getPreference(
|
||||
PrefKey.AutoDarkThemeIdentifier,
|
||||
isEntitledToMidnightTheme ? FeatureIdentifier.MidnightTheme : 'Default'
|
||||
) as string
|
||||
);
|
||||
const [useDeviceSettings, setUseDeviceSettings] = useState(
|
||||
() =>
|
||||
application.getPreference(PrefKey.UseSystemColorScheme, false) as boolean
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
const themesAsItems: DropdownItem[] = (
|
||||
application.getDisplayableItems(ContentType.Theme) as SNTheme[]
|
||||
)
|
||||
.filter((theme) => !theme.isLayerable())
|
||||
.sort(sortThemes)
|
||||
.map((theme) => {
|
||||
return {
|
||||
label: theme.name,
|
||||
value: theme.identifier as string,
|
||||
};
|
||||
});
|
||||
|
||||
Features.filter(
|
||||
(feature) =>
|
||||
feature.content_type === ContentType.Theme && !feature.layerable
|
||||
).forEach((theme) => {
|
||||
if (
|
||||
themesAsItems.findIndex((item) => item.value === theme.identifier) ===
|
||||
-1
|
||||
) {
|
||||
themesAsItems.push({
|
||||
label: theme.name as string,
|
||||
value: theme.identifier,
|
||||
icon: 'premium-feature',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
themesAsItems.unshift({
|
||||
label: 'Default',
|
||||
value: 'Default',
|
||||
});
|
||||
|
||||
setThemeItems(themesAsItems);
|
||||
}, [application]);
|
||||
|
||||
const toggleUseDeviceSettings = () => {
|
||||
application.setPreference(PrefKey.UseSystemColorScheme, !useDeviceSettings);
|
||||
if (!application.getPreference(PrefKey.AutoLightThemeIdentifier)) {
|
||||
application.setPreference(
|
||||
PrefKey.AutoLightThemeIdentifier,
|
||||
autoLightTheme as FeatureIdentifier
|
||||
);
|
||||
}
|
||||
if (!application.getPreference(PrefKey.AutoDarkThemeIdentifier)) {
|
||||
application.setPreference(
|
||||
PrefKey.AutoDarkThemeIdentifier,
|
||||
autoDarkTheme as FeatureIdentifier
|
||||
);
|
||||
}
|
||||
setUseDeviceSettings(!useDeviceSettings);
|
||||
};
|
||||
|
||||
const changeAutoLightTheme = (value: string, item: DropdownItem) => {
|
||||
if (item.icon === 'premium-feature') {
|
||||
premiumModal.activate(`${item.label} theme`);
|
||||
} else {
|
||||
application.setPreference(
|
||||
PrefKey.AutoLightThemeIdentifier,
|
||||
value as FeatureIdentifier
|
||||
);
|
||||
setAutoLightTheme(value);
|
||||
}
|
||||
};
|
||||
|
||||
const changeAutoDarkTheme = (value: string, item: DropdownItem) => {
|
||||
if (item.icon === 'premium-feature') {
|
||||
premiumModal.activate(`${item.label} theme`);
|
||||
} else {
|
||||
application.setPreference(
|
||||
PrefKey.AutoDarkThemeIdentifier,
|
||||
value as FeatureIdentifier
|
||||
);
|
||||
setAutoDarkTheme(value);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<PreferencesPane>
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
<Title>Themes</Title>
|
||||
<div className="mt-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<Subtitle>Use system color scheme</Subtitle>
|
||||
<Text>
|
||||
Automatically change active theme based on your system settings.
|
||||
</Text>
|
||||
</div>
|
||||
<Switch
|
||||
onChange={toggleUseDeviceSettings}
|
||||
checked={useDeviceSettings}
|
||||
/>
|
||||
</div>
|
||||
<HorizontalSeparator classes="mt-5 mb-3" />
|
||||
<div>
|
||||
<Subtitle>Automatic Light Theme</Subtitle>
|
||||
<Text>Theme to be used for system light mode:</Text>
|
||||
<div className="mt-2">
|
||||
<Dropdown
|
||||
id="auto-light-theme-dropdown"
|
||||
label="Select the automatic light theme"
|
||||
items={themeItems}
|
||||
value={autoLightTheme}
|
||||
onChange={changeAutoLightTheme}
|
||||
disabled={!useDeviceSettings}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<HorizontalSeparator classes="mt-5 mb-3" />
|
||||
<div>
|
||||
<Subtitle>Automatic Dark Theme</Subtitle>
|
||||
<Text>Theme to be used for system dark mode:</Text>
|
||||
<div className="mt-2">
|
||||
<Dropdown
|
||||
id="auto-dark-theme-dropdown"
|
||||
label="Select the automatic dark theme"
|
||||
items={themeItems}
|
||||
value={autoDarkTheme}
|
||||
onChange={changeAutoDarkTheme}
|
||||
disabled={!useDeviceSettings}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
</PreferencesPane>
|
||||
);
|
||||
});
|
||||
|
||||
export const Appearance: FunctionComponent<Props> = observer(
|
||||
({ application }) => (
|
||||
<PremiumModalProvider state={application.getAppState().features}>
|
||||
<AppearancePane application={application} />
|
||||
</PremiumModalProvider>
|
||||
)
|
||||
);
|
||||
@@ -157,7 +157,7 @@ export const EmailBackups = observer(({ application }: Props) => {
|
||||
id="def-editor-dropdown"
|
||||
label="Select email frequency"
|
||||
items={emailFrequencyOptions}
|
||||
defaultValue={emailFrequency}
|
||||
value={emailFrequency}
|
||||
onChange={(item) => {
|
||||
updateEmailFrequency(item as EmailBackupFrequency);
|
||||
}}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Dropdown, DropdownItem } from '@/components/Dropdown';
|
||||
import { IconType } from '@/components/Icon';
|
||||
import { FeatureIdentifier } from '@standardnotes/snjs';
|
||||
import { FeatureIdentifier, PrefKey } from '@standardnotes/snjs';
|
||||
import {
|
||||
PreferencesGroup,
|
||||
PreferencesSegment,
|
||||
@@ -16,6 +16,8 @@ import {
|
||||
} from '@standardnotes/snjs';
|
||||
import { FunctionComponent } from 'preact';
|
||||
import { useEffect, useState } from 'preact/hooks';
|
||||
import { HorizontalSeparator } from '@/components/shared/HorizontalSeparator';
|
||||
import { Switch } from '@/components/Switch';
|
||||
|
||||
type Props = {
|
||||
application: WebApplication;
|
||||
@@ -82,11 +84,20 @@ const getDefaultEditor = (application: WebApplication) => {
|
||||
|
||||
export const Defaults: FunctionComponent<Props> = ({ application }) => {
|
||||
const [editorItems, setEditorItems] = useState<DropdownItem[]>([]);
|
||||
const [defaultEditorValue] = useState(
|
||||
const [defaultEditorValue, setDefaultEditorValue] = useState(
|
||||
() =>
|
||||
getDefaultEditor(application)?.package_info?.identifier || 'plain-editor'
|
||||
);
|
||||
|
||||
const [spellcheck, setSpellcheck] = useState(() =>
|
||||
application.getPreference(PrefKey.EditorSpellcheck, true)
|
||||
);
|
||||
|
||||
const toggleSpellcheck = () => {
|
||||
setSpellcheck(!spellcheck);
|
||||
application.getAppState().toggleGlobalSpellcheck();
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const editors = application.componentManager
|
||||
.componentsForArea(ComponentArea.Editor)
|
||||
@@ -117,6 +128,7 @@ export const Defaults: FunctionComponent<Props> = ({ application }) => {
|
||||
}, [application]);
|
||||
|
||||
const setDefaultEditor = (value: string) => {
|
||||
setDefaultEditorValue(value as FeatureIdentifier);
|
||||
const editors = application.componentManager.componentsForArea(
|
||||
ComponentArea.Editor
|
||||
);
|
||||
@@ -144,11 +156,22 @@ export const Defaults: FunctionComponent<Props> = ({ application }) => {
|
||||
id="def-editor-dropdown"
|
||||
label="Select the default editor"
|
||||
items={editorItems}
|
||||
defaultValue={defaultEditorValue}
|
||||
value={defaultEditorValue}
|
||||
onChange={setDefaultEditor}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<HorizontalSeparator classes="mt-5 mb-3" />
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<Subtitle>Spellcheck</Subtitle>
|
||||
<Text>
|
||||
The default spellcheck value for new notes. Spellcheck can be configured per note from the note context menu.
|
||||
Spellcheck may degrade overall typing performance with long notes.
|
||||
</Text>
|
||||
</div>
|
||||
<Switch onChange={toggleSpellcheck} checked={spellcheck} />
|
||||
</div>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
);
|
||||
|
||||
@@ -25,9 +25,6 @@ export const Tools: FunctionalComponent<Props> = observer(
|
||||
const [marginResizers, setMarginResizers] = useState(() =>
|
||||
application.getPreference(PrefKey.EditorResizersEnabled, true)
|
||||
);
|
||||
const [spellcheck, setSpellcheck] = useState(() =>
|
||||
application.getPreference(PrefKey.EditorSpellcheck, true)
|
||||
);
|
||||
|
||||
const toggleMonospaceFont = () => {
|
||||
setMonospaceFont(!monospaceFont);
|
||||
@@ -39,11 +36,6 @@ export const Tools: FunctionalComponent<Props> = observer(
|
||||
application.setPreference(PrefKey.EditorResizersEnabled, !marginResizers);
|
||||
};
|
||||
|
||||
const toggleSpellcheck = () => {
|
||||
setSpellcheck(!spellcheck);
|
||||
application.setPreference(PrefKey.EditorSpellcheck, !spellcheck);
|
||||
};
|
||||
|
||||
return (
|
||||
<PreferencesGroup>
|
||||
<PreferencesSegment>
|
||||
@@ -67,17 +59,6 @@ export const Tools: FunctionalComponent<Props> = observer(
|
||||
checked={marginResizers}
|
||||
/>
|
||||
</div>
|
||||
<HorizontalSeparator classes="mt-5 mb-3" />
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex flex-col">
|
||||
<Subtitle>Spellcheck</Subtitle>
|
||||
<Text>
|
||||
May degrade performance, especially with long notes. This option only controls
|
||||
spellcheck in the Plain Editor.
|
||||
</Text>
|
||||
</div>
|
||||
<Switch onChange={toggleSpellcheck} checked={spellcheck} />
|
||||
</div>
|
||||
</div>
|
||||
</PreferencesSegment>
|
||||
</PreferencesGroup>
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
UuidString,
|
||||
FeatureStatus,
|
||||
PayloadSource,
|
||||
PrefKey,
|
||||
} from '@standardnotes/snjs';
|
||||
|
||||
const CACHED_THEMES_KEY = 'cachedThemes';
|
||||
@@ -19,6 +20,53 @@ export class ThemeManager extends ApplicationService {
|
||||
private unregisterDesktop!: () => void;
|
||||
private unregisterStream!: () => void;
|
||||
|
||||
constructor(application: WebApplication) {
|
||||
super(application);
|
||||
this.colorSchemeEventHandler = this.colorSchemeEventHandler.bind(this);
|
||||
}
|
||||
|
||||
private colorSchemeEventHandler(event: MediaQueryListEvent) {
|
||||
this.setThemeAsPerColorScheme(event.matches);
|
||||
}
|
||||
|
||||
private setThemeAsPerColorScheme(prefersDarkColorScheme: boolean) {
|
||||
const useDeviceThemeSettings = this.application.getPreference(
|
||||
PrefKey.UseSystemColorScheme,
|
||||
false
|
||||
);
|
||||
|
||||
if (useDeviceThemeSettings) {
|
||||
const preference = prefersDarkColorScheme
|
||||
? PrefKey.AutoDarkThemeIdentifier
|
||||
: PrefKey.AutoLightThemeIdentifier;
|
||||
const themes = this.application.getDisplayableItems(
|
||||
ContentType.Theme
|
||||
) as SNTheme[];
|
||||
|
||||
const enableDefaultTheme = () => {
|
||||
const activeTheme = themes.find(
|
||||
(theme) => theme.active && !theme.isLayerable()
|
||||
);
|
||||
if (activeTheme) this.application.toggleTheme(activeTheme);
|
||||
};
|
||||
|
||||
const themeIdentifier = this.application.getPreference(
|
||||
preference,
|
||||
'Default'
|
||||
) as string;
|
||||
if (themeIdentifier === 'Default') {
|
||||
enableDefaultTheme();
|
||||
} else {
|
||||
const theme = themes.find(
|
||||
(theme) => theme.package_info.identifier === themeIdentifier
|
||||
);
|
||||
if (theme && !theme.active) {
|
||||
this.application.toggleTheme(theme);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async onAppEvent(event: ApplicationEvent) {
|
||||
super.onAppEvent(event);
|
||||
if (event === ApplicationEvent.SignedOut) {
|
||||
@@ -32,6 +80,15 @@ export class ThemeManager extends ApplicationService {
|
||||
await this.activateCachedThemes();
|
||||
} else if (event === ApplicationEvent.FeaturesUpdated) {
|
||||
this.reloadThemeStatus();
|
||||
} else if (event === ApplicationEvent.Launched) {
|
||||
window
|
||||
.matchMedia('(prefers-color-scheme: dark)')
|
||||
.addEventListener('change', this.colorSchemeEventHandler);
|
||||
} else if (event === ApplicationEvent.PreferencesChanged) {
|
||||
const prefersDarkColorScheme = window.matchMedia(
|
||||
'(prefers-color-scheme: dark)'
|
||||
);
|
||||
this.setThemeAsPerColorScheme(prefersDarkColorScheme.matches);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +103,9 @@ export class ThemeManager extends ApplicationService {
|
||||
this.unregisterStream();
|
||||
(this.unregisterDesktop as unknown) = undefined;
|
||||
(this.unregisterStream as unknown) = undefined;
|
||||
window
|
||||
.matchMedia('(prefers-color-scheme: dark)')
|
||||
.removeEventListener('change', this.colorSchemeEventHandler);
|
||||
super.deinit();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { isDev } from '@/utils';
|
||||
import {
|
||||
action,
|
||||
computed,
|
||||
@@ -74,7 +75,11 @@ export class AccountMenuState {
|
||||
this.appEventListeners.push(
|
||||
this.application.addEventObserver(async () => {
|
||||
runInAction(() => {
|
||||
this.setServer(this.application.getHost());
|
||||
if (isDev && window._devAccountServer) {
|
||||
this.setServer(window._devAccountServer);
|
||||
} else {
|
||||
this.setServer(this.application.getHost());
|
||||
}
|
||||
});
|
||||
}, ApplicationEvent.Launched)
|
||||
);
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
ComponentViewer,
|
||||
SNTag,
|
||||
NoteViewController,
|
||||
SNTheme,
|
||||
} from '@standardnotes/snjs';
|
||||
import pull from 'lodash/pull';
|
||||
import {
|
||||
@@ -281,6 +282,18 @@ export class AppState {
|
||||
}
|
||||
}
|
||||
|
||||
isGlobalSpellcheckEnabled(): boolean {
|
||||
return this.application.getPreference(PrefKey.EditorSpellcheck, true);
|
||||
}
|
||||
|
||||
async toggleGlobalSpellcheck() {
|
||||
const currentValue = this.isGlobalSpellcheckEnabled();
|
||||
return this.application.setPreference(
|
||||
PrefKey.EditorSpellcheck,
|
||||
!currentValue
|
||||
);
|
||||
}
|
||||
|
||||
private tagChangedNotifier(): IReactionDisposer {
|
||||
return reaction(
|
||||
() => this.tags.selectedUuid,
|
||||
|
||||
@@ -378,6 +378,23 @@ export class NotesState {
|
||||
this.selectedNotes = {};
|
||||
}
|
||||
|
||||
getSpellcheckStateForNote(note: SNNote) {
|
||||
return note.spellcheck != undefined
|
||||
? note.spellcheck
|
||||
: this.appState.isGlobalSpellcheckEnabled();
|
||||
}
|
||||
|
||||
async toggleGlobalSpellcheckForNote(note: SNNote) {
|
||||
await this.application.changeItem<NoteMutator>(
|
||||
note.uuid,
|
||||
(mutator) => {
|
||||
mutator.toggleSpellcheck();
|
||||
},
|
||||
false
|
||||
);
|
||||
this.application.sync();
|
||||
}
|
||||
|
||||
async addTagToSelectedNotes(tag: SNTag): Promise<void> {
|
||||
const selectedNotes = Object.values(this.selectedNotes);
|
||||
const parentChainTags = this.application.getTagParentChain(tag);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { confirmDialog } from '@/services/alertService';
|
||||
import { STRING_DELETE_TAG, STRING_MISSING_SYSTEM_TAG } from '@/strings';
|
||||
import { STRING_DELETE_TAG } from '@/strings';
|
||||
import {
|
||||
ApplicationEvent,
|
||||
ComponentAction,
|
||||
ContentType,
|
||||
MessageData,
|
||||
@@ -9,7 +8,7 @@ import {
|
||||
SNSmartTag,
|
||||
SNTag,
|
||||
TagMutator,
|
||||
UuidString,
|
||||
UuidString
|
||||
} from '@standardnotes/snjs';
|
||||
import {
|
||||
action,
|
||||
@@ -17,7 +16,7 @@ import {
|
||||
makeAutoObservable,
|
||||
makeObservable,
|
||||
observable,
|
||||
runInAction,
|
||||
runInAction
|
||||
} from 'mobx';
|
||||
import { WebApplication } from '../application';
|
||||
import { FeaturesState, SMART_TAGS_FEATURE_NAME } from './features_state';
|
||||
@@ -126,9 +125,6 @@ export class TagsState {
|
||||
) as SNTag[];
|
||||
this.smartTags = this.application.getSmartTags();
|
||||
|
||||
this.tagsCountsState.update(this.tags);
|
||||
this.allNotesCount_ = this.countAllNotes();
|
||||
|
||||
const selectedTag = this.selected_;
|
||||
if (selectedTag) {
|
||||
const matchingTag = items.find(
|
||||
@@ -150,13 +146,13 @@ export class TagsState {
|
||||
);
|
||||
|
||||
appEventListeners.push(
|
||||
this.application.addEventObserver(async (eventName) => {
|
||||
switch (eventName) {
|
||||
case ApplicationEvent.CompletedIncrementalSync:
|
||||
runInAction(() => {
|
||||
this.allNotesCount_ = this.countAllNotes();
|
||||
});
|
||||
break;
|
||||
this.application.addNoteCountChangeObserver((tagUuid) => {
|
||||
if (!tagUuid) {
|
||||
this.allNotesCount_ = this.application.allCountableNotesCount();
|
||||
} else {
|
||||
this.tagsCountsState.update([
|
||||
this.application.findItem(tagUuid) as SNTag,
|
||||
]);
|
||||
}
|
||||
})
|
||||
);
|
||||
@@ -199,32 +195,33 @@ export class TagsState {
|
||||
|
||||
public async assignParent(
|
||||
tagUuid: string,
|
||||
parentUuid: string | undefined
|
||||
futureParentUuid: string | undefined
|
||||
): Promise<void> {
|
||||
const tag = this.application.findItem(tagUuid) as SNTag;
|
||||
|
||||
const currentParent = this.application.getTagParent(tag);
|
||||
const currentParentUuid = currentParent?.parentId;
|
||||
const currentParentUuid = currentParent?.uuid;
|
||||
|
||||
if (currentParentUuid === parentUuid) {
|
||||
if (currentParentUuid === futureParentUuid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parent =
|
||||
parentUuid && (this.application.findItem(parentUuid) as SNTag);
|
||||
const futureParent =
|
||||
futureParentUuid &&
|
||||
(this.application.findItem(futureParentUuid) as SNTag);
|
||||
|
||||
if (!parent) {
|
||||
if (!futureParent) {
|
||||
const futureSiblings = rootTags(this.application);
|
||||
if (!isValidFutureSiblings(this.application, futureSiblings, tag)) {
|
||||
return;
|
||||
}
|
||||
await this.application.unsetTagParent(tag);
|
||||
} else {
|
||||
const futureSiblings = this.application.getTagChildren(parent);
|
||||
const futureSiblings = this.application.getTagChildren(futureParent);
|
||||
if (!isValidFutureSiblings(this.application, futureSiblings, tag)) {
|
||||
return;
|
||||
}
|
||||
await this.application.setTagParent(parent, tag);
|
||||
await this.application.setTagParent(futureParent, tag);
|
||||
}
|
||||
|
||||
await this.application.sync();
|
||||
@@ -390,23 +387,6 @@ export class TagsState {
|
||||
}
|
||||
}
|
||||
|
||||
private countAllNotes(): number {
|
||||
const allTag = this.application.getSmartTags().find((tag) => tag.isAllTag);
|
||||
|
||||
if (!allTag) {
|
||||
console.error(STRING_MISSING_SYSTEM_TAG);
|
||||
return -1;
|
||||
}
|
||||
|
||||
const notes = this.application
|
||||
.notesMatchingSmartTag(allTag)
|
||||
.filter((note) => {
|
||||
return !note.archived && !note.trashed;
|
||||
});
|
||||
|
||||
return notes.length;
|
||||
}
|
||||
|
||||
public onFoldersComponentMessage(
|
||||
action: ComponentAction,
|
||||
data: MessageData
|
||||
@@ -439,9 +419,6 @@ export class TagsState {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bug fix for issue 1201550111577311,
|
||||
*/
|
||||
class TagsCountsState {
|
||||
public counts: { [uuid: string]: number } = {};
|
||||
|
||||
@@ -453,13 +430,13 @@ class TagsCountsState {
|
||||
}
|
||||
|
||||
public update(tags: SNTag[]) {
|
||||
const newCounts: { [uuid: string]: number } = {};
|
||||
const newCounts: { [uuid: string]: number } = Object.assign(
|
||||
{},
|
||||
this.counts
|
||||
);
|
||||
|
||||
tags.forEach((tag) => {
|
||||
newCounts[tag.uuid] = this.application.referencesForItem(
|
||||
tag,
|
||||
ContentType.Note
|
||||
).length;
|
||||
newCounts[tag.uuid] = this.application.countableNotesForTag(tag);
|
||||
});
|
||||
|
||||
this.counts = newCounts;
|
||||
|
||||
@@ -201,6 +201,8 @@ export class NoteView extends PureViewCtrl<unknown, EditorState> {
|
||||
this.editorValues.text = note.text;
|
||||
}
|
||||
|
||||
this.reloadSpellcheck();
|
||||
|
||||
const isTemplateNoteInsertedToBeInteractableWithEditor =
|
||||
source === PayloadSource.Constructor && note.dirty;
|
||||
if (isTemplateNoteInsertedToBeInteractableWithEditor) {
|
||||
@@ -694,29 +696,35 @@ export class NoteView extends PureViewCtrl<unknown, EditorState> {
|
||||
this.application.sync();
|
||||
}
|
||||
|
||||
async reloadPreferences() {
|
||||
const monospaceFont = this.application.getPreference(
|
||||
PrefKey.EditorMonospaceEnabled,
|
||||
true
|
||||
);
|
||||
const spellcheck = this.application.getPreference(
|
||||
PrefKey.EditorSpellcheck,
|
||||
true
|
||||
);
|
||||
const marginResizersEnabled = this.application.getPreference(
|
||||
PrefKey.EditorResizersEnabled,
|
||||
true
|
||||
);
|
||||
async reloadSpellcheck() {
|
||||
const spellcheck = this.appState.notes.getSpellcheckStateForNote(this.note);
|
||||
|
||||
if (spellcheck !== this.state.spellcheck) {
|
||||
await this.setState({ textareaUnloading: true });
|
||||
await this.setState({ textareaUnloading: false });
|
||||
this.reloadFont();
|
||||
|
||||
await this.setState({
|
||||
spellcheck,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async reloadPreferences() {
|
||||
const monospaceFont = this.application.getPreference(
|
||||
PrefKey.EditorMonospaceEnabled,
|
||||
true
|
||||
);
|
||||
|
||||
const marginResizersEnabled = this.application.getPreference(
|
||||
PrefKey.EditorResizersEnabled,
|
||||
true
|
||||
);
|
||||
|
||||
await this.reloadSpellcheck();
|
||||
|
||||
await this.setState({
|
||||
monospaceFont,
|
||||
spellcheck,
|
||||
marginResizersEnabled,
|
||||
});
|
||||
|
||||
|
||||
12
package.json
12
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "standard-notes-web",
|
||||
"version": "3.9.14",
|
||||
"version": "3.9.20",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -27,7 +27,6 @@
|
||||
"@babel/preset-typescript": "^7.15.0",
|
||||
"@reach/disclosure": "^0.16.2",
|
||||
"@reach/visually-hidden": "^0.16.0",
|
||||
"@standardnotes/components": "1.2.8",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@types/angular": "^1.8.3",
|
||||
"@types/jest": "^27.0.3",
|
||||
@@ -86,10 +85,11 @@
|
||||
"@reach/dialog": "^0.16.2",
|
||||
"@reach/listbox": "^0.16.2",
|
||||
"@reach/tooltip": "^0.16.2",
|
||||
"@standardnotes/features": "1.20.7",
|
||||
"@standardnotes/settings": "^1.9.0",
|
||||
"@standardnotes/sncrypto-web": "1.5.3",
|
||||
"@standardnotes/snjs": "2.35.5",
|
||||
"@standardnotes/components": "1.4.3",
|
||||
"@standardnotes/features": "1.25.0",
|
||||
"@standardnotes/snjs": "2.41.0",
|
||||
"@standardnotes/settings": "^1.10.0",
|
||||
"@standardnotes/sncrypto-web": "1.6.0",
|
||||
"mobx": "^6.3.5",
|
||||
"mobx-react-lite": "^3.2.2",
|
||||
"preact": "^10.5.15",
|
||||
|
||||
@@ -35,54 +35,54 @@
|
||||
"binary": "42d28f3598669b801821879f0b7e26389300f151bfbc566b11c214e6091719ed"
|
||||
},
|
||||
"org.standardnotes.code-editor": {
|
||||
"version": "1.3.8",
|
||||
"base64": "9969f2997d06deb41af4b40edcda19b4eed72fda6ea2ff116b96616a0d3dba67",
|
||||
"binary": "8c6fbc89151e11b0ba39475f3180f08ed38f75098f600befa5875eb993435404"
|
||||
"version": "1.3.9",
|
||||
"base64": "f9f327b77d1e9084505ae66ae9f91aa116db52fe86de99addc64ebaca9e7dc64",
|
||||
"binary": "3049e8e87e9bd5928654c9aeea16c8955e180aaae26932cbebfd9092c24346d5"
|
||||
},
|
||||
"org.standardnotes.bold-editor": {
|
||||
"version": "1.2.10",
|
||||
"base64": "0de1df66cc3ae7774a3c0cedb2454e3465cadabf41ba5060ab9e543a2bea5dea",
|
||||
"binary": "bac85952fbe8af1eac49701da69b811de531fd15b1cfd6bbc90d61d9c785f5d1"
|
||||
"version": "1.3.2",
|
||||
"base64": "7a4fec03c556d17aa2f14a9157a20754c429a54843504211017fc21ca6d8b10e",
|
||||
"binary": "80ff2f747607b6668c5e9b439203d89740de21b822d01b6b4d2051bf232a80f3"
|
||||
},
|
||||
"org.standardnotes.plus-editor": {
|
||||
"version": "1.5.0",
|
||||
"base64": "f8923ab4a464ee113d47fa164ee7efbc6337e9e538105ae473b00492fb4ec46e",
|
||||
"binary": "d4645ee7a38eeb1046239ea337333dcb64dc01c81f05e20307696099364b485b"
|
||||
"version": "1.6.1",
|
||||
"base64": "741c77ab437b17e9e76755485b828a8530bfc0c713258e72374a6fced61a3aef",
|
||||
"binary": "02da20d1969bc2cc9bc9e164bcd6f993183747c8d6c3edae814fa12789950544"
|
||||
},
|
||||
"org.standardnotes.simple-markdown-editor": {
|
||||
"version": "1.4.0",
|
||||
"base64": "853cfcaf6c1e13796869b4c6655dab82f9d75a25d9e1e9f2e5e3137c7dae03d2",
|
||||
"binary": "3ac9e1133a109d91dcefbdc344855f82bbbd5f0409c60d9c1f040ee811bd14ae"
|
||||
"version": "1.4.1",
|
||||
"base64": "5ba494941267a51961d73c8cc58ab608cde50f8d5772401a947482472d3f8b2f",
|
||||
"binary": "65cbacc96b5271c0e846e7a2d3bd243f87091055311ca30a2c4a7d2ec228462d"
|
||||
},
|
||||
"org.standardnotes.advanced-markdown-editor": {
|
||||
"version": "1.3.14",
|
||||
"base64": "2e2db371fb028bb1c1785102a01d39673d56f72d50ed8ea3c558cce690f23060",
|
||||
"binary": "657eb02b34978b9d2412a0fc9525ec0b3bd6080d01069a11659b289d2c9eafa0"
|
||||
"version": "1.4.1",
|
||||
"base64": "8772f107ae2913bf653e749c28d8ed2eae055ae5aa694d39f43db3ec7d787d86",
|
||||
"binary": "2989c33b1997e054622bafcf50a9b966fc2d6acee640aa9a52d7efc19e15c123"
|
||||
},
|
||||
"org.standardnotes.minimal-markdown-editor": {
|
||||
"version": "1.3.7",
|
||||
"base64": "b785ff85d8803ed0323163221e36048b43086e85c7cc5f1c12abb5c5b270a6ed",
|
||||
"binary": "3a8cfaa512f8734faf75ae9ee8ece3a55409d50dbeebfe9cbeca7ff4b40a8426"
|
||||
"version": "1.3.8",
|
||||
"base64": "a48584b5e0601a43403ec7ca10e6cc7958072f2dce9c29bd883bcabde8a2288a",
|
||||
"binary": "8d08f2ffe85a4ad234aa16772266554bc7849778a470d8e6b9293e313890c53a"
|
||||
},
|
||||
"org.standardnotes.fancy-markdown-editor": {
|
||||
"version": "1.3.4",
|
||||
"base64": "fbee0c66041d942b4f62d9bf4bbc9df99c64b3d2aad4a00be66d0516dd86a922",
|
||||
"binary": "f2f36a306abd5a878ec6d204325e001db8cbaebe50629687d6f14c35bb1f78b1"
|
||||
"version": "1.3.5",
|
||||
"base64": "db05eaff4380af3f89c30559b2da6a1ab7075591718306e8ecfc8fa3864a1891",
|
||||
"binary": "7adf87b091dd45c4a9d3adaf9f0e12f18acd7fb74078a7be909f5de075eab8e0"
|
||||
},
|
||||
"org.standardnotes.simple-task-editor": {
|
||||
"version": "1.3.7",
|
||||
"base64": "76211fea01d5ad5d44c70a27e90493ffde010621abb3996408c1b5da2e141d3c",
|
||||
"binary": "6a9236dda72e41408005993d37685cfa98cc2d82d4f2085aea8c88b3a0951501"
|
||||
"version": "1.3.8",
|
||||
"base64": "012523870d7c8b7024ea2da31c1c216a0ccfa5cf05183913f0486f1b845a366d",
|
||||
"binary": "17f3bfdd55ab517a7e47c70b0ebc8c933b1eb5fdeabbc88e8064408421e2e4f8"
|
||||
},
|
||||
"org.standardnotes.token-vault": {
|
||||
"version": "2.0.7",
|
||||
"base64": "56f8ac6a46a60c9e949e5409696f1afe93296563c6940b7df1770a1dec41d7ab",
|
||||
"binary": "525da86875fb7238ae92eb4bd60a829add4a79623a15ca3182aa221cd44b32f4"
|
||||
"version": "2.0.9",
|
||||
"base64": "a40b7df5ac564c763fb1b8f588dcf584576cb4c2ee6d88e456cfa2dc49fec91c",
|
||||
"binary": "04d6c4765de4e2cdd4e28f3f8c30e79a49e980fa1cdd9df812e844f8486795f3"
|
||||
},
|
||||
"org.standardnotes.standard-sheets": {
|
||||
"version": "1.4.2",
|
||||
"base64": "d32d7f8cc8141d9c8983849d8bcb25bfb1000710b6380ee7287a8c22c6366a90",
|
||||
"binary": "1cf178db81042c7afe779cd53114a4d0d5004259d6fbba315eb0a78e7caabece"
|
||||
"version": "1.4.3",
|
||||
"base64": "e38ed30e821bd7a4dc13026898215c892911c91217e5dcdf9d9ebdc25e05b711",
|
||||
"binary": "c51b4bfbb11ca60d4f81c7c28fba7d24da56b6dcdb799d12e34e1882d9873db3"
|
||||
},
|
||||
"org.standardnotes.file-safe": {
|
||||
"version": "2.0.10",
|
||||
|
||||
1
public/components/org.standardnotes.advanced-markdown-editor/dist/app.js.map
vendored
Normal file
1
public/components/org.standardnotes.advanced-markdown-editor/dist/app.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "sn-advanced-markdown-editor",
|
||||
"version": "1.3.14",
|
||||
"version": "1.4.1",
|
||||
"description": "A Standard Notes derived editor that offers full support for Markdown editing.",
|
||||
"main": "dist/dist.js",
|
||||
"author": "Standard Notes <hello@standardnotes.org>",
|
||||
"author": "Standard Notes <hello@standardnotes.com>",
|
||||
"license": "AGPL-3.0",
|
||||
"sn": {
|
||||
"main": "dist/index.html"
|
||||
@@ -20,7 +20,7 @@
|
||||
"@babel/cli": "^7.13.10",
|
||||
"@babel/core": "^7.13.13",
|
||||
"@babel/preset-env": "^7.13.12",
|
||||
"@standardnotes/component-relay": "2.1.0",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.2",
|
||||
"copy-webpack-plugin": "^8.1.0",
|
||||
"css-loader": "^5.2.0",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-bold-editor",
|
||||
"version": "1.2.10",
|
||||
"version": "1.3.2",
|
||||
"main": "dist/dist.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
@@ -17,7 +17,7 @@
|
||||
"@babel/eslint-parser": "^7.13.14",
|
||||
"@babel/preset-env": "^7.13.12",
|
||||
"@babel/preset-react": "^7.13.13",
|
||||
"@standardnotes/editor-kit": "2.1.4",
|
||||
"@standardnotes/editor-kit": "2.2.1",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.3",
|
||||
"babel-loader": "^8.2.2",
|
||||
"copy-webpack-plugin": "^8.1.1",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-code-editor",
|
||||
"version": "1.3.8",
|
||||
"version": "1.3.9",
|
||||
"description": "A code editor for Standard Notes",
|
||||
"main": "dist/main.js",
|
||||
"author": "Standard Notes <hello@standardnotes.org>",
|
||||
@@ -16,8 +16,8 @@
|
||||
"@babel/cli": "^7.12.10",
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/preset-env": "^7.12.11",
|
||||
"@standardnotes/component-relay": "2.0.3",
|
||||
"codemirror": "^5.59.2",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"codemirror": "5.59.2",
|
||||
"copy-webpack-plugin": "^7.0.0",
|
||||
"css-loader": "^5.0.1",
|
||||
"eslint": "^7.18.0",
|
||||
|
||||
@@ -229,12 +229,12 @@ h3 {
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: .5em 0 .25em;
|
||||
margin: 0.5em 0 0.25em;
|
||||
font-size: 225%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 1em 0 .25em;
|
||||
margin: 1em 0 0.25em;
|
||||
font-size: 175%;
|
||||
}
|
||||
|
||||
@@ -425,9 +425,9 @@ textarea {
|
||||
|
||||
.result-html .svg-preview {
|
||||
overflow: visible;
|
||||
-webkit-transition: opacity .4s ease-in-out;
|
||||
-moz-transition: opacity .4s ease-in-out;
|
||||
transition: opacity .4s ease-in-out;
|
||||
-webkit-transition: opacity 0.4s ease-in-out;
|
||||
-moz-transition: opacity 0.4s ease-in-out;
|
||||
transition: opacity 0.4s ease-in-out;
|
||||
fill: var(--sn-stylekit-info-color);
|
||||
}
|
||||
|
||||
@@ -520,3 +520,5 @@ textarea {
|
||||
-webkit-text-fill-color: initial;
|
||||
}
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=app.css.map */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<base target="_blank">
|
||||
<base target="_blank">
|
||||
<meta charset="UTF-8">
|
||||
<title>Markdown Math</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
@@ -18,61 +18,35 @@
|
||||
<button class="toolbar-button _download-source" title="Download source">⇓</button>
|
||||
</div>
|
||||
<div class="header-item demo-control">
|
||||
<input
|
||||
class="control-input"
|
||||
id="id_html"
|
||||
type="radio"
|
||||
name="source_type"
|
||||
checked="checked" ><label
|
||||
class="control-item"
|
||||
for="id_html"
|
||||
title="Example of rendered HTML"
|
||||
data-result-as="html"
|
||||
>preview</label>
|
||||
<input
|
||||
class="control-input"
|
||||
id="id_src"
|
||||
type="radio"
|
||||
name="source_type"
|
||||
><label
|
||||
class="control-item"
|
||||
for="id_src"
|
||||
title="HTML with rendered equations"
|
||||
data-result-as="src"
|
||||
>html</label>
|
||||
<input
|
||||
class="control-input"
|
||||
id="id_htmltex"
|
||||
type="radio"
|
||||
name="source_type"
|
||||
><label
|
||||
class="control-item"
|
||||
for="id_htmltex"
|
||||
title="HTML with raw LaTeX equations"
|
||||
data-result-as="htmltex"
|
||||
>html-tex</label>
|
||||
<input
|
||||
class="control-input"
|
||||
id="id_md"
|
||||
type="radio"
|
||||
name="source_type"
|
||||
><label
|
||||
class="control-item"
|
||||
for="id_md"
|
||||
title="Markdown with rendered equations"
|
||||
data-result-as="md"
|
||||
>md</label>
|
||||
<button class="toolbar-button _download-result" title="Download result">⇓</button>
|
||||
<input class="control-input" id="id_html" type="radio" name="source_type" checked="checked"><label
|
||||
class="control-item" for="id_html" title="Example of rendered HTML" data-result-as="html">preview</label>
|
||||
<input class="control-input" id="id_src" type="radio" name="source_type"><label class="control-item" for="id_src"
|
||||
title="HTML with rendered equations" data-result-as="src">html</label>
|
||||
<input class="control-input" id="id_htmltex" type="radio" name="source_type"><label class="control-item"
|
||||
for="id_htmltex" title="HTML with raw LaTeX equations" data-result-as="htmltex">html-tex</label>
|
||||
<input class="control-input" id="id_md" type="radio" name="source_type"><label class="control-item" for="id_md"
|
||||
title="Markdown with rendered equations" data-result-as="md">md</label>
|
||||
<button class="toolbar-button _download-result" title="Download result">⇓</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container full-height" id="container-block"><!--
|
||||
--><div class="half-width full-height source-wrap" id="source-block"><textarea id="editor-source" class="source full-height"></textarea></div><!--
|
||||
--><div class="slider full-height" id="slider"></div><!--
|
||||
--><div class="half-width full-height" id="result-block">
|
||||
<div class="container full-height" id="container-block">
|
||||
<!--
|
||||
-->
|
||||
<div class="half-width full-height source-wrap" id="source-block"><textarea id="editor-source"
|
||||
class="source full-height"></textarea></div>
|
||||
<!--
|
||||
-->
|
||||
<div class="slider full-height" id="slider"></div>
|
||||
<!--
|
||||
-->
|
||||
<div class="half-width full-height" id="result-block">
|
||||
<div class="result-html full-height"></div>
|
||||
<pre class="result-src full-height"><code class="result-src-content"></code></pre>
|
||||
</div><!--
|
||||
--></div>
|
||||
<script src="dist/dist.js"></script>
|
||||
</div>
|
||||
<!--
|
||||
-->
|
||||
</div>
|
||||
<script src="dist/dist.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-fancy-markdown-editor",
|
||||
"version": "1.3.4",
|
||||
"version": "1.3.5",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@@ -11,6 +11,7 @@
|
||||
"@babel/cli": "^7.7.7",
|
||||
"@babel/core": "^7.7.7",
|
||||
"@babel/preset-env": "^7.7.7",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"draggabilly": "^2.2.0",
|
||||
"grunt": "^1.0.4",
|
||||
"grunt-babel": "^8.0.0",
|
||||
@@ -18,15 +19,16 @@
|
||||
"grunt-contrib-concat": "^1.0.1",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-contrib-sass": "^1.0.0",
|
||||
"grunt-contrib-uglify": "^5.0.1",
|
||||
"grunt-contrib-watch": "^1.1.0",
|
||||
"grunt-newer": "^1.3.0",
|
||||
"grunt-remove-comments": "^0.1.6",
|
||||
"katex": "^0.11.1",
|
||||
"markdown-it": "^10.0.0",
|
||||
"markdown-it-footnote": "^3.0.2",
|
||||
"markdown-it-sub": "^1.0.0",
|
||||
"markdown-it-sup": "^1.0.0",
|
||||
"markdown-it-task-lists": "^2.1.1",
|
||||
"sn-components-api": "1.2.8",
|
||||
"sn-stylekit": "2.0.20"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -492,3 +492,5 @@ html {
|
||||
.CodeMirror .cm-link, .CodeMirror .cm-string, .CodeMirror .cm-keyword {
|
||||
color: var(--sn-stylekit-info-color);
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=app.css.map */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-minimal-markdown-editor",
|
||||
"version": "1.3.7",
|
||||
"version": "1.3.8",
|
||||
"description": "A minimal Markdown editor for Standard Notes.",
|
||||
"main": "dist/dist.js",
|
||||
"author": "Standard Notes <hello@standardnotes.org>",
|
||||
@@ -13,6 +13,7 @@
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.11.1",
|
||||
"@babel/preset-env": "^7.11.0",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"babel-cli": "^6.26.0",
|
||||
"codemirror": "^5.56.0",
|
||||
"grunt": "^1.2.1",
|
||||
@@ -23,7 +24,6 @@
|
||||
"grunt-contrib-sass": "^1.0.0",
|
||||
"grunt-contrib-watch": "^1.1.0",
|
||||
"grunt-newer": "^1.3.0",
|
||||
"sn-components-api": "1.2.8",
|
||||
"sn-stylekit": "2.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function u(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Until we can encrypt image files, uploads are not currently supported. We recommend using the Image button in the toolbar and copying an image URL instead.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if(c==o)return;const m=$("#summernote");if(m){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(m.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g,"<br />"));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`<body>${e}</body>`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=u()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=u();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return m.summernote("code",""),void m.summernote("disable");m.summernote("enable"),m.summernote("code",c),r&&(m.summernote("commit"),r=!1),a=!1}}(l)}))}));
|
||||
document.addEventListener("DOMContentLoaded",(function(){let e,t,n,o,i,a=!1,r=!0,s=!1;const l=["address","article","aside","blockquote","details","dialog","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","ol","p","pre","section","table","ul"].join(", ");function c(){if(t){const i=t;e.saveItemWithPresave(i,(()=>{o=$("#summernote").summernote("code"),i.clientData=n,i.content.text=o,i.content.preview_plain=function(e,t=90){return e.length<=t?e:e.substring(0,t)+"..."}(function(e){const t=document.implementation.createHTMLDocument("New").body;return t.innerHTML=e,t.textContent||t.innerText||""}(o)),i.content.preview_html=null}))}}function u(){return e.getComponentDataValueForKey("notes")||{}}$("#summernote").summernote({height:500,minHeight:null,maxHeight:null,focus:!0,tabDisable:!0,showDomainOnlyForAutolink:!1,toolbar:[["para",["style"]],["style",["bold","italic","underline","strikethrough","clear"]],["fontsize",["fontsize","fontname"]],["color",["color"]],["para",["ul","ol","paragraph"]],["height",["height"]],["insert",["table","link","hr","picture","video"]],["misc",["codeview","help"]]],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Monospace","Roboto","system-ui","Tahoma","Times New Roman","Verdana"],callbacks:{onInit:function(){},onImageUpload:function(){alert("Until we can encrypt image files, uploads are not currently supported. We recommend using the Image button in the toolbar and copying an image URL instead.")}}}),$("#summernote").on("summernote.change",(function(){document.querySelectorAll(l).forEach((e=>e.setAttribute("dir","auto"))),a||c()})),$("textarea.note-codable").on("input",(()=>{c()})),e=new ComponentRelay({initialPermissions:[{name:"stream-context-item"}],targetWindow:window,onReady:()=>{const t=e.platform;t&&document.body.classList.add(t)}}),e.streamContextItem((l=>{!function(l){if(l.uuid!==i&&(o=null,r=!0,i=l.uuid),t=l,l.isMetadataUpdate)return;n=l.clientData;let c=l.content.text;if($(".note-editable").attr("spellcheck",JSON.stringify(l.content.spellcheck)),c==o)return;const m=$("#summernote");if(m){a=!0;const t=/<[a-z][\s\S]*>/i.test(c);s||(m.summernote("fullscreen.toggle"),s=!0),r&&!t&&(c=((c||"")+"").replace(/\t/g," ").replace(/\r\n|\r|\n/g,"<br />"));let n=!1;if(function(e){const t=(new DOMParser).parseFromString(`<body>${e}</body>`,"text/html");return Array.from(t.body.childNodes).some((e=>"SCRIPT"==e.nodeName))}(c)){const t=u()[i];t?n=t.trustUnsafeContent||!1:new Promise((e=>{new Stylekit.SKAlert({title:null,text:"We’ve detected that this note contains a script or code snippet which may be unsafe to execute. Scripts executed in the editor have the ability to impersonate as the editor to Standard Notes. Press Continue to mark this script as safe and proceed, or Cancel to avoid rendering this note.",buttons:[{text:"Cancel",style:"neutral",action:function(){e(!1)}},{text:"Continue",style:"danger",action:function(){e(!0)}}]}).present()})).then((t=>{t&&(function(t,n){const o=u();o[i]={trustUnsafeContent:n},e.setComponentDataValueForKey("notes",o)}(0,t),n=t)}))}else n=!0;if(!n)return m.summernote("code",""),void m.summernote("disable");m.summernote("enable"),m.summernote("code",c),r&&(m.summernote("commit"),r=!1),a=!1}}(l)}))}));
|
||||
//# sourceMappingURL=dist.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"name": "sn-plus-editor",
|
||||
"version": "1.5.0",
|
||||
"version": "1.6.1",
|
||||
"description": "A rich text editor for Standard Notes",
|
||||
"main": "dist/dist.js",
|
||||
"author": "Standard Notes <hello@standardnotes.org>",
|
||||
"author": "Standard Notes <hello@standardnotes.com>",
|
||||
"scripts": {
|
||||
"lint": "eslint --ext .js .",
|
||||
"build": "webpack --config webpack.prod.js",
|
||||
@@ -17,7 +17,7 @@
|
||||
"@babel/core": "^7.13.8",
|
||||
"@babel/eslint-parser": "^7.13.8",
|
||||
"@babel/preset-env": "^7.13.8",
|
||||
"@standardnotes/component-relay": "2.1.0",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"@standardnotes/eslint-config-extensions": "1.0.1",
|
||||
"bootstrap": "3.4.1",
|
||||
"css-loader": "^5.1.0",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-simple-markdown-editor",
|
||||
"version": "1.4.0",
|
||||
"version": "1.4.1",
|
||||
"main": "dist/dist.js",
|
||||
"scripts": {
|
||||
"lint": "eslint --cache --ext .jsx,.js --format=node_modules/eslint-formatter-pretty .",
|
||||
@@ -23,7 +23,7 @@
|
||||
"@babel/preset-stage-0": "^7.8.3",
|
||||
"@babel/register": "^7.10.5",
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@standardnotes/component-relay": "2.1.0",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.0",
|
||||
"babel-loader": "^8.1.0",
|
||||
"copy-webpack-plugin": "6.0.3",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-simple-task-editor",
|
||||
"version": "1.3.7",
|
||||
"version": "1.3.8",
|
||||
"main": "dist/dist.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
@@ -19,7 +19,7 @@
|
||||
"@babel/plugin-transform-runtime": "^7.13.0",
|
||||
"@babel/preset-env": "^7.13.10",
|
||||
"@babel/preset-react": "^7.12.13",
|
||||
"@standardnotes/component-relay": "2.0.3",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.2",
|
||||
"babel-loader": "^8.2.2",
|
||||
"css-loader": "^5.1.3",
|
||||
@@ -36,7 +36,7 @@
|
||||
"sass-loader": "^11.0.1",
|
||||
"sn-stylekit": "2.0.19",
|
||||
"sortablejs": "^1.10.1",
|
||||
"style-loader": "~1.0.1",
|
||||
"style-loader": "^1.0.1",
|
||||
"terser-webpack-plugin": "^5.1.1",
|
||||
"validate-commit-msg": "2.x",
|
||||
"webpack": "^5.24.4",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-spreadsheets",
|
||||
"version": "1.4.2",
|
||||
"version": "1.4.3",
|
||||
"main": "dist/dist.js",
|
||||
"scripts": {
|
||||
"lint": "eslint app/ --ext .js",
|
||||
@@ -20,6 +20,7 @@
|
||||
"@babel/plugin-transform-runtime": "^7.10.1",
|
||||
"@babel/preset-env": "^7.14.7",
|
||||
"@babel/preset-react": "^7.10.1",
|
||||
"@standardnotes/component-relay": "2.2.0",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.4",
|
||||
"babel-loader": "^8.2.2",
|
||||
"copy-webpack-plugin": "^9.0.1",
|
||||
@@ -31,7 +32,6 @@
|
||||
"react": "16.x",
|
||||
"react-dom": "16.x",
|
||||
"sass-loader": "^11.0.1",
|
||||
"sn-components-api": "1.2.8",
|
||||
"sn-stylekit": "2.0.22",
|
||||
"style-loader": "^3.0.0",
|
||||
"terser-webpack-plugin": "^5.1.4",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sn-token-vault",
|
||||
"version": "2.0.7",
|
||||
"version": "2.0.9",
|
||||
"main": "dist/dist.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
@@ -19,7 +19,7 @@
|
||||
"@babel/plugin-transform-runtime": "^7.13.10",
|
||||
"@babel/preset-env": "^7.13.10",
|
||||
"@babel/preset-react": "^7.12.13",
|
||||
"@standardnotes/editor-kit": "2.1.4",
|
||||
"@standardnotes/editor-kit": "2.2.1",
|
||||
"@standardnotes/eslint-config-extensions": "^1.0.1",
|
||||
"@svgr/webpack": "^6.1.2",
|
||||
"babel-loader": "^8.2.2",
|
||||
|
||||
192
yarn.lock
192
yarn.lock
@@ -2597,75 +2597,69 @@
|
||||
dependencies:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
"@standardnotes/auth@3.8.1":
|
||||
version "3.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.8.1.tgz#4197fb2f7e223c6bd13a870a3feac3c73294fb3c"
|
||||
integrity sha512-Q2/81dgFGIGuYlQ4VnSjGRsDB0Qw0tQP/qsiuV+DQj+wdp5Wy5WX3Q4g+p2PNvoyEAYgbuduEHZfWuTLAaIdyw==
|
||||
"@standardnotes/auth@^3.15.3":
|
||||
version "3.15.3"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.15.3.tgz#bf77332e0ac3d846acc45f25083459e42f4a4374"
|
||||
integrity sha512-16wgMl0qmq8w+HUktfQ7ODoprkngSs0vsSF5G9aHM1L+lFMwlGeVOztHH2zwG91pFkl7BaK6LcEimoYiml6VAw==
|
||||
dependencies:
|
||||
"@standardnotes/common" "^1.2.1"
|
||||
"@standardnotes/common" "^1.8.0"
|
||||
jsonwebtoken "^8.5.1"
|
||||
|
||||
"@standardnotes/auth@3.8.3", "@standardnotes/auth@^3.8.1":
|
||||
version "3.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/auth/-/auth-3.8.3.tgz#6e627c1a1a9ebf91d97f52950d099bf7704382e3"
|
||||
integrity sha512-wz056b3pv8IIX74lYaqjCUvnw3NSow+ex5pn/VlGxg8r7gq19WsmgyXP2BoE7nqKddO1JMlFok+4gdnutYF0Cw==
|
||||
"@standardnotes/common@^1.8.0":
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.8.0.tgz#af72ad85f0d410ae31c0c110137911e2595634de"
|
||||
integrity sha512-R3nfAvhaXp5ufMB0M0fmV9yizE/Of2PGNJKnxtdxwowAq/ZakHu8Rh/v485PXrCaCFREVOZQO8kg0RQM8YngSw==
|
||||
|
||||
"@standardnotes/components@1.4.3":
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.4.3.tgz#e48205a00b2727a9d68c051785806f35985754b5"
|
||||
integrity sha512-MUVPEQmRICLgQ3s+TPNP09w6GBbIO1B0WaqAoYJX3x21RAxyHwxIKzuz66g2VmlzrHevD92hepix3/ps0qwa4g==
|
||||
|
||||
"@standardnotes/domain-events@^2.17.1":
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.17.1.tgz#fa10eac7b6072da5d8e06b5e0b41eee256ed3879"
|
||||
integrity sha512-9B0WtXPwL4RhZtlJ5DAapXMV8rAxyJ9oYaktfe67xm5OXbO5rgqyfe05O7u2N1SVj31PlQbJinrnelXiWpQfrA==
|
||||
dependencies:
|
||||
"@standardnotes/common" "^1.2.1"
|
||||
"@standardnotes/auth" "^3.15.3"
|
||||
|
||||
"@standardnotes/common@1.2.1", "@standardnotes/common@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/common/-/common-1.2.1.tgz#9db212db86ccbf08b347da02549b3dbe4bedbb02"
|
||||
integrity sha512-HilBxS50CBlC6TJvy1mrnhGVDzOH63M/Jf+hyMxQ0Vt1nYzpd0iyxVEUrgMh7ZiyO1b9CLnCDED99Jy9rnZWVQ==
|
||||
|
||||
"@standardnotes/components@1.2.8":
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/components/-/components-1.2.8.tgz#fc104f520edcc6c80e958167758d844094297554"
|
||||
integrity sha512-M6pBV0ZULNZr+Q5d+xq1i5ZahZtwy6Daf+XGRQOBbWjrme/ECAW+2VXBRk3YkK4+DbRTziFDoiod9wJ011mQiw==
|
||||
|
||||
"@standardnotes/domain-events@2.5.1":
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/domain-events/-/domain-events-2.5.1.tgz#e6433e940ae616683d1c24f76133c70755504c44"
|
||||
integrity sha512-p0VB4Al/ZcVqcj9ztU7TNqzc3jjjG6/U7x9lBW/QURHxpB+PnwJq3kFU5V5JA9QpCOYlXLT71CMERMf/O5QX6g==
|
||||
"@standardnotes/features@1.25.0", "@standardnotes/features@^1.25.0":
|
||||
version "1.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.25.0.tgz#7ea32b547030ae82a60a2b30c458073072bd60c9"
|
||||
integrity sha512-8mwP6/WC/5YSfjNw/uburRDpXltebXyKWVmTWlewNdwWEnXMaTm9FqmuYvs1EDPPBIlKYheLQfK6bu78eEjLMQ==
|
||||
dependencies:
|
||||
"@standardnotes/auth" "^3.8.1"
|
||||
"@standardnotes/auth" "^3.15.3"
|
||||
"@standardnotes/common" "^1.8.0"
|
||||
|
||||
"@standardnotes/features@1.20.7", "@standardnotes/features@^1.20.7":
|
||||
version "1.20.7"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/features/-/features-1.20.7.tgz#d666569492e942eaecc05e40a79d50d33df4fbe9"
|
||||
integrity sha512-eaZu/+PvHYXWaq6r3ET87t52lZqFknZVUEjspAL34Fdr+5cDma5ZRoylx6hPCVDO9VpHd6fjGWlS+5kZ+qJ+bA==
|
||||
"@standardnotes/settings@^1.10.0":
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/settings/-/settings-1.10.0.tgz#b46d4805c9a1cfb3fa3d9b3915daae9dd5661789"
|
||||
integrity sha512-FUy4RDI7nFnbOGAaX5wMvBz+6Yto5tXGXDAi7bnWALZByTIlN8bkFZ2CNk2skjpzeOxBjqhCRi+GRCcuMqZ70A==
|
||||
|
||||
"@standardnotes/sncrypto-common@^1.6.0":
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-common/-/sncrypto-common-1.6.0.tgz#c6174adf65c778c8d53e45ea4c68087786f86b67"
|
||||
integrity sha512-3gTTokb+DWxtBH72auVtoB76V9pCZWyQ7hmClgBuQF3i5j6HvuuBZGiicHmwAv1zJxMi/op3haE8lwzQc8NJ9g==
|
||||
|
||||
"@standardnotes/sncrypto-web@1.6.0":
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-web/-/sncrypto-web-1.6.0.tgz#eb09aad9b617fbb1e1dcac13dd049a473bcc4feb"
|
||||
integrity sha512-FhehxNCcqjiA8aNRApdswVIZ3IydzXPoKG8K4AKsThUlIGlFra7qeyyVVxmEj0dTW7tXpP3SXH01n0LiYgM8vw==
|
||||
dependencies:
|
||||
"@standardnotes/auth" "3.8.3"
|
||||
"@standardnotes/common" "1.2.1"
|
||||
|
||||
"@standardnotes/settings@^1.9.0":
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/settings/-/settings-1.9.0.tgz#0f01da5f6782363e4d77ee584b40f8614c555626"
|
||||
integrity sha512-y+Mh7NuXtekEDr4PAvzg9KcRaCdd+0zlTXWO2D5MG28lLv/uhZmSsyWxZCVZqW3Rx6vz3c9IJdi7SoXN51gzSQ==
|
||||
|
||||
"@standardnotes/sncrypto-common@1.5.2", "@standardnotes/sncrypto-common@^1.5.2":
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-common/-/sncrypto-common-1.5.2.tgz#be9404689d94f953c68302609a4f76751eaa82cd"
|
||||
integrity sha512-+OQ6gajTcVSHruw33T52MHyBDKL1vRCfQBXQn4tt4+bCfBAe+PFLkEQMHp35bg5twCfg9+wUf2KhmNNSNyBBZw==
|
||||
|
||||
"@standardnotes/sncrypto-web@1.5.3":
|
||||
version "1.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/sncrypto-web/-/sncrypto-web-1.5.3.tgz#b055bcac553914cbeebfa10e45f46fff817116c3"
|
||||
integrity sha512-thyFc71cTJTfmLNPgT1hDMiMefZ1bgN0eTa22GEJSp4T41J/X9MldyP2dTmc7sHNM95TJlwzlIJ0iQtxFUE50w==
|
||||
dependencies:
|
||||
"@standardnotes/sncrypto-common" "^1.5.2"
|
||||
"@standardnotes/sncrypto-common" "^1.6.0"
|
||||
buffer "^6.0.3"
|
||||
libsodium-wrappers "^0.7.9"
|
||||
|
||||
"@standardnotes/snjs@2.35.5":
|
||||
version "2.35.5"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.35.5.tgz#eddeb2ec084d3828ffbec5bbece8ba6483956234"
|
||||
integrity sha512-nftxSfHhS45jTUfe98rTV1Ie3zLVrke2M1U8OwttA7vQvg5e9f3aoLUml5efNMe02r7xVYf09/BIwxvZ0Zo4uw==
|
||||
"@standardnotes/snjs@2.41.0":
|
||||
version "2.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@standardnotes/snjs/-/snjs-2.41.0.tgz#48d02e981780a9d7d823f6186497a1c6459bbd66"
|
||||
integrity sha512-Rnl5wWbMKTQ+bQb7zGK/7HFt43bMBlP06G5zoEE0Vj/uxyneLxaEX+iPNXRUDqeHfxvedtTnIXsLGFEux/G1dg==
|
||||
dependencies:
|
||||
"@standardnotes/auth" "3.8.1"
|
||||
"@standardnotes/common" "1.2.1"
|
||||
"@standardnotes/domain-events" "2.5.1"
|
||||
"@standardnotes/features" "^1.20.7"
|
||||
"@standardnotes/settings" "^1.9.0"
|
||||
"@standardnotes/sncrypto-common" "1.5.2"
|
||||
"@standardnotes/auth" "^3.15.3"
|
||||
"@standardnotes/common" "^1.8.0"
|
||||
"@standardnotes/domain-events" "^2.17.1"
|
||||
"@standardnotes/features" "^1.25.0"
|
||||
"@standardnotes/settings" "^1.10.0"
|
||||
"@standardnotes/sncrypto-common" "^1.6.0"
|
||||
|
||||
"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
|
||||
version "5.4.0"
|
||||
@@ -3897,6 +3891,11 @@ bser@2.1.1:
|
||||
dependencies:
|
||||
node-int64 "^0.4.0"
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
@@ -4861,6 +4860,13 @@ ecc-jsbn@~0.1.1:
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
@@ -7102,6 +7108,22 @@ json5@^2.1.2:
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
jsonwebtoken@^8.5.1:
|
||||
version "8.5.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
|
||||
integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
|
||||
dependencies:
|
||||
jws "^3.2.2"
|
||||
lodash.includes "^4.3.0"
|
||||
lodash.isboolean "^3.0.3"
|
||||
lodash.isinteger "^4.0.4"
|
||||
lodash.isnumber "^3.0.3"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.isstring "^4.0.1"
|
||||
lodash.once "^4.0.0"
|
||||
ms "^2.1.1"
|
||||
semver "^5.6.0"
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
||||
@@ -7128,6 +7150,23 @@ jstransformer@1.0.0:
|
||||
array-includes "^3.1.2"
|
||||
object.assign "^4.1.2"
|
||||
|
||||
jwa@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
|
||||
integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
|
||||
dependencies:
|
||||
buffer-equal-constant-time "1.0.1"
|
||||
ecdsa-sig-formatter "1.0.11"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
jws@^3.2.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
|
||||
integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
|
||||
dependencies:
|
||||
jwa "^1.4.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
kind-of@^3.0.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
||||
@@ -7275,6 +7314,36 @@ lodash.debounce@^4.0.8:
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
|
||||
|
||||
lodash.includes@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||
integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
|
||||
|
||||
lodash.isboolean@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
|
||||
integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
|
||||
|
||||
lodash.isinteger@^4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
|
||||
integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
|
||||
|
||||
lodash.isnumber@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
|
||||
integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
|
||||
|
||||
lodash.isplainobject@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
|
||||
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
|
||||
|
||||
lodash.isstring@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
|
||||
integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
|
||||
|
||||
lodash.memoize@4.x:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||
@@ -7285,6 +7354,11 @@ lodash.merge@^4.6.2:
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
||||
|
||||
lodash.once@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
||||
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
|
||||
|
||||
lodash@^4.0.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.10:
|
||||
version "4.17.20"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
@@ -9082,7 +9156,7 @@ selfsigned@^1.10.11:
|
||||
dependencies:
|
||||
node-forge "^0.10.0"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0:
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
Reference in New Issue
Block a user