diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index 7cb8dfd6..2f803622 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -16,3 +16,17 @@ jobs:
node-version-matrix: '[24]'
upload-coverage: false
disable-test-package: true
+
+ check-filenames:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '24'
+
+ - name: Run filenames check
+ run: node checkFilenames.mjs
diff --git a/blog/releases/1.0.md b/blog/releases/1.0.md
index 53669c1c..e2eab66c 100644
--- a/blog/releases/1.0.md
+++ b/blog/releases/1.0.md
@@ -149,8 +149,8 @@ The new `blackRois` and `whiteRois` properties provide more intuitive access to
For more information, please visit these tutorials:
-- [Image segmentation with `threshold()` and `fromMask()`](../../docs/Tutorials/Image%20segmentation%20with%20threshold)
-- [Image segmentation with `watershed()`](../../docs/Tutorials/Image%20segmentation%20with%20watershed)
+- [Image segmentation with `threshold()` and `fromMask()`](../../docs/tutorials/image-segmentation-with-threshold)
+- [Image segmentation with `watershed()`](../../docs/tutorials/image-segmentation-with-watershed)
### Sobel and Scharr filters
@@ -266,7 +266,7 @@ The following deprecated features have been removed:
- `countAlphaPixel()` - Use custom pixel counting with [`getPixel()`](https://api.image-js.org/classes/index.Image.html#getpixel 'API link on getPixel').
- `paintLabels()` and `roi.paint()` - Features have been removed due to dependency issues. We plan to add it back in future updates.
-- `warpingFourPoints()` - Use [`getPerspectiveWarpMatrix()`](../../docs/Features/Geometry/Get%20Perspective%20Warp%20Matrix 'internal link on getPerspectiveWarp') + [`transform()`](#transform) instead.
+- `warpingFourPoints()` - Use [`getPerspectiveWarpMatrix()`](../../docs/features/geometry/get-perspective-warp-matrix 'internal link on getPerspectiveWarp') + [`transform()`](#transform) instead.
- 32-bit color depth support and `abs()` have been removed.
- `CMYK` and `HSL` color models have been removed.
- `paintMasks()` has been removed. Use [`paintMask()`](https://api.image-js.org/classes/index.Image.html#paintmask 'API link on paintMask')+ a `for` loop.
@@ -303,7 +303,7 @@ const matrix = getPerspectiveWarp(sourcePoints);
const warped = img.transform(matrix);
```
-For more details, [visit our tutorial](../../docs/Tutorials/Applying%20transform%20function%20on%20images 'internal link on transform function tutorial') on how image transformations work how they can be used.
+For more details, [visit our tutorial](../../docs/tutorials/applying-transform-function-on-images 'internal link on transform function tutorial') on how image transformations work how they can be used.
### Bicubic interpolation
@@ -323,11 +323,11 @@ const resized = img.resize(800, 600, { interpolation: 'bicubic' });
const prewitt = img.derivative({ filter: 'prewitt' });
```
-**Use cases**: Object detection, image segmentation, feature extraction. You can [learn more about it here](../../docs/Features/Morphology/Morphological%20Gradient 'internal link on morphological gradient').
+**Use cases**: Object detection, image segmentation, feature extraction. You can [learn more about it here](../../docs/features/morphology/morphological-gradient 'internal link on morphological gradient').
### Migration from deprecated methods
-`warpingFourPoints()` has been removed. Now you have [`getPerspectiveWarp()`](../../docs/Features/Geometry/Get%20Perspective%20Warp%20Matrix 'internal link on perspective warp') that returns a matrix that can be applied on the image of interest in a new `transform()`.
+`warpingFourPoints()` has been removed. Now you have [`getPerspectiveWarp()`](../../docs/features/geometry/get-perspective-warp-matrix 'internal link on perspective warp') that returns a matrix that can be applied on the image of interest in a new `transform()`.
```ts
// Before
@@ -338,7 +338,7 @@ const matrix = getPerspectiveWarp(corners);
const warped = img.transform(matrix);
```
-**Use cases**: Rectification of a perspective angle of an image. You can learn more about it [here](../../docs/Features/Geometry/Get%20Perspective%20Warp%20Matrix 'internal link on perspective warp').
+**Use cases**: Rectification of a perspective angle of an image. You can learn more about it [here](../../docs/features/geometry/get-perspective-warp-matrix 'internal link on perspective warp').
### `merge()`
diff --git a/checkFilenames.mjs b/checkFilenames.mjs
new file mode 100644
index 00000000..e648c6a3
--- /dev/null
+++ b/checkFilenames.mjs
@@ -0,0 +1,53 @@
+import fs from 'fs';
+import path from 'path';
+
+const __dirname = import.meta.dirname;
+
+function getAllFiles(dirPath) {
+ let incorrectFormatFiles = [];
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
+
+ const filenameFormat = /^[a-z0-9]+(?:[-.][a-z0-9]+)*$/;
+
+ for (const entry of entries) {
+ // Skip certain files/folders
+ if (
+ entry.name === '.DS_Store' ||
+ entry.name === 'images' ||
+ entry.name === 'demos' ||
+ entry.name === '_category_.json'
+ ) {
+ continue;
+ }
+
+ // Get the name without extension for files, or full name for directories
+ const nameToTest = entry.isFile()
+ ? path.parse(entry.name).name
+ : entry.name;
+
+ if (!filenameFormat.test(nameToTest)) {
+ incorrectFormatFiles.push(path.join(dirPath, entry.name));
+ }
+
+ // Recursively check subdirectories
+ if (entry.isDirectory()) {
+ const subDirResults = getAllFiles(path.join(dirPath, entry.name));
+ incorrectFormatFiles = incorrectFormatFiles.concat(subDirResults);
+ }
+ }
+
+ return incorrectFormatFiles;
+}
+
+const folders = ['docs', 'blog'];
+
+for (const folder of folders) {
+ const folderPath = path.join(__dirname, folder);
+ const incorrectFormatFiles = getAllFiles(folderPath);
+ if (incorrectFormatFiles.length !== 0) {
+ throw new Error(
+ `Files with incorrect filename format found:\n${incorrectFormatFiles.join('\n')}`,
+ );
+ }
+}
+console.log('All files have passed the check.');
diff --git a/docs/Features/Comparison/Comparison.md b/docs/Features/Comparison/Comparison.md
deleted file mode 100644
index c7dc9efb..00000000
--- a/docs/Features/Comparison/Comparison.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-sidebar_position: 0
----
-
-# Comparison
-
-Comparison methods are methods that compare other images for feature matching or change detection by subtraction or addition of image values etc.
-The specific reasons for comparing images depend on the application and the desired outcome. In many cases, it is also a valuable tool for identifying changes, isolating objects, enhancing features, and improving image quality for various purposes.
-
-### Methods
-
-| Can be applied on | Images | Masks |
-| ------------------------------------------------------------------------------- | -------- | -------- |
-| [Addition(`add`)](./Addition.md 'internal link on add') | ✅ | ❌ |
-| [Subtraction(`subtract`)](./Subtraction.md 'internal link on subtract') | ✅ | ✅ |
-| [Hypotenuse(`hypotenuse`)](./Hypotenuse.md 'internal link on hypotenuse') | ✅ | ❌ |
-| [Logical conjunction(`and`)](./Logical%20conjunction.md 'internal link on and') | ❌ | ✅ |
-| [Logical disjunction(`or`)](./Logical%20disjunction.md 'internal link on or') | ❌ | ✅ |
diff --git a/docs/Features/Filters/Filters.md b/docs/Features/Filters/Filters.md
deleted file mode 100644
index 6c3d36df..00000000
--- a/docs/Features/Filters/Filters.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-sidebar_position: 0
----
-
-# Filters
-
-[Image filters](https://en.wikipedia.org/wiki/Digital_image_processing#Filtering 'wikipedia link on image filtering') are techniques or algorithms applied to digital images in order to modify their appearance, enhance certain features, or extract specific information from them. Image filters work by altering the pixel values of an image based on predefined mathematical operations or transformations. These filters can be used for various purposes, such as artistic effects, noise reduction, image enhancement, edge detection, and more.
-
-### Methods
-
-| Can be applied on | Images | Masks |
-| -------------------------------------------------------------------------------- | ------- | -------- |
-| [Invert(`invert`)](./Invert.md 'internal link on invert') | ✅ | ✅ |
-| [Grayscale(`grey`)](./Grayscale.md 'internal link on grayscale') | ✅ | ❌ |
-| [Gradient(`gradient`)](./Gradient.md 'internal link on gradient') | ✅ | ❌ |
-| [Derivative(`derivative`)](./Derivative.md 'internal link on derivative') | ✅ | ❌ |
-| [Median(`median`)](./Median.md 'internal link on median') | ✅ | ❌ |
-| [Pixelate(`pixelate`)](./Pixelate.md 'internal link on pixelate') | ✅ | ❌ |
-| [Blur(`blur`)](./Blur.md 'internal link on blur') | ✅ | ❌ |
-| [Gaussian(`gaussianBlur`)](./Gaussian%20Blur.md 'internal link on gaussianBlur') | ✅ | ❌ |
-| [Level(`level`)](./Level.md 'internal link on level') | ✅ | ❌ |
diff --git a/docs/Features/Geometry/Geometry.md b/docs/Features/Geometry/Geometry.md
deleted file mode 100644
index 53bf3534..00000000
--- a/docs/Features/Geometry/Geometry.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-sidebar_position: 0
----
-
-# Geometry
-
-Geometric operations in image processing involve transforming the spatial coordinates of pixels in an image to achieve various effects, such as resizing, rotation, and more. These operations are used to manipulate the shape, position, and orientation of objects within an image.
-
-### Methods
-
-| Can be applied on | Images | Masks |
-| --------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- |
-| [Flip(`flip`)](./Flip.md 'internal link on flip') | ✅ | ❌ |
-| [Resize(`resize`)](./Resize.md 'internal link on resize') | ✅ | ❌ |
-| [Rotate(`rotate`)](./Rotate.md 'internal link on rotate') | ✅ | ❌ |
-| [Transform(`transform`)](./Transform.md 'internal link on transform') | ✅ | ❌ |
-| [Transform and rotate(`transformRotate`)](./Transform%20and%20Rotate 'internal link on transformRotate') | ✅ | ❌ |
-| [Get perspective warp matrix(`getPerspectiveWarp`)](./Get%20Perspective%20Warp%20Matrix.md 'internal link on getPerspectiveWarp') | - | - |
diff --git a/docs/Features/Morphology/Morphology.md b/docs/Features/Morphology/Morphology.md
deleted file mode 100644
index bf76bc83..00000000
--- a/docs/Features/Morphology/Morphology.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-sidebar_position: 0
----
-
-# Morphology
-
-[Morphological operations](../../Glossary.md#morphology 'internal link on morphology') are based on a structuring element, which is a small shape or pattern used as a template for modifying the pixels in an image. The structuring element is typically a small binary array that defines the area around a pixel to consider during the operation.
-
-Morphological operations are simple yet powerful tools that play a significant role in various image processing tasks, especially in situations where the shapes and structures of objects are important.
-
-### Methods
-
-| Can be applied on | Images | Masks |
-| ------------------------------------------------------------------------------------------------------------------------- | ------- | -------- |
-| [Morphological gradient(`morphologicalGradient`)](./Morphological%20Gradient.md 'internal link on morphologicalGradient') | ✅ | ✅ |
-| [Canny edge detector(`cannyEdgeDetector`)](./Canny%20Edge%20Detector.md 'internal link on cannyEdgeDetector') | ✅ | ❌ |
-| [Erosion(`erode`)](./Erosion.md 'internal link on erode') | ✅ | ✅ |
-| [Dilation(`dilate`)](./Dilation.md 'internal link on dilate') | ✅ | ✅ |
-| [Opening(`open`)](./Opening.md 'internal link on open') | ✅ | ✅ |
-| [Closing(`close`)](./Closing.md 'internal link on close') | ✅ | ✅ |
-| [Top Hat(`topHat`)](./Top%20Hat 'internal link on topHat') | ✅ | ✅ |
-| [Bottom Hat(`bottomHat`)](./Bottom%20Hat 'internal link on bottomHat') | ✅ | ✅ |
diff --git a/docs/Features/Operations/Operations.md b/docs/Features/Operations/Operations.md
deleted file mode 100644
index d64a2835..00000000
--- a/docs/Features/Operations/Operations.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-sidebar_position: 0
----
-
-# Operations
-
-Operations section is dedicated to elements of ImageJS that are mostly used to help with or to transition from one image data type to another.
-For instance, threshold is used to go from Image to Mask, while watershed is used to create ROI map. It can also be helper functions that can be useful during analysis.
-
-### Methods
-
-| Can be applied on | Images | Masks |
-| ------------------------------------------------------------------------------------- | -------- | -------- |
-| [Get extrema(`getExtrema`)](./Get%20extrema.md 'internal link on getExtrema') | ✅ | ❌ |
-| [Filter points(`filterPoints`)](./Remove%20points.md 'internal link on filterPoints') | ✅ | ❌ |
-| [Threshold(`threshold`)](./Threshold.md 'internal link on threshold') | ✅ | ❌ |
-| [Watershed(`waterShed`)](./Watershed.md 'internal link on watershed') | ✅ | ❌ |
-| [Clear border(`clearBorder`)](./Clear%20border.md 'internal link on clear border') | ❌ | ✅ |
-| [Paint mask(`paintMask`)](./Paint%20mask.md 'internal link on paint mask') | ✅ | ✅ |
diff --git a/docs/Features/Regions of interest/Regions of interest.md b/docs/Features/Regions of interest/Regions of interest.md
deleted file mode 100644
index 98363935..00000000
--- a/docs/Features/Regions of interest/Regions of interest.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Regions of interest
-
-This section is dedicated to analysis of mask and its specific regions. ImageJS is first and foremost an analyzer of particles and analysis of regions of interest. Therefore there are tools that help detecting particles as well as determining their size, shape position and direction.
-
-### Methods
-
-| Can be applied on | ROIs | Masks |
-| ----------------------------------------------------------------------------------- | ------- | -------- |
-| [Convex Hull(`convexHull`)](./Convex%20Hull.md 'internal link on convex hull') | ✅ | ✅ |
-| [Feret diameter(`feret`)](./Feret%20Diameters.md 'internal link on feret diameter') | ✅ | ✅ |
-| [Minimum Bounding Rectangle(`mbr`)](./MBR.md 'internal link on mbr') | ✅ | ✅ |
-| [Perimeter(`perimeter`)](./Perimeter.md 'internal link on perimeter') | ✅ | ❌ |
-| [EQPC(`eqpc`)](./EQPC.md 'internal link on eqpc') | ✅ | ❌ |
-| [PED(`ped`)](./PED.md 'internal link on ped') | ✅ | ❌ |
-| [Centroid(`centroid`)](./Centroid.md 'internal link on centroid') | ✅ | ❌ |
-| [Fill ratio(`fillRatio`)](./Fill%20ratio.md 'internal link on fill ratio') | ✅ | ❌ |
-| [Solidity(`solidity`)](./Solidity.md 'internal link on solidity') | ✅ | ❌ |
-| [Roundness(`roundness`)](./Roundness.md 'internal link on roundness') | ✅ | ❌ |
-| [Sphericity(`sphericity`)](./Sphericity.md 'internal link on sphericity') | ✅ | ❌ |
diff --git a/docs/Tutorials/_category_.json b/docs/Tutorials/_category_.json
deleted file mode 100644
index c3460c6d..00000000
--- a/docs/Tutorials/_category_.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "position": 30
-}
diff --git a/docs/Basics/_category_.json b/docs/basics/_category_.json
similarity index 100%
rename from docs/Basics/_category_.json
rename to docs/basics/_category_.json
diff --git a/docs/Basics/Basics.md b/docs/basics/basics.md
similarity index 86%
rename from docs/Basics/Basics.md
rename to docs/basics/basics.md
index da6889b6..e0501e06 100644
--- a/docs/Basics/Basics.md
+++ b/docs/basics/basics.md
@@ -1,3 +1,5 @@
import DocCardList from '@theme/DocCardList';
+# Basics
+
diff --git a/docs/Basics/cannyEdgeMask.demo.tsx b/docs/basics/demos/cannyEdgeMask.demo.tsx
similarity index 100%
rename from docs/Basics/cannyEdgeMask.demo.tsx
rename to docs/basics/demos/cannyEdgeMask.demo.tsx
diff --git a/docs/Basics/image.demo.tsx b/docs/basics/demos/image.demo.tsx
similarity index 100%
rename from docs/Basics/image.demo.tsx
rename to docs/basics/demos/image.demo.tsx
diff --git a/docs/Basics/thresholdMask.demo.tsx b/docs/basics/demos/thresholdMask.demo.tsx
similarity index 100%
rename from docs/Basics/thresholdMask.demo.tsx
rename to docs/basics/demos/thresholdMask.demo.tsx
diff --git a/docs/Basics/roiImages/comboImage.png b/docs/basics/images/roiImages/comboImage.png
similarity index 100%
rename from docs/Basics/roiImages/comboImage.png
rename to docs/basics/images/roiImages/comboImage.png
diff --git a/docs/Basics/roiImages/comboImage2.png b/docs/basics/images/roiImages/comboImage2.png
similarity index 100%
rename from docs/Basics/roiImages/comboImage2.png
rename to docs/basics/images/roiImages/comboImage2.png
diff --git a/docs/Basics/roiImages/inputImage.png b/docs/basics/images/roiImages/inputImage.png
similarity index 100%
rename from docs/Basics/roiImages/inputImage.png
rename to docs/basics/images/roiImages/inputImage.png
diff --git a/docs/Basics/roiImages/outputFeret.png b/docs/basics/images/roiImages/outputFeret.png
similarity index 100%
rename from docs/Basics/roiImages/outputFeret.png
rename to docs/basics/images/roiImages/outputFeret.png
diff --git a/docs/Basics/roiImages/outputImage.png b/docs/basics/images/roiImages/outputImage.png
similarity index 100%
rename from docs/Basics/roiImages/outputImage.png
rename to docs/basics/images/roiImages/outputImage.png
diff --git a/docs/Basics/roiImages/outputMask.png b/docs/basics/images/roiImages/outputMask.png
similarity index 100%
rename from docs/Basics/roiImages/outputMask.png
rename to docs/basics/images/roiImages/outputMask.png
diff --git a/docs/Basics/roiImages/outputMbr.png b/docs/basics/images/roiImages/outputMbr.png
similarity index 100%
rename from docs/Basics/roiImages/outputMbr.png
rename to docs/basics/images/roiImages/outputMbr.png
diff --git a/docs/Basics/workingWithImages/coordinatesImage.jpg b/docs/basics/images/workingWithImages/coordinatesImage.jpg
similarity index 100%
rename from docs/Basics/workingWithImages/coordinatesImage.jpg
rename to docs/basics/images/workingWithImages/coordinatesImage.jpg
diff --git a/docs/Basics/Working with Images.md b/docs/basics/working-with-images.md
similarity index 70%
rename from docs/Basics/Working with Images.md
rename to docs/basics/working-with-images.md
index 1cd8527d..400ec15e 100644
--- a/docs/Basics/Working with Images.md
+++ b/docs/basics/working-with-images.md
@@ -1,4 +1,4 @@
-import ImageDemo from './image.demo.tsx'
+import ImageDemo from './demos/image.demo.tsx'
# Working with Images
@@ -27,7 +27,7 @@ In the context of digital technology and computing, images are represented as a
The origin point has coordinates (0,0) and is located in the top-left corner of an image.
-
+
So, if we want to get a certain pixel on the image we will be counting the distance from image's top-left corner.
@@ -47,28 +47,28 @@ In ImageJS main properties of an image are:
- data: typed array with information about image's pixels.
-- [Color model](../Glossary.md#color-model 'internal link on color model'): the abstract model of how pixel colors are formed.
+- [Color model](../glossary.md#color-model 'internal link on color model'): the abstract model of how pixel colors are formed.
-- [Bit depth](../Glossary.md#bit-depth 'internal link on bit depth'): number of bits allocated to each channel.
+- [Bit depth](../glossary.md#bit-depth 'internal link on bit depth'): number of bits allocated to each channel.
-- [Number of channels](../Glossary.md#channel 'internal link on channels'): number of color channels that each pixel has. Grey image has one, RGB-type of image has three.
+- [Number of channels](../glossary.md#channel 'internal link on channels'): number of color channels that each pixel has. Grey image has one, RGB-type of image has three.
-- [Number of components](../Glossary.md#component 'internal link on components'): number of color channels that each pixel has but without alpha channel.
+- [Number of components](../glossary.md#component 'internal link on components'): number of color channels that each pixel has but without alpha channel.
-- [Alpha channel](../Glossary.md#alpha-channel 'internal link on alpha-channel'): channel that represents the transparency or opacity levels of pixels.
+- [Alpha channel](../glossary.md#alpha-channel 'internal link on alpha-channel'): channel that represents the transparency or opacity levels of pixels.
-- [Metadata](../Glossary.md#metadata 'internal link on metadata'): data about data. A basic example would be date and time when an image was taken.
+- [Metadata](../glossary.md#metadata 'internal link on metadata'): data about data. A basic example would be date and time when an image was taken.
### Features
Currently, there are several ways of processing an image:
-- [Filtering](../Features/Filters/Filters.md 'internal link on filters'): filters usually apply some sort of [kernel](../Glossary.md#kernel 'internal link on kernel') to change an image.
+- [Filtering](../features/filters/filters.md 'internal link on filters'): filters usually apply some sort of [kernel](../glossary.md#kernel 'internal link on kernel') to change an image.
-- [Comparison](../Features/Comparison/Comparison.md 'internal link on comparison'): these features compare two images for further feature matching between the two.
+- [Comparison](../features/comparison/comparison.md 'internal link on comparison'): these features compare two images for further feature matching between the two.
-- [Geometry](../Features/Geometry/Geometry.md 'internal link on geometry'): this part of ImageJS allows rotating and resizing an image.
+- [Geometry](../features/geometry/geometry.md 'internal link on geometry'): this part of ImageJS allows rotating and resizing an image.
-- [Morphology](../Features/Morphology/Morphology.md 'internal link on morphology'): enables shape analysis and shape identification.
+- [Morphology](../features/morphology/morphology.md 'internal link on morphology'): enables shape analysis and shape identification.
-- [ROI analysis](../Features/Regions%20of%20interest/Regions%20of%20interest.md 'internal link on roi analysis'): these features allow targeting and extracting relevant information from specific regions of interest.
+- [ROI analysis](../features/regions-of-interest/regions-of-interest.md 'internal link on roi analysis'): these features allow targeting and extracting relevant information from specific regions of interest.
diff --git a/docs/Basics/Working with Masks.md b/docs/basics/working-with-masks.md
similarity index 87%
rename from docs/Basics/Working with Masks.md
rename to docs/basics/working-with-masks.md
index 79361b61..d8e256a2 100644
--- a/docs/Basics/Working with Masks.md
+++ b/docs/basics/working-with-masks.md
@@ -1,5 +1,5 @@
-import ThresholdMaskDemo from './thresholdMask.demo.tsx'
-import CannyMaskDemo from './cannyEdgeMask.demo.tsx'
+import ThresholdMaskDemo from './demos/thresholdMask.demo.tsx'
+import CannyMaskDemo from './demos/cannyEdgeMask.demo.tsx'
# Working with Masks
@@ -23,7 +23,7 @@ const mask = new Mask(500, 500); // Creates a simple mask filled with 0s of size
### Use `threshold()` method
-Another approach is to obtain a mask by using [`threshold` method](../Features/Operations/Threshold.md 'internal link on threshold') on an image.
+Another approach is to obtain a mask by using [`threshold` method](../features/operations/threshold.md 'internal link on threshold') on an image.
```ts
const mask = image.threshold(); // returns a mask
@@ -39,7 +39,7 @@ In most cases, thresholding is your go-to method to get a mask from an image.
### Use `cannyEdgeDetector()` method
-There is also a third way to get a mask. It is to use [`cannyEdgeDetector` method](../Features/Morphology/Canny%20Edge%20Detector.md 'internal link on canny edge detector').
+There is also a third way to get a mask. It is to use [`cannyEdgeDetector` method](../features/morphology/canny-edge-detector.md 'internal link on canny edge detector').
```ts
const mask = image.cannyEdgeDetector(); // returns a mask
diff --git a/docs/Basics/Working with ROIs.md b/docs/basics/working-with-rois.md
similarity index 90%
rename from docs/Basics/Working with ROIs.md
rename to docs/basics/working-with-rois.md
index 1425ef05..c9f69849 100644
--- a/docs/Basics/Working with ROIs.md
+++ b/docs/basics/working-with-rois.md
@@ -4,10 +4,10 @@ _A region of interest (ROI) represents an area of contiguous pixels within the d
There are currently two ways ROIs can be generated in ImageJS:
-- From [masks](./Working%20with%20Masks.md 'internal link on working with mask') by identifying contiguous black or white pixels within it.
+- From [masks](./working-with-masks.md 'internal link on working with mask') by identifying contiguous black or white pixels within it.
-- By identifying starting points of interest (for example by finding and filtering local extrema) and running the [watershed algorithm](../Features/Operations/Watershed.md 'internal link on watershed') on them.
-- By identifying starting points of interest (for example by finding and filtering local extrema) and running the [watershed algorithm](../Features/Operations/Watershed.md 'internal link on watershed') on them.
+- By identifying starting points of interest (for example by finding and filtering local extrema) and running the [watershed algorithm](../features/operations/watershed.md 'internal link on watershed') on them.
+- By identifying starting points of interest (for example by finding and filtering local extrema) and running the [watershed algorithm](../features/operations/watershed.md 'internal link on watershed') on them.
ROIs identify and characterize regions within images, which has wide applications in image analysis.
@@ -34,7 +34,7 @@ Let's take a look at a real life example.
Here you have an image of particles under electron microscopy magnified at 1px = 0.2727 nm. Let's say we want to sort the data by size and observe its distribution.
It can be use in various fields, whether it is for quality control to see if all products have the same features and characteristics or for physical properties of material such as surface area and reactivity.
-
+
It can be done with with following code:
@@ -76,6 +76,6 @@ for (let i = minSurface; i < maxSurface; i += interval) {
This will give us a map with stored number of regions per each size interval. This may be a basic example but such analysis is widely used in biology and medicine. It can provide valuable information about predominant cell size or find abnormalities in cells ratio.
-
+
To learn more about our analysis tools you can visit our ROI Analysis section.
diff --git a/docs/Features/_category_.json b/docs/features/_category_.json
similarity index 100%
rename from docs/Features/_category_.json
rename to docs/features/_category_.json
diff --git a/docs/Features/Comparison/_category_.json b/docs/features/comparison/_category_.json
similarity index 100%
rename from docs/Features/Comparison/_category_.json
rename to docs/features/comparison/_category_.json
diff --git a/docs/Features/Comparison/Addition.md b/docs/features/comparison/addition.md
similarity index 94%
rename from docs/Features/Comparison/Addition.md
rename to docs/features/comparison/addition.md
index f05b2aa0..a7fd40e0 100644
--- a/docs/Features/Comparison/Addition.md
+++ b/docs/features/comparison/addition.md
@@ -8,7 +8,7 @@ _Add two images together._
[🖼️ Image options and parameters of `add` method](https://api.image-js.org/classes/index.Image.html#add)
-`add` method, opposed to [subtraction](./Subtraction.md 'internal link on subtract'), takes another Image and makes an addition between each respective pixel value.
+`add` method, opposed to [subtraction](./subtraction.md 'internal link on subtract'), takes another Image and makes an addition between each respective pixel value.
It works like this:
```ts
diff --git a/docs/features/comparison/comparison.md b/docs/features/comparison/comparison.md
new file mode 100644
index 00000000..82f5cea8
--- /dev/null
+++ b/docs/features/comparison/comparison.md
@@ -0,0 +1,18 @@
+---
+sidebar_position: 0
+---
+
+# Comparison
+
+Comparison methods are methods that compare other images for feature matching or change detection by subtraction or addition of image values etc.
+The specific reasons for comparing images depend on the application and the desired outcome. In many cases, it is also a valuable tool for identifying changes, isolating objects, enhancing features, and improving image quality for various purposes.
+
+### Methods
+
+| Can be applied on | Images | Masks |
+| ----------------------------------------------------------------------------- | -------- | -------- |
+| [Addition(`add`)](./addition.md 'internal link on add') | ✅ | ❌ |
+| [Subtraction(`subtract`)](./subtraction.md 'internal link on subtract') | ✅ | ✅ |
+| [Hypotenuse(`hypotenuse`)](./hypotenuse.md 'internal link on hypotenuse') | ✅ | ❌ |
+| [Logical conjunction(`and`)](./logical-conjunction.md 'internal link on and') | ❌ | ✅ |
+| [Logical disjunction(`or`)](./logical-disjunction.md 'internal link on or') | ❌ | ✅ |
diff --git a/docs/Features/Comparison/Hypotenuse.md b/docs/features/comparison/hypotenuse.md
similarity index 100%
rename from docs/Features/Comparison/Hypotenuse.md
rename to docs/features/comparison/hypotenuse.md
diff --git a/docs/Features/Comparison/Logical conjunction.md b/docs/features/comparison/logical-conjunction.md
similarity index 100%
rename from docs/Features/Comparison/Logical conjunction.md
rename to docs/features/comparison/logical-conjunction.md
diff --git a/docs/Features/Comparison/Logical disjunction.md b/docs/features/comparison/logical-disjunction.md
similarity index 100%
rename from docs/Features/Comparison/Logical disjunction.md
rename to docs/features/comparison/logical-disjunction.md
diff --git a/docs/Features/Comparison/Subtraction.md b/docs/features/comparison/subtraction.md
similarity index 100%
rename from docs/Features/Comparison/Subtraction.md
rename to docs/features/comparison/subtraction.md
diff --git a/docs/Features/Features.md b/docs/features/features.md
similarity index 84%
rename from docs/Features/Features.md
rename to docs/features/features.md
index da6889b6..b4dfafba 100644
--- a/docs/Features/Features.md
+++ b/docs/features/features.md
@@ -1,3 +1,5 @@
import DocCardList from '@theme/DocCardList';
+# Features
+
diff --git a/docs/Features/Filters/_category_.json b/docs/features/filters/_category_.json
similarity index 100%
rename from docs/Features/Filters/_category_.json
rename to docs/features/filters/_category_.json
diff --git a/docs/Features/Filters/Blur.md b/docs/features/filters/blur.md
similarity index 87%
rename from docs/Features/Filters/Blur.md
rename to docs/features/filters/blur.md
index d657f04a..4eacb92d 100644
--- a/docs/Features/Filters/Blur.md
+++ b/docs/features/filters/blur.md
@@ -14,8 +14,8 @@ Blur, also known as average blur or box blur, is a simple image processing techn
-Box blur is particularly effective in reducing [salt-and-pepper](https://en.wikipedia.org/wiki/Salt-and-pepper_noise 'wikipedia link on salt and pepper noise') noise (random black and white pixels) and minor imperfections in an image. However, it also leads to loss of finer details, so the choice of [kernel](../../Glossary.md#kernel 'glossary link on kernel') size is important.
-More advanced blurring techniques, such as [Gaussian blur](./Gaussian%20Blur.md 'internal link to gaussian blur') or [bilateral filter](https://en.wikipedia.org/wiki/Bilateral_filter 'wikipedia link on bilateral filters'), are often used for better results in various applications.
+Box blur is particularly effective in reducing [salt-and-pepper](https://en.wikipedia.org/wiki/Salt-and-pepper_noise 'wikipedia link on salt and pepper noise') noise (random black and white pixels) and minor imperfections in an image. However, it also leads to loss of finer details, so the choice of [kernel](../../glossary.md#kernel 'glossary link on kernel') size is important.
+More advanced blurring techniques, such as [Gaussian blur](./gaussian-blur.md 'internal link to gaussian blur') or [bilateral filter](https://en.wikipedia.org/wiki/Bilateral_filter 'wikipedia link on bilateral filters'), are often used for better results in various applications.
### Kinds of images compatible with algorithm
@@ -48,7 +48,7 @@ Here's how blur filter is implemented in ImageJS:
_Select a Kernel Size_: The first step is to choose the size of the kernel or window that will be used for the blurring operation. The kernel is typically a square matrix with odd dimensions, such as 3x3, 5x5, 7x7, etc. The larger the kernel, the more intense the blurring effect.
-_Iterate through Pixels_: For each pixel in the image, the algorithm applies [convolution](../../Glossary.md#convolution 'glossary link on convolution').
+_Iterate through Pixels_: For each pixel in the image, the algorithm applies [convolution](../../glossary.md#convolution 'glossary link on convolution').
_Calculate Average Color_: The algorithm calculates the average color value of all the pixels within the kernel.
diff --git a/docs/Features/Filters/demos/blur.demo.tsx b/docs/features/filters/demos/blur.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/blur.demo.tsx
rename to docs/features/filters/demos/blur.demo.tsx
diff --git a/docs/Features/Filters/demos/derivative.demo.tsx b/docs/features/filters/demos/derivative.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/derivative.demo.tsx
rename to docs/features/filters/demos/derivative.demo.tsx
diff --git a/docs/Features/Filters/demos/gaussianBlur.demo.tsx b/docs/features/filters/demos/gaussianBlur.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/gaussianBlur.demo.tsx
rename to docs/features/filters/demos/gaussianBlur.demo.tsx
diff --git a/docs/Features/Filters/demos/gradient.demo.tsx b/docs/features/filters/demos/gradient.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/gradient.demo.tsx
rename to docs/features/filters/demos/gradient.demo.tsx
diff --git a/docs/Features/Filters/demos/grayscale.demo.tsx b/docs/features/filters/demos/grayscale.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/grayscale.demo.tsx
rename to docs/features/filters/demos/grayscale.demo.tsx
diff --git a/docs/Features/Filters/demos/invert.demo.tsx b/docs/features/filters/demos/invert.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/invert.demo.tsx
rename to docs/features/filters/demos/invert.demo.tsx
diff --git a/docs/Features/Filters/demos/invert.mask.demo.tsx b/docs/features/filters/demos/invert.mask.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/invert.mask.demo.tsx
rename to docs/features/filters/demos/invert.mask.demo.tsx
diff --git a/docs/Features/Filters/demos/level.demo.tsx b/docs/features/filters/demos/level.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/level.demo.tsx
rename to docs/features/filters/demos/level.demo.tsx
diff --git a/docs/Features/Filters/demos/median.demo.tsx b/docs/features/filters/demos/median.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/median.demo.tsx
rename to docs/features/filters/demos/median.demo.tsx
diff --git a/docs/Features/Filters/demos/pixelate.demo.tsx b/docs/features/filters/demos/pixelate.demo.tsx
similarity index 100%
rename from docs/Features/Filters/demos/pixelate.demo.tsx
rename to docs/features/filters/demos/pixelate.demo.tsx
diff --git a/docs/Features/Filters/Derivative.md b/docs/features/filters/derivative.md
similarity index 100%
rename from docs/Features/Filters/Derivative.md
rename to docs/features/filters/derivative.md
diff --git a/docs/features/filters/filters.md b/docs/features/filters/filters.md
new file mode 100644
index 00000000..8b59ea25
--- /dev/null
+++ b/docs/features/filters/filters.md
@@ -0,0 +1,21 @@
+---
+sidebar_position: 0
+---
+
+# Filters
+
+[Image filters](https://en.wikipedia.org/wiki/Digital_image_processing#Filtering 'wikipedia link on image filtering') are techniques or algorithms applied to digital images in order to modify their appearance, enhance certain features, or extract specific information from them. Image filters work by altering the pixel values of an image based on predefined mathematical operations or transformations. These filters can be used for various purposes, such as artistic effects, noise reduction, image enhancement, edge detection, and more.
+
+### Methods
+
+| Can be applied on | Images | Masks |
+| ------------------------------------------------------------------------------ | ------- | -------- |
+| [Invert(`invert`)](./invert.md 'internal link on invert') | ✅ | ✅ |
+| [Grayscale(`grey`)](./grayscale.md 'internal link on grayscale') | ✅ | ❌ |
+| [Gradient(`gradient`)](./gradient.md 'internal link on gradient') | ✅ | ❌ |
+| [Derivative(`derivative`)](./derivative.md 'internal link on derivative') | ✅ | ❌ |
+| [Median(`median`)](./median.md 'internal link on median') | ✅ | ❌ |
+| [Pixelate(`pixelate`)](./pixelate.md 'internal link on pixelate') | ✅ | ❌ |
+| [Blur(`blur`)](./blur.md 'internal link on blur') | ✅ | ❌ |
+| [Gaussian(`gaussianBlur`)](./gaussian-blur.md 'internal link on gaussianBlur') | ✅ | ❌ |
+| [Level(`level`)](./level.md 'internal link on level') | ✅ | ❌ |
diff --git a/docs/Features/Filters/Gaussian Blur.md b/docs/features/filters/gaussian-blur.md
similarity index 97%
rename from docs/Features/Filters/Gaussian Blur.md
rename to docs/features/filters/gaussian-blur.md
index 0b65ab9d..5c2d2e9d 100644
--- a/docs/Features/Filters/Gaussian Blur.md
+++ b/docs/features/filters/gaussian-blur.md
@@ -61,7 +61,7 @@ The size of the Gaussian kernel and the standard deviation parameter (which cont
Here's how Gaussian blur is implemented in ImageJS:
-_Kernel Definition_: The core concept of Gaussian blur involves [convolving](../../Glossary.md#convolution 'glossary link on convolution') the image with a Gaussian [kernel](../../Glossary.md#kernel 'glossary link on kernel'), also known as a Gaussian filter or mask. This kernel's values are arranged in a way that creates a symmetric, bell-shaped pattern around the center of the kernel to approximate Gaussian function.
+_Kernel Definition_: The core concept of Gaussian blur involves [convolving](../../glossary.md#convolution 'glossary link on convolution') the image with a Gaussian [kernel](../../glossary.md#kernel 'glossary link on kernel'), also known as a Gaussian filter or mask. This kernel's values are arranged in a way that creates a symmetric, bell-shaped pattern around the center of the kernel to approximate Gaussian function.
_Convolution Operation_: The Gaussian kernel is applied to the image using a convolution operation. This involves placing the kernel's center over each pixel in the image and performing element-wise multiplication of the kernel's values with the corresponding pixel values in the neighborhood. The results of these multiplications are summed up to compute the new value for the central pixel.
diff --git a/docs/Features/Filters/Gradient.md b/docs/features/filters/gradient.md
similarity index 93%
rename from docs/Features/Filters/Gradient.md
rename to docs/features/filters/gradient.md
index d4d09448..6fb72918 100644
--- a/docs/Features/Filters/Gradient.md
+++ b/docs/features/filters/gradient.md
@@ -10,7 +10,7 @@ _Highlights changes in color or intensity within an image by accentuating transi
[🖼️ Image options and parameters of `gradient` method](https://api.image-js.org/classes/index.Image.html#gradientFilter)
-Gradient filter or specifically[ a gradient-based edge detection filter](https://en.wikipedia.org/wiki/Graduated_neutral-density_filter 'wikipedia link on gradient filter'), is an image processing technique used to highlight edges and boundaries within an image by emphasizing areas of rapid intensity change. The gradient filter operates by calculating the rate of change of pixel intensities across the image. When there's a rapid transition from one intensity level to another, [the convolution operation](../../Glossary.md#convolution 'glossary link on convolution') captures this change as a high gradient magnitude value, indicating the presence of an edge. It's a fundamental step in various computer vision and image analysis tasks, such as edge detection, object recognition, and image segmentation.
+Gradient filter or specifically[ a gradient-based edge detection filter](https://en.wikipedia.org/wiki/Graduated_neutral-density_filter 'wikipedia link on gradient filter'), is an image processing technique used to highlight edges and boundaries within an image by emphasizing areas of rapid intensity change. The gradient filter operates by calculating the rate of change of pixel intensities across the image. When there's a rapid transition from one intensity level to another, [the convolution operation](../../glossary.md#convolution 'glossary link on convolution') captures this change as a high gradient magnitude value, indicating the presence of an edge. It's a fundamental step in various computer vision and image analysis tasks, such as edge detection, object recognition, and image segmentation.
@@ -49,18 +49,18 @@ Keep in mind that gradient filters can be sensitive to noise and might result in
Here's how gradient filter is implemented in ImageJS:
-_Grayscale Conversion_: Before applying a gradient filter, the color image is converted into [grayscale](./Grayscale.md 'internal link on grayscale filter'). This simplifies the processing by reducing the image to a single channel representing pixel intensities.
+_Grayscale Conversion_: Before applying a gradient filter, the color image is converted into [grayscale](./grayscale.md 'internal link on grayscale filter'). This simplifies the processing by reducing the image to a single channel representing pixel intensities.
-_Kernel Operators_: Gradient filter consists of small convolution [kernels](../../Glossary.md#kernel 'glossary link on kernel'). Normally, one for detecting horizontal changes and another for vertical changes, however user might indicate only one kernel to check only one of directions. These kernels are usually 3x3 matrices of numerical weights.
+_Kernel Operators_: Gradient filter consists of small convolution [kernels](../../glossary.md#kernel 'glossary link on kernel'). Normally, one for detecting horizontal changes and another for vertical changes, however user might indicate only one kernel to check only one of directions. These kernels are usually 3x3 matrices of numerical weights.
-_Convolution Operation_: The gradient filter is applied through a [convolution](../../Glossary.md#convolution 'glossary link on convolution') operation, where the filter kernel slides over the grayscale image. At each position, the convolution operation involves element-wise multiplication of the filter kernel with the corresponding pixels in the image, followed by summing up the results. This sum represents the rate of intensity change (gradient) at that location in the image.
+_Convolution Operation_: The gradient filter is applied through a [convolution](../../glossary.md#convolution 'glossary link on convolution') operation, where the filter kernel slides over the grayscale image. At each position, the convolution operation involves element-wise multiplication of the filter kernel with the corresponding pixels in the image, followed by summing up the results. This sum represents the rate of intensity change (gradient) at that location in the image.
_Gradient Magnitude and Direction_: For each pixel, the gradient magnitude is calculated by combining the results of the horizontal and vertical convolutions. The corresponding values from each convolution are put in square and summed, then put in square root.
_Edge Detection_: The gradient magnitude values are used to identify regions of rapid intensity change, which correspond to edges in the image. Higher gradient magnitude values indicate stronger edges.
:::tip
-_Thresholding_: To further refine the edges detected, a [thresholding](../Operations/Threshold.md 'internal link on threshold filter') step is often applied. Pixels with gradient magnitudes below a certain threshold are considered as non-edges, while those above the threshold are considered edges. This helps in reducing noise and emphasizing significant edges.
+_Thresholding_: To further refine the edges detected, a [thresholding](../operations/threshold.md 'internal link on threshold filter') step is often applied. Pixels with gradient magnitudes below a certain threshold are considered as non-edges, while those above the threshold are considered edges. This helps in reducing noise and emphasizing significant edges.
:::
diff --git a/docs/Features/Filters/Grayscale.md b/docs/features/filters/grayscale.md
similarity index 100%
rename from docs/Features/Filters/Grayscale.md
rename to docs/features/filters/grayscale.md
diff --git a/docs/Features/Filters/Invert.md b/docs/features/filters/invert.md
similarity index 97%
rename from docs/Features/Filters/Invert.md
rename to docs/features/filters/invert.md
index 756fcb8f..41cbb13c 100644
--- a/docs/Features/Filters/Invert.md
+++ b/docs/features/filters/invert.md
@@ -48,7 +48,7 @@ The method is also available for Masks.
Here's how invert filter is implemented in ImageJS:
-_Pixel Transformation_: For each pixel in the image, the inversion filter transforms its color [intensity](../../Glossary.md#intensity 'glossary link on intensity') value. The new intensity value is calculated using the formula:
+_Pixel Transformation_: For each pixel in the image, the inversion filter transforms its color [intensity](../../glossary.md#intensity 'glossary link on intensity') value. The new intensity value is calculated using the formula:
$$New Intensity = Max Intensity - Original Intensity$$
diff --git a/docs/Features/Filters/Level.md b/docs/features/filters/level.md
similarity index 100%
rename from docs/Features/Filters/Level.md
rename to docs/features/filters/level.md
diff --git a/docs/Features/Filters/Median.md b/docs/features/filters/median.md
similarity index 98%
rename from docs/Features/Filters/Median.md
rename to docs/features/filters/median.md
index a613b3b3..ee795b6e 100644
--- a/docs/Features/Filters/Median.md
+++ b/docs/features/filters/median.md
@@ -43,7 +43,7 @@ However, the median filter also has limitations. It can blur sharp edges and thi
Here's how median filter is implemented in ImageJS:
-_Window or Kernel Selection_: The first step is to choose a small window or [kernel](../../Glossary.md#kernel 'glossary link to kernel'). This window will move over the entire image, pixel by pixel.
+_Window or Kernel Selection_: The first step is to choose a small window or [kernel](../../glossary.md#kernel 'glossary link to kernel'). This window will move over the entire image, pixel by pixel.
_Pixel Neighborhood_: As the window moves over the image, for each pixel location, the filter collects the pixel values within the window's neighborhood. The neighborhood consists of the pixels that are currently covered by the window/kernel.
diff --git a/docs/Features/Filters/Pixelate.md b/docs/features/filters/pixelate.md
similarity index 100%
rename from docs/Features/Filters/Pixelate.md
rename to docs/features/filters/pixelate.md
diff --git a/docs/Features/Geometry/_category_.json b/docs/features/geometry/_category_.json
similarity index 100%
rename from docs/Features/Geometry/_category_.json
rename to docs/features/geometry/_category_.json
diff --git a/docs/Features/Geometry/demos/flip.demo.tsx b/docs/features/geometry/demos/flip.demo.tsx
similarity index 100%
rename from docs/Features/Geometry/demos/flip.demo.tsx
rename to docs/features/geometry/demos/flip.demo.tsx
diff --git a/docs/Features/Geometry/demos/resize.demo.tsx b/docs/features/geometry/demos/resize.demo.tsx
similarity index 100%
rename from docs/Features/Geometry/demos/resize.demo.tsx
rename to docs/features/geometry/demos/resize.demo.tsx
diff --git a/docs/Features/Geometry/demos/rotate.demo.tsx b/docs/features/geometry/demos/rotate.demo.tsx
similarity index 100%
rename from docs/Features/Geometry/demos/rotate.demo.tsx
rename to docs/features/geometry/demos/rotate.demo.tsx
diff --git a/docs/Features/Geometry/demos/transform.demo.tsx b/docs/features/geometry/demos/transform.demo.tsx
similarity index 100%
rename from docs/Features/Geometry/demos/transform.demo.tsx
rename to docs/features/geometry/demos/transform.demo.tsx
diff --git a/docs/Features/Geometry/demos/transformRotate.demo.tsx b/docs/features/geometry/demos/transformRotate.demo.tsx
similarity index 100%
rename from docs/Features/Geometry/demos/transformRotate.demo.tsx
rename to docs/features/geometry/demos/transformRotate.demo.tsx
diff --git a/docs/Features/Geometry/Flip.md b/docs/features/geometry/flip.md
similarity index 100%
rename from docs/Features/Geometry/Flip.md
rename to docs/features/geometry/flip.md
diff --git a/docs/features/geometry/geometry.md b/docs/features/geometry/geometry.md
new file mode 100644
index 00000000..0aa7e3a1
--- /dev/null
+++ b/docs/features/geometry/geometry.md
@@ -0,0 +1,18 @@
+---
+sidebar_position: 0
+---
+
+# Geometry
+
+Geometric operations in image processing involve transforming the spatial coordinates of pixels in an image to achieve various effects, such as resizing, rotation, and more. These operations are used to manipulate the shape, position, and orientation of objects within an image.
+
+### Methods
+
+| Can be applied on | Images | Masks |
+| --------------------------------------------------------------------------------------------------------------------------- | ------- | -------- |
+| [Flip(`flip`)](./flip.md 'internal link on flip') | ✅ | ❌ |
+| [Resize(`resize`)](./resize.md 'internal link on resize') | ✅ | ❌ |
+| [Rotate(`rotate`)](./rotate.md 'internal link on rotate') | ✅ | ❌ |
+| [Transform(`transform`)](./transform.md 'internal link on transform') | ✅ | ❌ |
+| [Transform and rotate(`transformRotate`)](./transform-and-rotate 'internal link on transformRotate') | ✅ | ❌ |
+| [Get perspective warp matrix(`getPerspectiveWarp`)](./get-perspective-warp-matrix.md 'internal link on getPerspectiveWarp') | - | - |
diff --git a/docs/Features/Geometry/Get Perspective Warp Matrix.md b/docs/features/geometry/get-perspective-warp-matrix.md
similarity index 100%
rename from docs/Features/Geometry/Get Perspective Warp Matrix.md
rename to docs/features/geometry/get-perspective-warp-matrix.md
diff --git a/docs/Features/Geometry/images/cardPerspective.png b/docs/features/geometry/images/cardPerspective.png
similarity index 100%
rename from docs/Features/Geometry/images/cardPerspective.png
rename to docs/features/geometry/images/cardPerspective.png
diff --git a/docs/Features/Geometry/Resize.md b/docs/features/geometry/resize.md
similarity index 100%
rename from docs/Features/Geometry/Resize.md
rename to docs/features/geometry/resize.md
diff --git a/docs/Features/Geometry/Rotate.md b/docs/features/geometry/rotate.md
similarity index 100%
rename from docs/Features/Geometry/Rotate.md
rename to docs/features/geometry/rotate.md
diff --git a/docs/Features/Geometry/Transform and Rotate.md b/docs/features/geometry/transform-and-rotate.md
similarity index 97%
rename from docs/Features/Geometry/Transform and Rotate.md
rename to docs/features/geometry/transform-and-rotate.md
index f04127a4..687ae7ab 100644
--- a/docs/Features/Geometry/Transform and Rotate.md
+++ b/docs/features/geometry/transform-and-rotate.md
@@ -10,7 +10,7 @@ _Rotates an image by any angle._
[🖼️ Image options and parameters of `transformRotate` method](https://api.image-js.org/classes/index.Image.html#transformRotate)
-`transformRotate` method rotates image anti-clockwise at any angle that user sets. It applies the same principle as [transform](./Transform.md 'internal link on transform demo') method, but user only needs to pass a rotation angle as a parameter instead of the whole matrix.
+`transformRotate` method rotates image anti-clockwise at any angle that user sets. It applies the same principle as [transform](./transform.md 'internal link on transform demo') method, but user only needs to pass a rotation angle as a parameter instead of the whole matrix.
diff --git a/docs/Features/Geometry/Transform.md b/docs/features/geometry/transform.md
similarity index 97%
rename from docs/Features/Geometry/Transform.md
rename to docs/features/geometry/transform.md
index 3d8f941f..684c2d2e 100644
--- a/docs/Features/Geometry/Transform.md
+++ b/docs/features/geometry/transform.md
@@ -28,7 +28,7 @@ If 2x3 matrix is passed, the algorithm will consider it as [affine transformatio
- `g` and `h` are used for an operation called projection. It allows changing image perspective.
- `i` is a normalization factor. It acts like a "scaling factor" for the entire coordinate system. Think of it as a zoom lens setting.
-For more information take a look at the tutorial about [image transformations](../../Tutorials/Applying%20transform%20function%20on%20images.md)
+For more information take a look at the tutorial about [image transformations](../../tutorials/applying-transform-function-on-images.md)
:::caution
Matrix cannot be singular. Otherwise it cannot be inverted. Click [here](https://en.wikipedia.org/wiki/Invertible_matrix 'wikipedia link on invertible matrices') to learn more.
diff --git a/docs/Features/Morphology/_category_.json b/docs/features/morphology/_category_.json
similarity index 100%
rename from docs/Features/Morphology/_category_.json
rename to docs/features/morphology/_category_.json
diff --git a/docs/Features/Morphology/Bottom Hat.md b/docs/features/morphology/bottom-hat.md
similarity index 81%
rename from docs/Features/Morphology/Bottom Hat.md
rename to docs/features/morphology/bottom-hat.md
index 69d29c20..8f759654 100644
--- a/docs/Features/Morphology/Bottom Hat.md
+++ b/docs/features/morphology/bottom-hat.md
@@ -11,7 +11,7 @@ _Enhances the fine details or small objects within an image by subtracting an op
[🖼️ Image options and parameters of `bottomHat` method](https://api.image-js.org/classes/index.Image.html#bottomHat)
[🎭 Mask options and parameters of `bottomHat` method](https://api.image-js.org/classes/index.Mask.html#bottomHat)
-Similarly to [top hat](./Top%20Hat.md 'internal link to top hat'), [bottom hat](https://en.wikipedia.org/wiki/Top-hat_transform 'wikipedia link to top hat') operation computes the difference between two images. However, if top hat was using [opening method](./Opening.md 'internal link on open method'), bottom hat is using [closing method](./Closing.md 'internal link on close method').
+Similarly to [top hat](./top-hat.md 'internal link to top hat'), [bottom hat](https://en.wikipedia.org/wiki/Top-hat_transform 'wikipedia link to top hat') operation computes the difference between two images. However, if top hat was using [opening method](./opening.md 'internal link on open method'), bottom hat is using [closing method](./closing.md 'internal link on close method').
The purpose of bottom hat(or, as it is also called, _black-hat_) is to enhance and extract **darker** regions of the image.
diff --git a/docs/Features/Morphology/Canny Edge Detector.md b/docs/features/morphology/canny-edge-detector.md
similarity index 98%
rename from docs/Features/Morphology/Canny Edge Detector.md
rename to docs/features/morphology/canny-edge-detector.md
index c5be49d7..cde3219a 100644
--- a/docs/Features/Morphology/Canny Edge Detector.md
+++ b/docs/features/morphology/canny-edge-detector.md
@@ -59,7 +59,7 @@ _Non-maximum Suppression_: In this step, the gradient magnitude is examined at e
**(optional)**
-_Edge Tracking by [Hysteresis](../../Glossary.md#hysteresis 'internal link on hysteresis')_ : This step involves tracking edges by applying two thresholds: a high threshold and a low threshold. Pixels with gradient magnitude values above the high threshold are considered strong edges, while those between the low and high thresholds are considered potential edges. The algorithm then connects potential edges to strong edges, forming continuous edge contours.
+_Edge Tracking by [Hysteresis](../../glossary.md#hysteresis 'internal link on hysteresis')_ : This step involves tracking edges by applying two thresholds: a high threshold and a low threshold. Pixels with gradient magnitude values above the high threshold are considered strong edges, while those between the low and high thresholds are considered potential edges. The algorithm then connects potential edges to strong edges, forming continuous edge contours.
Finally, edge tracking by hysteresis is performed to link weak edges to strong edges. This helps in forming continuous edges and eliminating isolated weak edges caused by noise.
diff --git a/docs/Features/Morphology/Closing.md b/docs/features/morphology/closing.md
similarity index 90%
rename from docs/Features/Morphology/Closing.md
rename to docs/features/morphology/closing.md
index c7572925..a4f93d2e 100644
--- a/docs/Features/Morphology/Closing.md
+++ b/docs/features/morphology/closing.md
@@ -11,7 +11,7 @@ _Combines a dilation filter followed by an erosion filter._
[🖼️ Image options and parameters of `close` method](https://api.image-js.org/classes/index.Image.html#close)
[🎭 Mask options and parameters of `close` method](https://api.image-js.org/classes/index.Mask.html#close)
-Opposed to [opening](./Opening.md 'internal link to open method'), [closing process]( 'wikipedia link on closing') first [erodes](./Erosion.md 'internal link to erode method') an image and only then [dilates](./Dilation.md 'internal link to dilate method') it.
+Opposed to [opening](./opening.md 'internal link to open method'), [closing process]( 'wikipedia link on closing') first [erodes](./erosion.md 'internal link to erode method') an image and only then [dilates](./dilation.md 'internal link to dilate method') it.
It is a useful process for filling small holes in the image, while preserving the shape and size of large holes and objects.
diff --git a/docs/Features/Morphology/demos/bottomHat.demo.tsx b/docs/features/morphology/demos/bottomHat.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/bottomHat.demo.tsx
rename to docs/features/morphology/demos/bottomHat.demo.tsx
diff --git a/docs/Features/Morphology/demos/bottomHat.mask.demo.tsx b/docs/features/morphology/demos/bottomHat.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/bottomHat.mask.demo.tsx
rename to docs/features/morphology/demos/bottomHat.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/cannyEdgeDetector.demo.tsx b/docs/features/morphology/demos/cannyEdgeDetector.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/cannyEdgeDetector.demo.tsx
rename to docs/features/morphology/demos/cannyEdgeDetector.demo.tsx
diff --git a/docs/Features/Morphology/demos/cannyEdgeDetector.mask.demo.tsx b/docs/features/morphology/demos/cannyEdgeDetector.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/cannyEdgeDetector.mask.demo.tsx
rename to docs/features/morphology/demos/cannyEdgeDetector.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/close.demo.tsx b/docs/features/morphology/demos/close.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/close.demo.tsx
rename to docs/features/morphology/demos/close.demo.tsx
diff --git a/docs/Features/Morphology/demos/close.mask.demo.tsx b/docs/features/morphology/demos/close.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/close.mask.demo.tsx
rename to docs/features/morphology/demos/close.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/dilate.demo.tsx b/docs/features/morphology/demos/dilate.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/dilate.demo.tsx
rename to docs/features/morphology/demos/dilate.demo.tsx
diff --git a/docs/Features/Morphology/demos/dilate.mask.demo.tsx b/docs/features/morphology/demos/dilate.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/dilate.mask.demo.tsx
rename to docs/features/morphology/demos/dilate.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/erode.demo.tsx b/docs/features/morphology/demos/erode.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/erode.demo.tsx
rename to docs/features/morphology/demos/erode.demo.tsx
diff --git a/docs/Features/Morphology/demos/erode.mask.demo.tsx b/docs/features/morphology/demos/erode.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/erode.mask.demo.tsx
rename to docs/features/morphology/demos/erode.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/morphologicalGradient.demo.tsx b/docs/features/morphology/demos/morphologicalGradient.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/morphologicalGradient.demo.tsx
rename to docs/features/morphology/demos/morphologicalGradient.demo.tsx
diff --git a/docs/Features/Morphology/demos/morphologicalGradient.mask.demo.tsx b/docs/features/morphology/demos/morphologicalGradient.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/morphologicalGradient.mask.demo.tsx
rename to docs/features/morphology/demos/morphologicalGradient.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/open.demo.tsx b/docs/features/morphology/demos/open.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/open.demo.tsx
rename to docs/features/morphology/demos/open.demo.tsx
diff --git a/docs/Features/Morphology/demos/open.mask.demo.tsx b/docs/features/morphology/demos/open.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/open.mask.demo.tsx
rename to docs/features/morphology/demos/open.mask.demo.tsx
diff --git a/docs/Features/Morphology/demos/topHat.demo.tsx b/docs/features/morphology/demos/topHat.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/topHat.demo.tsx
rename to docs/features/morphology/demos/topHat.demo.tsx
diff --git a/docs/Features/Morphology/demos/topHat.mask.demo.tsx b/docs/features/morphology/demos/topHat.mask.demo.tsx
similarity index 100%
rename from docs/Features/Morphology/demos/topHat.mask.demo.tsx
rename to docs/features/morphology/demos/topHat.mask.demo.tsx
diff --git a/docs/Features/Morphology/Dilation.md b/docs/features/morphology/dilation.md
similarity index 94%
rename from docs/Features/Morphology/Dilation.md
rename to docs/features/morphology/dilation.md
index 808ad481..2c8028c7 100644
--- a/docs/Features/Morphology/Dilation.md
+++ b/docs/features/morphology/dilation.md
@@ -11,7 +11,7 @@ _Enlarges the size of foreground objects by iteratively expanding their boundari
[🖼️ Image options and parameters of `dilate` method](https://api.image-js.org/classes/index.Image.html#dilate)
[🎭 Mask options and parameters of `dilate` method](https://api.image-js.org/classes/index.Mask.html#dilate)
-[Dilation]( 'wikipedia link on dilation') is a fundamental morphological operation in image processing that is used to expand the size of foreground objects ([regions of interest](../../Glossary.md#roiregion-of-interest 'internal link on region of interest')) within an image while preserving their shape and structure. It involves moving a [structuring element](../../Glossary.md#structuring-element 'internal link on structuring element') over the image and replacing each pixel with the **maximum** value of the pixels covered by the structuring element. Dilation is commonly used for tasks like noise reduction, object enlargement, and feature enhancement.
+[Dilation]( 'wikipedia link on dilation') is a fundamental morphological operation in image processing that is used to expand the size of foreground objects ([regions of interest](../../glossary.md#roiregion-of-interest 'internal link on region of interest')) within an image while preserving their shape and structure. It involves moving a [structuring element](../../glossary.md#structuring-element 'internal link on structuring element') over the image and replacing each pixel with the **maximum** value of the pixels covered by the structuring element. Dilation is commonly used for tasks like noise reduction, object enlargement, and feature enhancement.
diff --git a/docs/Features/Morphology/Erosion.md b/docs/features/morphology/erosion.md
similarity index 94%
rename from docs/Features/Morphology/Erosion.md
rename to docs/features/morphology/erosion.md
index 16884252..c0a2db27 100644
--- a/docs/Features/Morphology/Erosion.md
+++ b/docs/features/morphology/erosion.md
@@ -11,7 +11,7 @@ _Reduces the size of foreground objects by iteratively shrinking their boundarie
[🖼️ Image options and parameters of `erode` method](https://api.image-js.org/classes/index.Image.html#erode)
[🎭 Mask options and parameters of `erode` method](https://api.image-js.org/classes/index.Mask.html#erode)
-[Erosion](https://en.wikipedia.org/wiki/Erosion 'wikipedia link on erosion') is a fundamental morphological operation in image processing that is used to reduce the size of foreground objects ([regions of interest](../../Glossary.md#roiregion-of-interest 'internal link on region of interest')) within an image while preserving their shape and structure. It works by moving a [structuring element](../../Glossary.md#structuring-element 'internal link on structuring element') over the image and replacing each pixel with the **minimum** value of the pixels covered by the structuring element. Erosion is particularly useful for tasks like noise reduction, edge detection, and object separation.
+[Erosion](https://en.wikipedia.org/wiki/Erosion 'wikipedia link on erosion') is a fundamental morphological operation in image processing that is used to reduce the size of foreground objects ([regions of interest](../../glossary.md#roiregion-of-interest 'internal link on region of interest')) within an image while preserving their shape and structure. It works by moving a [structuring element](../../glossary.md#structuring-element 'internal link on structuring element') over the image and replacing each pixel with the **minimum** value of the pixels covered by the structuring element. Erosion is particularly useful for tasks like noise reduction, edge detection, and object separation.
diff --git a/docs/Features/Morphology/Morphological Gradient.md b/docs/features/morphology/morphological-gradient.md
similarity index 94%
rename from docs/Features/Morphology/Morphological Gradient.md
rename to docs/features/morphology/morphological-gradient.md
index 1c8ba431..0b405577 100644
--- a/docs/Features/Morphology/Morphological Gradient.md
+++ b/docs/features/morphology/morphological-gradient.md
@@ -13,7 +13,7 @@ _Emphasizes the boundaries of objects in a binary or grayscale image by calculat
[The morphological gradient](https://en.wikipedia.org/wiki/Morphological_gradient 'wikipedia link on morphological gradient') is a mathematical operation used in image processing and mathematical morphology to highlight the boundaries of objects or regions within an image.
It is a fundamental concept in morphological image analysis and is often used for tasks such as edge detection and image segmentation.
-The morphological gradient is based on the difference between an image after [dilation](./Dilation.md 'internal link on dilation') and the same image after [erosion](./Erosion.md 'internal link on erosion').
+The morphological gradient is based on the difference between an image after [dilation](./dilation.md 'internal link on dilation') and the same image after [erosion](./erosion.md 'internal link on erosion').
### Applying morphological gradient on Images:
diff --git a/docs/features/morphology/morphology.md b/docs/features/morphology/morphology.md
new file mode 100644
index 00000000..7be8cabd
--- /dev/null
+++ b/docs/features/morphology/morphology.md
@@ -0,0 +1,22 @@
+---
+sidebar_position: 0
+---
+
+# Morphology
+
+[Morphological operations](../../glossary.md#morphology 'internal link on morphology') are based on a structuring element, which is a small shape or pattern used as a template for modifying the pixels in an image. The structuring element is typically a small binary array that defines the area around a pixel to consider during the operation.
+
+Morphological operations are simple yet powerful tools that play a significant role in various image processing tasks, especially in situations where the shapes and structures of objects are important.
+
+### Methods
+
+| Can be applied on | Images | Masks |
+| ----------------------------------------------------------------------------------------------------------------------- | ------- | -------- |
+| [Morphological gradient(`morphologicalGradient`)](./morphological-gradient.md 'internal link on morphologicalGradient') | ✅ | ✅ |
+| [Canny edge detector(`cannyEdgeDetector`)](./canny-edge-detector.md 'internal link on cannyEdgeDetector') | ✅ | ❌ |
+| [Erosion(`erode`)](./erosion.md 'internal link on erode') | ✅ | ✅ |
+| [Dilation(`dilate`)](./dilation.md 'internal link on dilate') | ✅ | ✅ |
+| [Opening(`open`)](./opening.md 'internal link on open') | ✅ | ✅ |
+| [Closing(`close`)](./closing.md 'internal link on close') | ✅ | ✅ |
+| [Top Hat(`topHat`)](./top-hat 'internal link on topHat') | ✅ | ✅ |
+| [Bottom Hat(`bottomHat`)](./bottom-hat 'internal link on bottomHat') | ✅ | ✅ |
diff --git a/docs/Features/Morphology/Opening.md b/docs/features/morphology/opening.md
similarity index 100%
rename from docs/Features/Morphology/Opening.md
rename to docs/features/morphology/opening.md
diff --git a/docs/Features/Morphology/Top Hat.md b/docs/features/morphology/top-hat.md
similarity index 96%
rename from docs/Features/Morphology/Top Hat.md
rename to docs/features/morphology/top-hat.md
index b41cbfd3..3239636f 100644
--- a/docs/Features/Morphology/Top Hat.md
+++ b/docs/features/morphology/top-hat.md
@@ -12,7 +12,7 @@ _Enhances the fine details or small objects within an image by subtracting an op
[🎭 Mask options and parameters of `topHat` method](https://api.image-js.org/classes/index.Mask.html#topHat)
In morphology and image processing, [Top Hat](https://en.wikipedia.org/wiki/Top-hat_transform 'wikipedia link on top hat') is an operation used to enhance or extract small bright regions or details from an image while suppressing the larger surrounding structures.
-It is the result of subtraction between the result of input image [opening](./Opening.md 'internal link on open method') and the input image itself.
+It is the result of subtraction between the result of input image [opening](./opening.md 'internal link on open method') and the input image itself.
The purpose of bottom hat(or as it is also called _black-hat_) is to enhance and extract **brighter** regions of the image.
diff --git a/docs/Features/Operations/_category_.json b/docs/features/operations/_category_.json
similarity index 100%
rename from docs/Features/Operations/_category_.json
rename to docs/features/operations/_category_.json
diff --git a/docs/Features/Operations/Clear border.md b/docs/features/operations/clear-border.md
similarity index 98%
rename from docs/Features/Operations/Clear border.md
rename to docs/features/operations/clear-border.md
index 344c464a..c0d98a29 100644
--- a/docs/Features/Operations/Clear border.md
+++ b/docs/features/operations/clear-border.md
@@ -2,6 +2,8 @@
sidebar_position: 50
---
+# Clear border
+
_Removes mask regions at the border of a mask._
[🎭 Mask options and parameters of `clearBorder` method](https://api.image-js.org/classes/index.Mask.html#clearBorder)
diff --git a/docs/Features/Operations/demos/threshold.demo.tsx b/docs/features/operations/demos/threshold.demo.tsx
similarity index 100%
rename from docs/Features/Operations/demos/threshold.demo.tsx
rename to docs/features/operations/demos/threshold.demo.tsx
diff --git a/docs/Features/Operations/Get extrema.md b/docs/features/operations/get-extrema.md
similarity index 99%
rename from docs/Features/Operations/Get extrema.md
rename to docs/features/operations/get-extrema.md
index a043ca31..93c1bbc8 100644
--- a/docs/Features/Operations/Get extrema.md
+++ b/docs/features/operations/get-extrema.md
@@ -2,6 +2,8 @@
sidebar_position: 20
---
+# Get extrema
+
_Finds extreme pixel values in the image._
[🖼️ Image options and parameters of `getExtrema` function](https://api.image-js.org/functions/index.getExtrema.html)
diff --git a/docs/Features/Operations/images/clearBorder/clearBorder.png b/docs/features/operations/images/clearBorder/clearBorder.png
similarity index 100%
rename from docs/Features/Operations/images/clearBorder/clearBorder.png
rename to docs/features/operations/images/clearBorder/clearBorder.png
diff --git a/docs/Features/Operations/images/extremaOutput/CellsOutputcrossMaxISODATA5.jpg b/docs/features/operations/images/extremaOutput/CellsOutputcrossMaxISODATA5.jpg
similarity index 100%
rename from docs/Features/Operations/images/extremaOutput/CellsOutputcrossMaxISODATA5.jpg
rename to docs/features/operations/images/extremaOutput/CellsOutputcrossMaxISODATA5.jpg
diff --git a/docs/Features/Operations/images/extremaOutput/CellsOutputcrossMinISODATA5.jpg b/docs/features/operations/images/extremaOutput/CellsOutputcrossMinISODATA5.jpg
similarity index 100%
rename from docs/Features/Operations/images/extremaOutput/CellsOutputcrossMinISODATA5.jpg
rename to docs/features/operations/images/extremaOutput/CellsOutputcrossMinISODATA5.jpg
diff --git a/docs/Features/Operations/images/filterPointsOutput/CellsOutputcross17ISODATA5.jpg b/docs/features/operations/images/filterPointsOutput/CellsOutputcross17ISODATA5.jpg
similarity index 100%
rename from docs/Features/Operations/images/filterPointsOutput/CellsOutputcross17ISODATA5.jpg
rename to docs/features/operations/images/filterPointsOutput/CellsOutputcross17ISODATA5.jpg
diff --git a/docs/Features/Operations/images/paintMask/paintMaskComp.png b/docs/features/operations/images/paintMask/paintMaskComp.png
similarity index 100%
rename from docs/Features/Operations/images/paintMask/paintMaskComp.png
rename to docs/features/operations/images/paintMask/paintMaskComp.png
diff --git a/docs/Features/Operations/images/watershedOutput/CellsDivision.jpg b/docs/features/operations/images/watershedOutput/CellsDivision.jpg
similarity index 100%
rename from docs/Features/Operations/images/watershedOutput/CellsDivision.jpg
rename to docs/features/operations/images/watershedOutput/CellsDivision.jpg
diff --git a/docs/Features/Operations/images/watershedOutput/CellsOutputISODATA5.jpg b/docs/features/operations/images/watershedOutput/CellsOutputISODATA5.jpg
similarity index 100%
rename from docs/Features/Operations/images/watershedOutput/CellsOutputISODATA5.jpg
rename to docs/features/operations/images/watershedOutput/CellsOutputISODATA5.jpg
diff --git a/docs/features/operations/operations.md b/docs/features/operations/operations.md
new file mode 100644
index 00000000..568f75e9
--- /dev/null
+++ b/docs/features/operations/operations.md
@@ -0,0 +1,19 @@
+---
+sidebar_position: 0
+---
+
+# Operations
+
+Operations section is dedicated to elements of ImageJS that are mostly used to help with or to transition from one image data type to another.
+For instance, threshold is used to go from Image to Mask, while watershed is used to create ROI map. It can also be helper functions that can be useful during analysis.
+
+### Methods
+
+| Can be applied on | Images | Masks |
+| ----------------------------------------------------------------------------------- | -------- | -------- |
+| [Get extrema(`getExtrema`)](./get-extrema.md 'internal link on getExtrema') | ✅ | ❌ |
+| [Filter points(`filterPoints`)](./remove-points.md 'internal link on filterPoints') | ✅ | ❌ |
+| [Threshold(`threshold`)](./threshold.md 'internal link on threshold') | ✅ | ❌ |
+| [Watershed(`waterShed`)](./watershed.md 'internal link on watershed') | ✅ | ❌ |
+| [Clear border(`clearBorder`)](./clear-border.md 'internal link on clear border') | ❌ | ✅ |
+| [Paint mask(`paintMask`)](./paint-mask.md 'internal link on paint mask') | ✅ | ✅ |
diff --git a/docs/Features/Operations/Paint mask.md b/docs/features/operations/paint-mask.md
similarity index 99%
rename from docs/Features/Operations/Paint mask.md
rename to docs/features/operations/paint-mask.md
index 3633a9fe..348f178e 100644
--- a/docs/Features/Operations/Paint mask.md
+++ b/docs/features/operations/paint-mask.md
@@ -2,6 +2,8 @@
sidebar_position: 60
---
+# Paint mask
+
_Paints mask on the image._
[🖼️ Image options and parameters of `paintMask` method](https://api.image-js.org/classes/index.Image.html#paintMask)
diff --git a/docs/Features/Operations/Remove points.md b/docs/features/operations/remove-points.md
similarity index 100%
rename from docs/Features/Operations/Remove points.md
rename to docs/features/operations/remove-points.md
diff --git a/docs/Features/Operations/Threshold.md b/docs/features/operations/threshold.md
similarity index 100%
rename from docs/Features/Operations/Threshold.md
rename to docs/features/operations/threshold.md
diff --git a/docs/Features/Operations/Watershed.md b/docs/features/operations/watershed.md
similarity index 94%
rename from docs/Features/Operations/Watershed.md
rename to docs/features/operations/watershed.md
index bf30bc7a..3149f3e5 100644
--- a/docs/Features/Operations/Watershed.md
+++ b/docs/features/operations/watershed.md
@@ -10,7 +10,7 @@ _Separates and identifies distinct regions or objects within an image through gr
[Watershed filter]( 'wikipedia link on watershed') is a way of identifying objects by finding image's extreme points (minima or maxima) in terms of intensity and filling these spaces with color (label). The process reminds geological [watershed](https://en.wikipedia.org/wiki/Drainage_divide 'wikipedia link on drainage divide'), which is the origin of algorithm's name. In order for the "water" not to go overboard and stay within the limits of the region, these limits must be set.
-There are two ways to do so. One way is to limit the [intensity](../../Glossary.md#intensity 'glossary link on intensity') by threshold value. Another way is to apply a mask which can set the area where watershed will be implemented.
+There are two ways to do so. One way is to limit the [intensity](../../glossary.md#intensity 'glossary link on intensity') by threshold value. Another way is to apply a mask which can set the area where watershed will be implemented.
The watershed algorithm is particularly useful for segmenting objects in images, especially when objects are close to each other.
@@ -38,8 +38,8 @@ If you look for bright-colored ROIs, then either look for maximum points or inve
#### Options
-| Property | Required | Default value |
-| ---------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
-| [`mask`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#mask) | no | - |
-| [`points`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#points) | no | minimum points from [`getExtrema()`](./Get%20extrema.md 'internal link on get extrema') function |
-| [`threshold`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#threshold) | no | `1` |
+| Property | Required | Default value |
+| ---------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------- |
+| [`mask`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#mask) | no | - |
+| [`points`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#points) | no | minimum points from [`getExtrema()`](./get-extrema.md 'internal link on get extrema') function |
+| [`threshold`](https://api.image-js.org/interfaces/index.WaterShedOptions.html#threshold) | no | `1` |
diff --git a/docs/Features/Regions of interest/Centroid.md b/docs/features/regions-of-interest/centroid.md
similarity index 100%
rename from docs/Features/Regions of interest/Centroid.md
rename to docs/features/regions-of-interest/centroid.md
diff --git a/docs/Features/Regions of interest/Convex Hull.md b/docs/features/regions-of-interest/convex-hull.md
similarity index 98%
rename from docs/Features/Regions of interest/Convex Hull.md
rename to docs/features/regions-of-interest/convex-hull.md
index dd5800d1..f016113a 100644
--- a/docs/Features/Regions of interest/Convex Hull.md
+++ b/docs/features/regions-of-interest/convex-hull.md
@@ -11,7 +11,7 @@ _Smallest convex polygon or polyhedron that contains region of interest._
[Convex Hull](https://en.wikipedia.org/wiki/Convex_hull 'wikipedia link on convex hull') is a way of characterizing the shape of an image by determining which pixels are adjacent to other pixels of the same intensity. This is a good way to find convex features in an image.
-
+
:::tip
To understand what convex hull is, picture a rubber band wrapped around your object. The shape of this rubber band will be the shape of your convex hull.
diff --git a/docs/Features/Regions of interest/Ellipse.md b/docs/features/regions-of-interest/ellipse.md
similarity index 99%
rename from docs/Features/Regions of interest/Ellipse.md
rename to docs/features/regions-of-interest/ellipse.md
index bf558ef9..7400ecb2 100644
--- a/docs/Features/Regions of interest/Ellipse.md
+++ b/docs/features/regions-of-interest/ellipse.md
@@ -2,6 +2,8 @@
sidebar_position: 60
---
+# Ellipse
+
_Calculates ellipse around a region of interest._
[🔎 ROI options and parameters of `ellipse` accessor](https://api.image-js.org/classes/index.Roi.html#ellipse)
diff --git a/docs/Features/Regions of interest/EQPC.md b/docs/features/regions-of-interest/eqpc.md
similarity index 95%
rename from docs/Features/Regions of interest/EQPC.md
rename to docs/features/regions-of-interest/eqpc.md
index ff97f585..b79bd0e4 100644
--- a/docs/Features/Regions of interest/EQPC.md
+++ b/docs/features/regions-of-interest/eqpc.md
@@ -11,7 +11,7 @@ _Diameter of a circle that has the same area as the projection area of the regio
EQPC represents a circle of equal projection area. This means that it is a diameter of a circle that has the same area as an object of interest.
It is widely used for the evaluation of particles sizes from the projection area A of a non-spherical particle.
-
+
The formula finds diameter from potential circle's surface:
diff --git a/docs/Features/Regions of interest/Feret Diameters.md b/docs/features/regions-of-interest/feret-diameters.md
similarity index 97%
rename from docs/Features/Regions of interest/Feret Diameters.md
rename to docs/features/regions-of-interest/feret-diameters.md
index 2c55116f..99662671 100644
--- a/docs/Features/Regions of interest/Feret Diameters.md
+++ b/docs/features/regions-of-interest/feret-diameters.md
@@ -16,7 +16,7 @@ This measurement is commonly employed for the analysis of shapes and structures
Feret diameters can be defined by the points as if the object was measured by [calliper](https://en.wikipedia.org/wiki/Calipers 'wikipedia link on caliper'). Therefore its other name, calliper diameter.
:::
-
+
In ImageJS Feret diameters are a ROI class accessor that return a Feret object:
@@ -53,7 +53,7 @@ Each diameter in itself is also an object which has its own properties:
Here's how Feret diameter is implemented in ImageJS:
-_Finding convex hull points_: an algorithm is based on the fact that one of the lines is aligned with one of the convex hull sides. This significantly facilitates Feret's diameter's search. Here, a preexisting convex hull method is implemented.(see [convex hull page](./Convex%20Hull.md 'internal link on convex hull') for more information).
+_Finding convex hull points_: an algorithm is based on the fact that one of the lines is aligned with one of the convex hull sides. This significantly facilitates Feret's diameter's search. Here, a preexisting convex hull method is implemented.(see [convex hull page](./convex-hull.md 'internal link on convex hull') for more information).
_Rotating an object_: an object gets rotated parallel to the X-axis. It allows finding tilt angles of the diameters. It also simplifies search for points. After all the data is found, it just gets rotated back by the same angle to get actual result.
diff --git a/docs/Features/Regions of interest/Fill ratio.md b/docs/features/regions-of-interest/fill-ratio.md
similarity index 100%
rename from docs/Features/Regions of interest/Fill ratio.md
rename to docs/features/regions-of-interest/fill-ratio.md
diff --git a/docs/Features/Regions of interest/Holes info.md b/docs/features/regions-of-interest/holes-info.md
similarity index 83%
rename from docs/Features/Regions of interest/Holes info.md
rename to docs/features/regions-of-interest/holes-info.md
index dcf0f74a..7ca9cff4 100644
--- a/docs/Features/Regions of interest/Holes info.md
+++ b/docs/features/regions-of-interest/holes-info.md
@@ -2,11 +2,13 @@
sidebar_position: 81
---
+# Holes info
+
_Information about holes in the ROI._
[🔎 ROI options and parameters of `holesInfo` method](https://api.image-js.org/classes/index.Roi.html#holesInfo)
-Holes info provides information about the number of and the overall surface of holes within the region of interest. It allows finding [fill ratio](./Fill%20ratio.md) and provides insight about form of the ROI.
+Holes info provides information about the number of and the overall surface of holes within the region of interest. It allows finding [fill ratio](./fill-ratio.md) and provides insight about form of the ROI.
In ImageJS `holesInfo()` is a ROI class method that returns an object with number of holes and their total surface in pixels.
diff --git a/docs/Features/Regions of interest/img/convexHull.svg b/docs/features/regions-of-interest/images/convexHull.svg
similarity index 100%
rename from docs/Features/Regions of interest/img/convexHull.svg
rename to docs/features/regions-of-interest/images/convexHull.svg
diff --git a/docs/Features/Regions of interest/img/feret.svg b/docs/features/regions-of-interest/images/feret.svg
similarity index 100%
rename from docs/Features/Regions of interest/img/feret.svg
rename to docs/features/regions-of-interest/images/feret.svg
diff --git a/docs/Features/Regions of interest/img/mbr.svg b/docs/features/regions-of-interest/images/mbr.svg
similarity index 100%
rename from docs/Features/Regions of interest/img/mbr.svg
rename to docs/features/regions-of-interest/images/mbr.svg
diff --git a/docs/Features/Regions of interest/img/perimeter.svg b/docs/features/regions-of-interest/images/perimeter.svg
similarity index 100%
rename from docs/Features/Regions of interest/img/perimeter.svg
rename to docs/features/regions-of-interest/images/perimeter.svg
diff --git a/docs/Features/Regions of interest/img/roi.svg b/docs/features/regions-of-interest/images/roi.svg
similarity index 100%
rename from docs/Features/Regions of interest/img/roi.svg
rename to docs/features/regions-of-interest/images/roi.svg
diff --git a/docs/Features/Regions of interest/MBR.md b/docs/features/regions-of-interest/mbr.md
similarity index 98%
rename from docs/Features/Regions of interest/MBR.md
rename to docs/features/regions-of-interest/mbr.md
index 6718d575..bf689770 100644
--- a/docs/Features/Regions of interest/MBR.md
+++ b/docs/features/regions-of-interest/mbr.md
@@ -11,7 +11,7 @@ _Smallest rectangle that fully encloses a region of interest, providing a boundi
Minimum Bounding Rectangle(MBR) is the smallest rectangle which can fit the region of interest in question.
-
+
MBR is relevant for such things as extracting features, detecting collisions or simply localizing objects.
diff --git a/docs/Features/Regions of interest/PED.md b/docs/features/regions-of-interest/ped.md
similarity index 85%
rename from docs/Features/Regions of interest/PED.md
rename to docs/features/regions-of-interest/ped.md
index 0e1f7bd1..646d2db8 100644
--- a/docs/Features/Regions of interest/PED.md
+++ b/docs/features/regions-of-interest/ped.md
@@ -9,9 +9,9 @@ _Diameter of a circle that has the same perimeter as the region of interest._
[🔎 ROI options and parameters of `ped` accessor](https://api.image-js.org/classes/index.Roi.html#ped)
PED represents a diameter of a circle that has the same perimeter as the particle image.
-Similarly to [EQPC](./EQPC.md 'internal link on eqpc') it is used to evaluate ROI's sizes albeit from its perimeter and not surface.
+Similarly to [EQPC](./eqpc.md 'internal link on eqpc') it is used to evaluate ROI's sizes albeit from its perimeter and not surface.
-
+
The formula is simple:
diff --git a/docs/Features/Regions of interest/Perimeter.md b/docs/features/regions-of-interest/perimeter.md
similarity index 97%
rename from docs/Features/Regions of interest/Perimeter.md
rename to docs/features/regions-of-interest/perimeter.md
index 38c0f957..20e8eb6f 100644
--- a/docs/Features/Regions of interest/Perimeter.md
+++ b/docs/features/regions-of-interest/perimeter.md
@@ -22,7 +22,7 @@ Thus this **pixel's perimeter is equal to 2 - 0.59 = ~1.41**.
If a pixel has 3 external sides, we remove from the sum **2 \* (2 - √2) = ~1.17**.
So this **pixel's perimeter is equal to 3 - 1.17 = ~1.83**.
-
+
It is a basic tool that provides insight to region's size and length.
diff --git a/docs/features/regions-of-interest/regions-of-interest.md b/docs/features/regions-of-interest/regions-of-interest.md
new file mode 100644
index 00000000..babc835f
--- /dev/null
+++ b/docs/features/regions-of-interest/regions-of-interest.md
@@ -0,0 +1,19 @@
+# Regions of interest
+
+This section is dedicated to analysis of mask and its specific regions. ImageJS is first and foremost an analyzer of particles and analysis of regions of interest. Therefore there are tools that help detecting particles as well as determining their size, shape position and direction.
+
+### Methods
+
+| Can be applied on | ROIs | Masks |
+| --------------------------------------------------------------------------------- | ------- | -------- |
+| [Convex Hull(`convexHull`)](./convex-hull.md 'internal link on convex hull') | ✅ | ✅ |
+| [Feret diameter(`feret`)](./feret-diameters.md 'internal link on feret diameter') | ✅ | ✅ |
+| [Minimum Bounding Rectangle(`mbr`)](./mbr.md 'internal link on mbr') | ✅ | ✅ |
+| [Perimeter(`perimeter`)](./perimeter.md 'internal link on perimeter') | ✅ | ❌ |
+| [EQPC(`eqpc`)](./eqpc.md 'internal link on eqpc') | ✅ | ❌ |
+| [PED(`ped`)](./ped.md 'internal link on ped') | ✅ | ❌ |
+| [Centroid(`centroid`)](./centroid.md 'internal link on centroid') | ✅ | ❌ |
+| [Fill ratio(`fillRatio`)](./fill-ratio.md 'internal link on fill ratio') | ✅ | ❌ |
+| [Solidity(`solidity`)](./solidity.md 'internal link on solidity') | ✅ | ❌ |
+| [Roundness(`roundness`)](./roundness.md 'internal link on roundness') | ✅ | ❌ |
+| [Sphericity(`sphericity`)](./sphericity.md 'internal link on sphericity') | ✅ | ❌ |
diff --git a/docs/Features/Regions of interest/Roundness.md b/docs/features/regions-of-interest/roundness.md
similarity index 100%
rename from docs/Features/Regions of interest/Roundness.md
rename to docs/features/regions-of-interest/roundness.md
diff --git a/docs/Features/Regions of interest/Solidity.md b/docs/features/regions-of-interest/solidity.md
similarity index 100%
rename from docs/Features/Regions of interest/Solidity.md
rename to docs/features/regions-of-interest/solidity.md
diff --git a/docs/Features/Regions of interest/Sphericity.md b/docs/features/regions-of-interest/sphericity.md
similarity index 92%
rename from docs/Features/Regions of interest/Sphericity.md
rename to docs/features/regions-of-interest/sphericity.md
index d96f8ed6..fbc6ff85 100644
--- a/docs/Features/Regions of interest/Sphericity.md
+++ b/docs/features/regions-of-interest/sphericity.md
@@ -15,7 +15,7 @@ $$
Sphericity =\frac{ 2*\sqrt{Surface*\pi}}{Perimeter};
$$
-Sphericity has a similar role as [roundness](./Roundness.md 'internal link to roundness') and can be used as a reference for shape comparison.
+Sphericity has a similar role as [roundness](./roundness.md 'internal link to roundness') and can be used as a reference for shape comparison.
In ImageJS sphericity is a ROI class accessor that returns a sphericity index:
diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx
index 10894854..c5ca82b9 100644
--- a/docs/getting-started.mdx
+++ b/docs/getting-started.mdx
@@ -97,12 +97,12 @@ image = image.grey();
```
:::info
-To see more methods, visit the ["Features"](./Features/Features.md) category.
+To see more methods, visit the ["Features"](./features/features.md) category.
:::
## What's next?
-Now that you know how images are loaded and saved, you can deepen your understanding by going through the [Basics](./Basics) category and seeing how different basic elements of ImageJS work.
-You can also broaden your horizons by looking at available [Features](./Features).
+Now that you know how images are loaded and saved, you can deepen your understanding by going through the [Basics](./basics) category and seeing how different basic elements of ImageJS work.
+You can also broaden your horizons by looking at available [Features](./features).
-If you want to see how ImageJS works in practice, we suggest you visit the [Tutorials](./Tutorials) segment and see for yourself its practical applications.
+If you want to see how ImageJS works in practice, we suggest you visit the [Tutorials](./tutorials) segment and see for yourself its practical applications.
diff --git a/docs/Glossary.md b/docs/glossary.md
similarity index 99%
rename from docs/Glossary.md
rename to docs/glossary.md
index 49aca73b..680438b4 100644
--- a/docs/Glossary.md
+++ b/docs/glossary.md
@@ -2,6 +2,8 @@
sidebar_position: 100
---
+# Glossary
+
### Alpha channel
[An alpha channel](https://en.wikipedia.org/wiki/Alpha_compositing 'wikipedia link on alpha channel') is a supplementary channel used to store and represent information about the transparency or opacity of each pixel. It is commonly associated with color images, and it allows for the creation of images with varying levels of transparency or translucency, which is essential for various graphic design, visual effects, and image composition tasks.
diff --git a/docs/tutorials/_category_.json b/docs/tutorials/_category_.json
new file mode 100644
index 00000000..dbc40b5e
--- /dev/null
+++ b/docs/tutorials/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Tutorials",
+ "position": 30
+}
diff --git a/docs/Tutorials/Applying transform function on images.md b/docs/tutorials/applying-transform-function-on-images.md
similarity index 97%
rename from docs/Tutorials/Applying transform function on images.md
rename to docs/tutorials/applying-transform-function-on-images.md
index 8ca1e5be..329e1a6a 100644
--- a/docs/Tutorials/Applying transform function on images.md
+++ b/docs/tutorials/applying-transform-function-on-images.md
@@ -1,3 +1,5 @@
+# Applying transform function on images
+
In a broader sense of the term, image transformation refers to the process of modifying or converting images from one form to another. This can involve changes to the image's appearance, format, size, or mathematical representation. Therefore converting image's color model from "RGB" format to grayscale can also be considered a transformation.
In ImageJS, however, `transform()` function does transformations that can be accomplished through [matrix multiplication](https://en.wikipedia.org/wiki/Matrix_multiplication).
@@ -121,7 +123,7 @@ const stretchedImage = image.transform(transformationMatrix);

:::note
-ImageJS also has [`resize`](../Features/Geometry/Resize.md) function that allows to scale an image.
+ImageJS also has [`resize`](../features/geometry/resize.md) function that allows to scale an image.
The current tutorial just demonstrates the basic principle behind transformation of such kind.
:::
@@ -160,7 +162,7 @@ const flippedImage = image.transform(flipMatrix);

:::note
-ImageJS also has [`flip`](../Features/Geometry/Flip.md) function that allows to flip an image.
+ImageJS also has [`flip`](../features/geometry/flip.md) function that allows to flip an image.
Current tutorial just demonstrates the basic principle behind transformation of such kind.
:::
@@ -300,7 +302,7 @@ const rotateAroundCenterImage = image.transform(

:::note
-Image-js also has [`rotate()`](../Features/Geometry/Rotate.md) and [`transformRotate()`](../Features/Geometry/Transform%20and%20Rotate.md) functions. `rotate()` function allows rotating an image by multiple of 90 degrees.
+Image-js also has [`rotate()`](../features/geometry/rotate.md) and [`transformRotate()`](../features/geometry/transform-and-rotate.md) functions. `rotate()` function allows rotating an image by multiple of 90 degrees.
`transformRotate()` allows rotating an image by any degree. It also allows choosing the axe of rotation. So, for rotation, you have other functions that allow you to perform it.
:::
diff --git a/docs/Tutorials/Correcting baseline with topHat.md b/docs/tutorials/correcting-baseline-with-tophat.md
similarity index 97%
rename from docs/Tutorials/Correcting baseline with topHat.md
rename to docs/tutorials/correcting-baseline-with-tophat.md
index 7ae4190e..dc62b4d8 100644
--- a/docs/Tutorials/Correcting baseline with topHat.md
+++ b/docs/tutorials/correcting-baseline-with-tophat.md
@@ -1,3 +1,5 @@
+# Correcting baseline with `topHat()`
+
There are moments when an image doesn't have a perfect lightning and you have uneven background like here.

diff --git a/docs/Tutorials/Extracting metadata.md b/docs/tutorials/extracting-metadata.md
similarity index 98%
rename from docs/Tutorials/Extracting metadata.md
rename to docs/tutorials/extracting-metadata.md
index 181ab00b..45e315f9 100644
--- a/docs/Tutorials/Extracting metadata.md
+++ b/docs/tutorials/extracting-metadata.md
@@ -4,7 +4,7 @@ In this tutorial we will discuss metadata extraction with an image that we alrea

-[Metadata](../Glossary.md#metadata 'glossary link on metadata') represents information about various aspects of an image itself. It can be something basic such as the date when an image was taken, or something more specific like the name of the camera that the image was taken by. You can extract metadata tags that can provide additional information about an image by using this command:
+[Metadata](../glossary.md#metadata 'glossary link on metadata') represents information about various aspects of an image itself. It can be something basic such as the date when an image was taken, or something more specific like the name of the camera that the image was taken by. You can extract metadata tags that can provide additional information about an image by using this command:
```ts
const meta = image.meta;
diff --git a/docs/Tutorials/Image segmentation with threshold.md b/docs/tutorials/image-segmentation-with-threshold.md
similarity index 97%
rename from docs/Tutorials/Image segmentation with threshold.md
rename to docs/tutorials/image-segmentation-with-threshold.md
index 3f97254f..9c5c0d98 100644
--- a/docs/Tutorials/Image segmentation with threshold.md
+++ b/docs/tutorials/image-segmentation-with-threshold.md
@@ -5,7 +5,7 @@ In this tutorial we are going to cover the threshold operation and how to get a
## Synopsis
Here is a quick summary of this tutorial.
-Threshold is used for [image segmentation](../Glossary.md#image-segmentation 'glossary link on image segmentation') to locate specific regions of interest (ROI) by separating background and foreground of the image. By doing so, we can create a map of regions, a `RoiMapManager` object.
+Threshold is used for [image segmentation](../glossary.md#image-segmentation 'glossary link on image segmentation') to locate specific regions of interest (ROI) by separating background and foreground of the image. By doing so, we can create a map of regions, a `RoiMapManager` object.
Once threshold is applied, you will get a mask, which will allow you to localize and extract specific objects or regions of interest situated on the image.
@@ -31,7 +31,7 @@ const roiMapManager = fromMask(mask);
One of the ImageJS features is the ability to extract and analyze specific regions of the image(regions of interest or ROI).
However, to get these regions you need to localize them first. This is where thresholding comes in.
-Thresholding is an [image segmentation](../Glossary.md#image-segmentation 'glossary link on image segmentation') technique. It separates image's foreground objects from their background based on pixel intensity value. It works especially well when background is rather simple and well-defined.
+Thresholding is an [image segmentation](../glossary.md#image-segmentation 'glossary link on image segmentation') technique. It separates image's foreground objects from their background based on pixel intensity value. It works especially well when background is rather simple and well-defined.
For instance here is an image of particles under electronic microscopy.

diff --git a/docs/Tutorials/Image segmentation with watershed.md b/docs/tutorials/image-segmentation-with-watershed.md
similarity index 90%
rename from docs/Tutorials/Image segmentation with watershed.md
rename to docs/tutorials/image-segmentation-with-watershed.md
index 5bc6f909..1fafdfe1 100644
--- a/docs/Tutorials/Image segmentation with watershed.md
+++ b/docs/tutorials/image-segmentation-with-watershed.md
@@ -9,7 +9,7 @@ Watershed algorithm is an advanced image segmentation technique to identify obje

-First you must have a grayscale image. If this is not the case, use [`grey()`](../Features/Filters/Grayscale.md 'internal link on grayscale') method to grayscale it. Then blur the image. The choice of a blurring technique depends on what kind of image is to blur, but regular blur will do. Be careful while setting the kernel size. If it gets too big, objects' edges and minor details start to deteriorate.
+First you must have a grayscale image. If this is not the case, use [`grey()`](../features/filters/grayscale.md 'internal link on grayscale') method to grayscale it. Then blur the image. The choice of a blurring technique depends on what kind of image is to blur, but regular blur will do. Be careful while setting the kernel size. If it gets too big, objects' edges and minor details start to deteriorate.
After that, a threshold needs to be defined. It can be defined as an arbitrary value, but we recommend to compute a threshold mask from the image of interest.
Result can vary from one threshold algorithm to another so take a look at a few of them to see which one fits your needs.
@@ -48,7 +48,7 @@ Below you will find a detailed review of all the steps.
## Why is watershed necessary?
-[Threshold](../Features/Operations/Threshold.md 'internal link on threshold') is a great segmentation tool for finding objects, but it works only if objects are clearly separated from each other.
+[Threshold](../features/operations/threshold.md 'internal link on threshold') is a great segmentation tool for finding objects, but it works only if objects are clearly separated from each other.
Sometimes objects can be too close to each other and the binary image takes it as a giant region of interest, which is not the desired result.
@@ -89,13 +89,13 @@ Let's have a look at the necessary elements for a correct regions output.
:::info
-Before starting, check the [color model](../Glossary.md#color-model 'glossary link on color model') of an image. If the image is colored, you need to apply grayscale filter, otherwise the watershed algorithm will not work.
+Before starting, check the [color model](../glossary.md#color-model 'glossary link on color model') of an image. If the image is colored, you need to apply grayscale filter, otherwise the watershed algorithm will not work.
```ts
let image = image.grey();
```
-You can take a look at different types of grayscale algorithm on [grayscale page](../Features/Filters/Grayscale.md 'internal link on grayscale') in our "Features" section, but a default grayscale should be enough, since the important aspect is for an image to have only one channel.
+You can take a look at different types of grayscale algorithm on [grayscale page](../features/filters/grayscale.md 'internal link on grayscale') in our "Features" section, but a default grayscale should be enough, since the important aspect is for an image to have only one channel.
:::
## Blurring
@@ -104,11 +104,11 @@ First thing that you possibly need to do is to remove [image noise](https://en.w
ImageJS has several kinds of blurring:
-- [blur filter](../Features/Filters/Blur.md 'internal link on blur')
+- [blur filter](../features/filters/blur.md 'internal link on blur')
-- [gaussian blur filter](../Features/Filters/Gaussian%20Blur.md 'internal link on gaussian blur')
+- [gaussian blur filter](../features/filters/gaussian-blur.md 'internal link on gaussian blur')
-- [median filter](../Features/Filters/Median.md 'internal link on median')
+- [median filter](../features/filters/median.md 'internal link on median')
Each filter serves its own purpose, which we will briefly explain.
@@ -121,7 +121,7 @@ To use it you need to specify width and height of the kernel:
let blurredImage = image.blur({ width: 3, height: 3 });
```
-To discover more options you can visit our ["Features"](../Features/Features.md 'internal link on features main page') section about [blur](../Features/Filters/Blur.md 'internal link on blur').
+To discover more options you can visit our ["Features"](../features/features.md 'internal link on features main page') section about [blur](../features/filters/blur.md 'internal link on blur').
#### Gaussian blur
@@ -132,7 +132,7 @@ To use it you need to specify the size of the kernel. This is one of the ways of
let blurredImage = image.gaussianBlur({ sigma: 3 });
```
-To discover more options you can visit our ["Features"](../Features/Features.md 'internal link on features main page') section about [gaussian blur](../Features/Filters/Gaussian%20Blur.md 'internal link on gaussian blur').
+To discover more options you can visit our ["Features"](../features/features.md 'internal link on features main page') section about [gaussian blur](../features/filters/gaussian-blur.md 'internal link on gaussian blur').
#### Median
@@ -146,7 +146,7 @@ let blurredImage = image.medianFilter({
});
```
-To discover more options you can visit our ["Features"](../Features/Features.md 'internal link on features main page') section about [median filter](../Features/Filters/Median.md 'internal link on median').
+To discover more options you can visit our ["Features"](../features/features.md 'internal link on features main page') section about [median filter](../features/filters/median.md 'internal link on median').
:::caution
For each technique, kernel size must be an odd number in order for algorithm to find the center correctly!
@@ -181,9 +181,9 @@ const mask = blurredImage.threshold({ algorithm: 'isodata' });
So how to spot the correct ones?
-There are two functions that are used for finding extrema: [`getExtrema`](../Features/Operations/Get%20extrema.md 'internal link on get extrema function') and [`removeClosePoints`](../Features/Operations/Remove%20points.md 'internal link on remove points function').
+There are two functions that are used for finding extrema: [`getExtrema`](../features/operations/get-extrema.md 'internal link on get extrema function') and [`removeClosePoints`](../features/operations/remove-points.md 'internal link on remove points function').
-#### [`getExtrema`](../Features/Operations/Get%20extrema.md 'internal link on get extrema function')
+#### [`getExtrema`](../features/operations/get-extrema.md 'internal link on get extrema function')
This function searches for all local extrema(minima in case of this image). It checks each point for the values around. If all the neighbors are smaller, the point in-check becomes the minima(for maxima it checks if all values are bigger).
In the end it returns all extreme points of the image:
@@ -221,7 +221,7 @@ But even with this, `getExtrema` can only give us a smaller number of local extr

-#### [`removeClosePoints`](../Features/Operations/Remove%20points.md 'internal link on remove points function')
+#### [`removeClosePoints`](../features/operations/remove-points.md 'internal link on remove points function')
This is where another function can be used: `removeClosePoints`. With `distance` option this function can weed out local minima so that only those points that are within bigger or equal distance are left.
diff --git a/docs/Tutorials/Image stack analysis.md b/docs/tutorials/image-stack-analysis.md
similarity index 97%
rename from docs/Tutorials/Image stack analysis.md
rename to docs/tutorials/image-stack-analysis.md
index c42f197a..daca0c9b 100644
--- a/docs/Tutorials/Image stack analysis.md
+++ b/docs/tutorials/image-stack-analysis.md
@@ -1,3 +1,5 @@
+# Image stack analysis
+
The point of this tutorial is to show how to decode a stack of images and how to do some basic analysis with it.
## Synopsis
@@ -59,7 +61,7 @@ const stack = decodeStack(buffer);
```
:::warning
-`Stack` class works only with images that share same properties. Particularly, values for [bit depth](../Glossary.md#bit-depth 'internal link on bit depth'), [color model](../Glossary.md#color-model 'internal link on color model'), width and height must be the same.
+`Stack` class works only with images that share same properties. Particularly, values for [bit depth](../glossary.md#bit-depth 'internal link on bit depth'), [color model](../glossary.md#color-model 'internal link on color model'), width and height must be the same.
:::
## Find the image with maximum values:
diff --git a/docs/Tutorials/images/roiAnalysis/MBR.jpg b/docs/tutorials/images/roiAnalysis/MBR.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/MBR.jpg
rename to docs/tutorials/images/roiAnalysis/MBR.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/ThresholdOrWatershed.png b/docs/tutorials/images/roiAnalysis/ThresholdOrWatershed.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/ThresholdOrWatershed.png
rename to docs/tutorials/images/roiAnalysis/ThresholdOrWatershed.png
diff --git a/docs/Tutorials/images/roiAnalysis/aberration.jpg b/docs/tutorials/images/roiAnalysis/aberration.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/aberration.jpg
rename to docs/tutorials/images/roiAnalysis/aberration.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/distributionGraph.png b/docs/tutorials/images/roiAnalysis/distributionGraph.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/distributionGraph.png
rename to docs/tutorials/images/roiAnalysis/distributionGraph.png
diff --git a/docs/Tutorials/images/roiAnalysis/extraData.jpg b/docs/tutorials/images/roiAnalysis/extraData.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/extraData.jpg
rename to docs/tutorials/images/roiAnalysis/extraData.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/good.jpg b/docs/tutorials/images/roiAnalysis/good.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/good.jpg
rename to docs/tutorials/images/roiAnalysis/good.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/ignoredGroups.jpg b/docs/tutorials/images/roiAnalysis/ignoredGroups.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/ignoredGroups.jpg
rename to docs/tutorials/images/roiAnalysis/ignoredGroups.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/magnification.png b/docs/tutorials/images/roiAnalysis/magnification.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/magnification.png
rename to docs/tutorials/images/roiAnalysis/magnification.png
diff --git a/docs/Tutorials/images/roiAnalysis/mbrArGraph.png b/docs/tutorials/images/roiAnalysis/mbrArGraph.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/mbrArGraph.png
rename to docs/tutorials/images/roiAnalysis/mbrArGraph.png
diff --git a/docs/Tutorials/images/roiAnalysis/metadata.png b/docs/tutorials/images/roiAnalysis/metadata.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/metadata.png
rename to docs/tutorials/images/roiAnalysis/metadata.png
diff --git a/docs/Tutorials/images/roiAnalysis/metadataScreen.png b/docs/tutorials/images/roiAnalysis/metadataScreen.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/metadataScreen.png
rename to docs/tutorials/images/roiAnalysis/metadataScreen.png
diff --git a/docs/Tutorials/images/roiAnalysis/parsedExtraData.png b/docs/tutorials/images/roiAnalysis/parsedExtraData.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/parsedExtraData.png
rename to docs/tutorials/images/roiAnalysis/parsedExtraData.png
diff --git a/docs/Tutorials/images/roiAnalysis/particles.jpg b/docs/tutorials/images/roiAnalysis/particles.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/particles.jpg
rename to docs/tutorials/images/roiAnalysis/particles.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/resolutionData.png b/docs/tutorials/images/roiAnalysis/resolutionData.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/resolutionData.png
rename to docs/tutorials/images/roiAnalysis/resolutionData.png
diff --git a/docs/Tutorials/images/roiAnalysis/result.jpg b/docs/tutorials/images/roiAnalysis/result.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/result.jpg
rename to docs/tutorials/images/roiAnalysis/result.jpg
diff --git a/docs/Tutorials/images/roiAnalysis/roundness.png b/docs/tutorials/images/roiAnalysis/roundness.png
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/roundness.png
rename to docs/tutorials/images/roiAnalysis/roundness.png
diff --git a/docs/Tutorials/images/roiAnalysis/screwsMask4.jpg b/docs/tutorials/images/roiAnalysis/screwsMask4.jpg
similarity index 100%
rename from docs/Tutorials/images/roiAnalysis/screwsMask4.jpg
rename to docs/tutorials/images/roiAnalysis/screwsMask4.jpg
diff --git a/docs/Tutorials/images/stackAvg/ROI9.png b/docs/tutorials/images/stackAvg/ROI9.png
similarity index 100%
rename from docs/Tutorials/images/stackAvg/ROI9.png
rename to docs/tutorials/images/stackAvg/ROI9.png
diff --git a/docs/Tutorials/images/stackAvg/graphROI9.png b/docs/tutorials/images/stackAvg/graphROI9.png
similarity index 100%
rename from docs/Tutorials/images/stackAvg/graphROI9.png
rename to docs/tutorials/images/stackAvg/graphROI9.png
diff --git a/docs/Tutorials/images/stackAvg/maxImage.png b/docs/tutorials/images/stackAvg/maxImage.png
similarity index 100%
rename from docs/Tutorials/images/stackAvg/maxImage.png
rename to docs/tutorials/images/stackAvg/maxImage.png
diff --git a/docs/Tutorials/images/stackAvg/maxMask.png b/docs/tutorials/images/stackAvg/maxMask.png
similarity index 100%
rename from docs/Tutorials/images/stackAvg/maxMask.png
rename to docs/tutorials/images/stackAvg/maxMask.png
diff --git a/docs/Tutorials/images/stackAvg/paintedROIs.png b/docs/tutorials/images/stackAvg/paintedROIs.png
similarity index 100%
rename from docs/Tutorials/images/stackAvg/paintedROIs.png
rename to docs/tutorials/images/stackAvg/paintedROIs.png
diff --git a/docs/Tutorials/images/threshold/MaskCombosThreshold.png b/docs/tutorials/images/threshold/MaskCombosThreshold.png
similarity index 100%
rename from docs/Tutorials/images/threshold/MaskCombosThreshold.png
rename to docs/tutorials/images/threshold/MaskCombosThreshold.png
diff --git a/docs/Tutorials/images/threshold/OTSU.png b/docs/tutorials/images/threshold/OTSU.png
similarity index 100%
rename from docs/Tutorials/images/threshold/OTSU.png
rename to docs/tutorials/images/threshold/OTSU.png
diff --git a/docs/Tutorials/images/threshold/OtsuVisualization.png b/docs/tutorials/images/threshold/OtsuVisualization.png
similarity index 100%
rename from docs/Tutorials/images/threshold/OtsuVisualization.png
rename to docs/tutorials/images/threshold/OtsuVisualization.png
diff --git a/docs/Tutorials/images/threshold/ROIsColored.jpg b/docs/tutorials/images/threshold/ROIsColored.jpg
similarity index 100%
rename from docs/Tutorials/images/threshold/ROIsColored.jpg
rename to docs/tutorials/images/threshold/ROIsColored.jpg
diff --git a/docs/Tutorials/images/threshold/allowingCorners.svg b/docs/tutorials/images/threshold/allowingCorners.svg
similarity index 100%
rename from docs/Tutorials/images/threshold/allowingCorners.svg
rename to docs/tutorials/images/threshold/allowingCorners.svg
diff --git a/docs/Tutorials/images/threshold/greys.png b/docs/tutorials/images/threshold/greys.png
similarity index 100%
rename from docs/Tutorials/images/threshold/greys.png
rename to docs/tutorials/images/threshold/greys.png
diff --git a/docs/Tutorials/images/topHat correction/globalThreshMask.jpg b/docs/tutorials/images/topHat correction/globalThreshMask.jpg
similarity index 100%
rename from docs/Tutorials/images/topHat correction/globalThreshMask.jpg
rename to docs/tutorials/images/topHat correction/globalThreshMask.jpg
diff --git a/docs/Tutorials/images/topHat correction/histAfterTopHat.svg b/docs/tutorials/images/topHat correction/histAfterTopHat.svg
similarity index 100%
rename from docs/Tutorials/images/topHat correction/histAfterTopHat.svg
rename to docs/tutorials/images/topHat correction/histAfterTopHat.svg
diff --git a/docs/Tutorials/images/topHat correction/histBeforeTopHat.svg b/docs/tutorials/images/topHat correction/histBeforeTopHat.svg
similarity index 100%
rename from docs/Tutorials/images/topHat correction/histBeforeTopHat.svg
rename to docs/tutorials/images/topHat correction/histBeforeTopHat.svg
diff --git a/docs/Tutorials/images/topHat correction/sudoku.png b/docs/tutorials/images/topHat correction/sudoku.png
similarity index 100%
rename from docs/Tutorials/images/topHat correction/sudoku.png
rename to docs/tutorials/images/topHat correction/sudoku.png
diff --git a/docs/Tutorials/images/topHat correction/topHatComp.png b/docs/tutorials/images/topHat correction/topHatComp.png
similarity index 100%
rename from docs/Tutorials/images/topHat correction/topHatComp.png
rename to docs/tutorials/images/topHat correction/topHatComp.png
diff --git a/docs/Tutorials/images/topHat correction/topHatImage.jpg b/docs/tutorials/images/topHat correction/topHatImage.jpg
similarity index 100%
rename from docs/Tutorials/images/topHat correction/topHatImage.jpg
rename to docs/tutorials/images/topHat correction/topHatImage.jpg
diff --git a/docs/Tutorials/images/topHat correction/topHatThreshMask.jpg b/docs/tutorials/images/topHat correction/topHatThreshMask.jpg
similarity index 100%
rename from docs/Tutorials/images/topHat correction/topHatThreshMask.jpg
rename to docs/tutorials/images/topHat correction/topHatThreshMask.jpg
diff --git a/docs/Tutorials/images/transformations/affine-transform.gif b/docs/tutorials/images/transformations/affine-transform.gif
similarity index 100%
rename from docs/Tutorials/images/transformations/affine-transform.gif
rename to docs/tutorials/images/transformations/affine-transform.gif
diff --git a/docs/Tutorials/images/transformations/buildings.jpg b/docs/tutorials/images/transformations/buildings.jpg
similarity index 100%
rename from docs/Tutorials/images/transformations/buildings.jpg
rename to docs/tutorials/images/transformations/buildings.jpg
diff --git a/docs/Tutorials/images/transformations/buildingsCorrected.png b/docs/tutorials/images/transformations/buildingsCorrected.png
similarity index 100%
rename from docs/Tutorials/images/transformations/buildingsCorrected.png
rename to docs/tutorials/images/transformations/buildingsCorrected.png
diff --git a/docs/Tutorials/images/transformations/buildingsPerspective.png b/docs/tutorials/images/transformations/buildingsPerspective.png
similarity index 100%
rename from docs/Tutorials/images/transformations/buildingsPerspective.png
rename to docs/tutorials/images/transformations/buildingsPerspective.png
diff --git a/docs/Tutorials/images/transformations/card-perspectiveWarp.png b/docs/tutorials/images/transformations/card-perspectiveWarp.png
similarity index 100%
rename from docs/Tutorials/images/transformations/card-perspectiveWarp.png
rename to docs/tutorials/images/transformations/card-perspectiveWarp.png
diff --git a/docs/Tutorials/images/transformations/card.png b/docs/tutorials/images/transformations/card.png
similarity index 100%
rename from docs/Tutorials/images/transformations/card.png
rename to docs/tutorials/images/transformations/card.png
diff --git a/docs/Tutorials/images/transformations/image.png b/docs/tutorials/images/transformations/image.png
similarity index 100%
rename from docs/Tutorials/images/transformations/image.png
rename to docs/tutorials/images/transformations/image.png
diff --git a/docs/Tutorials/images/transformations/lennaCombinedShear.png b/docs/tutorials/images/transformations/lennaCombinedShear.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaCombinedShear.png
rename to docs/tutorials/images/transformations/lennaCombinedShear.png
diff --git a/docs/Tutorials/images/transformations/lennaFlipped.png b/docs/tutorials/images/transformations/lennaFlipped.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaFlipped.png
rename to docs/tutorials/images/transformations/lennaFlipped.png
diff --git a/docs/Tutorials/images/transformations/lennaHorizontalShear.png b/docs/tutorials/images/transformations/lennaHorizontalShear.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaHorizontalShear.png
rename to docs/tutorials/images/transformations/lennaHorizontalShear.png
diff --git a/docs/Tutorials/images/transformations/lennaMirrorred.png b/docs/tutorials/images/transformations/lennaMirrorred.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaMirrorred.png
rename to docs/tutorials/images/transformations/lennaMirrorred.png
diff --git a/docs/Tutorials/images/transformations/lennaRotated.png b/docs/tutorials/images/transformations/lennaRotated.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaRotated.png
rename to docs/tutorials/images/transformations/lennaRotated.png
diff --git a/docs/Tutorials/images/transformations/lennaRotatedCenter.png b/docs/tutorials/images/transformations/lennaRotatedCenter.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaRotatedCenter.png
rename to docs/tutorials/images/transformations/lennaRotatedCenter.png
diff --git a/docs/Tutorials/images/transformations/lennaScaled.png b/docs/tutorials/images/transformations/lennaScaled.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaScaled.png
rename to docs/tutorials/images/transformations/lennaScaled.png
diff --git a/docs/Tutorials/images/transformations/lennaShrunk.png b/docs/tutorials/images/transformations/lennaShrunk.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaShrunk.png
rename to docs/tutorials/images/transformations/lennaShrunk.png
diff --git a/docs/Tutorials/images/transformations/lennaStretched.png b/docs/tutorials/images/transformations/lennaStretched.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaStretched.png
rename to docs/tutorials/images/transformations/lennaStretched.png
diff --git a/docs/Tutorials/images/transformations/lennaTranslated.png b/docs/tutorials/images/transformations/lennaTranslated.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaTranslated.png
rename to docs/tutorials/images/transformations/lennaTranslated.png
diff --git a/docs/Tutorials/images/transformations/lennaVerticalShear.png b/docs/tutorials/images/transformations/lennaVerticalShear.png
similarity index 100%
rename from docs/Tutorials/images/transformations/lennaVerticalShear.png
rename to docs/tutorials/images/transformations/lennaVerticalShear.png
diff --git a/docs/Tutorials/images/watershed/Blurs.png b/docs/tutorials/images/watershed/Blurs.png
similarity index 100%
rename from docs/Tutorials/images/watershed/Blurs.png
rename to docs/tutorials/images/watershed/Blurs.png
diff --git a/docs/Tutorials/images/watershed/Cross5LI.jpg b/docs/tutorials/images/watershed/Cross5LI.jpg
similarity index 100%
rename from docs/Tutorials/images/watershed/Cross5LI.jpg
rename to docs/tutorials/images/watershed/Cross5LI.jpg
diff --git a/docs/Tutorials/images/watershed/FilterExtrema.png b/docs/tutorials/images/watershed/FilterExtrema.png
similarity index 100%
rename from docs/Tutorials/images/watershed/FilterExtrema.png
rename to docs/tutorials/images/watershed/FilterExtrema.png
diff --git a/docs/Tutorials/images/watershed/ISODATATransformTest.png b/docs/tutorials/images/watershed/ISODATATransformTest.png
similarity index 100%
rename from docs/Tutorials/images/watershed/ISODATATransformTest.png
rename to docs/tutorials/images/watershed/ISODATATransformTest.png
diff --git a/docs/Tutorials/images/watershed/NoMaskExtrema.png b/docs/tutorials/images/watershed/NoMaskExtrema.png
similarity index 100%
rename from docs/Tutorials/images/watershed/NoMaskExtrema.png
rename to docs/tutorials/images/watershed/NoMaskExtrema.png
diff --git a/docs/Tutorials/images/watershed/OTSU.png b/docs/tutorials/images/watershed/OTSU.png
similarity index 100%
rename from docs/Tutorials/images/watershed/OTSU.png
rename to docs/tutorials/images/watershed/OTSU.png
diff --git a/docs/Tutorials/images/watershed/RawOTSU.png b/docs/tutorials/images/watershed/RawOTSU.png
similarity index 100%
rename from docs/Tutorials/images/watershed/RawOTSU.png
rename to docs/tutorials/images/watershed/RawOTSU.png
diff --git a/docs/Tutorials/images/watershed/WithMaskExtrema.png b/docs/tutorials/images/watershed/WithMaskExtrema.png
similarity index 100%
rename from docs/Tutorials/images/watershed/WithMaskExtrema.png
rename to docs/tutorials/images/watershed/WithMaskExtrema.png
diff --git a/docs/Tutorials/images/watershed/cross.svg b/docs/tutorials/images/watershed/cross.svg
similarity index 100%
rename from docs/Tutorials/images/watershed/cross.svg
rename to docs/tutorials/images/watershed/cross.svg
diff --git a/docs/Tutorials/images/watershed/extremaAlgos.png b/docs/tutorials/images/watershed/extremaAlgos.png
similarity index 100%
rename from docs/Tutorials/images/watershed/extremaAlgos.png
rename to docs/tutorials/images/watershed/extremaAlgos.png
diff --git a/docs/Tutorials/images/watershed/input.jpg b/docs/tutorials/images/watershed/input.jpg
similarity index 100%
rename from docs/Tutorials/images/watershed/input.jpg
rename to docs/tutorials/images/watershed/input.jpg
diff --git a/docs/Tutorials/images/watershed/maskCombo.png b/docs/tutorials/images/watershed/maskCombo.png
similarity index 100%
rename from docs/Tutorials/images/watershed/maskCombo.png
rename to docs/tutorials/images/watershed/maskCombo.png
diff --git a/docs/Tutorials/images/watershed/square.svg b/docs/tutorials/images/watershed/square.svg
similarity index 100%
rename from docs/Tutorials/images/watershed/square.svg
rename to docs/tutorials/images/watershed/square.svg
diff --git a/docs/Tutorials/images/watershed/star.svg b/docs/tutorials/images/watershed/star.svg
similarity index 100%
rename from docs/Tutorials/images/watershed/star.svg
rename to docs/tutorials/images/watershed/star.svg
diff --git a/docs/Tutorials/images/watershed/watershedSegmentation.png b/docs/tutorials/images/watershed/watershedSegmentation.png
similarity index 100%
rename from docs/Tutorials/images/watershed/watershedSegmentation.png
rename to docs/tutorials/images/watershed/watershedSegmentation.png
diff --git a/docs/Tutorials/ROI analysis.md b/docs/tutorials/roi-analysis.md
similarity index 96%
rename from docs/Tutorials/ROI analysis.md
rename to docs/tutorials/roi-analysis.md
index b765595f..f1a93970 100644
--- a/docs/Tutorials/ROI analysis.md
+++ b/docs/tutorials/roi-analysis.md
@@ -146,7 +146,7 @@ Like in previous example, we consider some regions not suited for analysis. One

-Now we need to distinguish washers from nuts. To do so, we will use the aspect ratio of [minimum bounding rectangle](../Features/Regions%20of%20interest/MBR.md 'internal link on mbr') (MBR). The MBR is the smallest rectangle that can fit our region. Its aspect ratio will help us deduce whether it is a hexagon or a circle.
+Now we need to distinguish washers from nuts. To do so, we will use the aspect ratio of [minimum bounding rectangle](../features/regions-of-interest/mbr.md 'internal link on mbr') (MBR). The MBR is the smallest rectangle that can fit our region. Its aspect ratio will help us deduce whether it is a hexagon or a circle.
So, we will add some additional conditions to sort our regions.
```ts
@@ -246,4 +246,4 @@ for (const roi of washersAndNuts) {
```
These are some of the basic elements of ROI analysis.
-However, this is just a fraction of tools that ImageJS possesses. There are other properties that you can discover more about in our [API features](../Features/Regions%20of%20interest/Regions%20of%20interest.md) section.
+However, this is just a fraction of tools that ImageJS possesses. There are other properties that you can discover more about in our [API features](../features/regions-of-interest/regions-of-interest.md) section.
diff --git a/docs/Tutorials/Tutorials.md b/docs/tutorials/tutorials.md
similarity index 82%
rename from docs/Tutorials/Tutorials.md
rename to docs/tutorials/tutorials.md
index da6889b6..744176fc 100644
--- a/docs/Tutorials/Tutorials.md
+++ b/docs/tutorials/tutorials.md
@@ -1,3 +1,5 @@
+# Tutorials
+
import DocCardList from '@theme/DocCardList';
diff --git a/docs/Useful tips/_category_.json b/docs/useful-tips/_category_.json
similarity index 100%
rename from docs/Useful tips/_category_.json
rename to docs/useful-tips/_category_.json
diff --git a/docs/Useful tips/Blurring techniques and their differences.md b/docs/useful-tips/blurring-techniques-and-their-differences.md
similarity index 95%
rename from docs/Useful tips/Blurring techniques and their differences.md
rename to docs/useful-tips/blurring-techniques-and-their-differences.md
index 4d4c782c..2ac507c4 100644
--- a/docs/Useful tips/Blurring techniques and their differences.md
+++ b/docs/useful-tips/blurring-techniques-and-their-differences.md
@@ -4,7 +4,7 @@ If you looked at some of our tutorials, you might have noticed that we apply a b
## Blur
-To be precise blur is a general term that refers to a reduction in the sharpness or clarity of an image. It also works to reduce some of the noise, such as [gaussian noise](https://en.wikipedia.org/wiki/Gaussian_noise#:~:text=In%20signal%20processing%20theory%2C%20Gaussian,can%20take%20are%20Gaussian%2Ddistributed. 'wikipedia link on gaussian noise') for example. In ImageJS blur is actually a box blur or mean blur. It is a filter that uses convolution matrix to calculate an average among the surrounding pixels which are within the transformation matrix ([kernel](../Glossary.md#kernel 'glossary link on kernel')) and then applies this value.
+To be precise blur is a general term that refers to a reduction in the sharpness or clarity of an image. It also works to reduce some of the noise, such as [gaussian noise](https://en.wikipedia.org/wiki/Gaussian_noise#:~:text=In%20signal%20processing%20theory%2C%20Gaussian,can%20take%20are%20Gaussian%2Ddistributed. 'wikipedia link on gaussian noise') for example. In ImageJS blur is actually a box blur or mean blur. It is a filter that uses convolution matrix to calculate an average among the surrounding pixels which are within the transformation matrix ([kernel](../glossary.md#kernel 'glossary link on kernel')) and then applies this value.

@@ -23,7 +23,7 @@ The idea is that the closer you are to the pixel in check, the more weight it wi
The main parameter of gaussian blur is called "sigma" and it is responsible for the width of the gaussian bell curve, therefore it controls the overall smoothness of the end result.
-Gaussian blur is a good preparatory tool for edge detection. Edge detection's algorithms are sensitive to noise and small details so blur smoothens them. For instance here is the example of a [Canny Edge detector](../Features/Morphology/Canny%20Edge%20Detector.md 'internal link on canny edge detector') with and without gaussian blur:
+Gaussian blur is a good preparatory tool for edge detection. Edge detection's algorithms are sensitive to noise and small details so blur smoothens them. For instance here is the example of a [Canny Edge detector](../features/morphology/canny-edge-detector.md 'internal link on canny edge detector') with and without gaussian blur:

diff --git a/docs/Useful tips/images/blurring/2D_Convolution_Animation.gif b/docs/useful-tips/images/blurring/2D_Convolution_Animation.gif
similarity index 100%
rename from docs/Useful tips/images/blurring/2D_Convolution_Animation.gif
rename to docs/useful-tips/images/blurring/2D_Convolution_Animation.gif
diff --git a/docs/Useful tips/images/blurring/MBvsGB.png b/docs/useful-tips/images/blurring/MBvsGB.png
similarity index 100%
rename from docs/Useful tips/images/blurring/MBvsGB.png
rename to docs/useful-tips/images/blurring/MBvsGB.png
diff --git a/docs/Useful tips/images/blurring/boxAndGaussianFunctions.png b/docs/useful-tips/images/blurring/boxAndGaussianFunctions.png
similarity index 100%
rename from docs/Useful tips/images/blurring/boxAndGaussianFunctions.png
rename to docs/useful-tips/images/blurring/boxAndGaussianFunctions.png
diff --git a/docs/Useful tips/images/blurring/edgesWithBlurs.png b/docs/useful-tips/images/blurring/edgesWithBlurs.png
similarity index 100%
rename from docs/Useful tips/images/blurring/edgesWithBlurs.png
rename to docs/useful-tips/images/blurring/edgesWithBlurs.png
diff --git a/docs/Useful tips/images/blurring/imgTest.jpg b/docs/useful-tips/images/blurring/imgTest.jpg
similarity index 100%
rename from docs/Useful tips/images/blurring/imgTest.jpg
rename to docs/useful-tips/images/blurring/imgTest.jpg
diff --git a/docs/Useful tips/images/blurring/isodataBlur.jpg b/docs/useful-tips/images/blurring/isodataBlur.jpg
similarity index 100%
rename from docs/Useful tips/images/blurring/isodataBlur.jpg
rename to docs/useful-tips/images/blurring/isodataBlur.jpg
diff --git a/docs/Useful tips/images/blurring/isodataNoBlur.jpg b/docs/useful-tips/images/blurring/isodataNoBlur.jpg
similarity index 100%
rename from docs/Useful tips/images/blurring/isodataNoBlur.jpg
rename to docs/useful-tips/images/blurring/isodataNoBlur.jpg
diff --git a/docs/Useful tips/images/blurring/lennaCED.png b/docs/useful-tips/images/blurring/lennaCED.png
similarity index 100%
rename from docs/Useful tips/images/blurring/lennaCED.png
rename to docs/useful-tips/images/blurring/lennaCED.png
diff --git a/docs/Useful tips/images/blurring/tigersBlur.png b/docs/useful-tips/images/blurring/tigersBlur.png
similarity index 100%
rename from docs/Useful tips/images/blurring/tigersBlur.png
rename to docs/useful-tips/images/blurring/tigersBlur.png
diff --git a/docs/Useful tips/Out-parameter and its purpose.md b/docs/useful-tips/out-parameter-and-its-purpose.md
similarity index 100%
rename from docs/Useful tips/Out-parameter and its purpose.md
rename to docs/useful-tips/out-parameter-and-its-purpose.md
diff --git a/docs/Useful tips/Plain call vs method call.md b/docs/useful-tips/plain-call-vs-method-call.md
similarity index 100%
rename from docs/Useful tips/Plain call vs method call.md
rename to docs/useful-tips/plain-call-vs-method-call.md
diff --git a/docs/Useful tips/Useful tips.md b/docs/useful-tips/useful-tips.md
similarity index 80%
rename from docs/Useful tips/Useful tips.md
rename to docs/useful-tips/useful-tips.md
index da6889b6..99b00b20 100644
--- a/docs/Useful tips/Useful tips.md
+++ b/docs/useful-tips/useful-tips.md
@@ -1,3 +1,5 @@
import DocCardList from '@theme/DocCardList';
+# Useful tips
+
diff --git a/docusaurus.config.js b/docusaurus.config.js
index ef537691..ef4d90c7 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -166,11 +166,11 @@ async function createConfig() {
},
{
label: 'Basics',
- to: '/docs/Basics',
+ to: '/docs/basics',
},
{
label: 'Features',
- to: '/docs/Features',
+ to: '/docs/features',
},
],
},
@@ -179,15 +179,15 @@ async function createConfig() {
items: [
{
label: 'Tutorials',
- to: '/docs/Tutorials',
+ to: '/docs/tutorials',
},
{
label: 'Useful tips',
- to: '/docs/Useful tips',
+ to: '/docs/useful-tips',
},
{
label: 'Glossary',
- to: '/docs/Glossary',
+ to: '/docs/glossary',
},
],
},
diff --git a/package-lock.json b/package-lock.json
index bcae2c43..b12cce09 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,15 +43,15 @@
}
},
"node_modules/@algolia/abtesting": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz",
- "integrity": "sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.2.0.tgz",
+ "integrity": "sha512-Z6Liq7US5CpdHExZLfPMBPxQHHUObV587kGvCLniLr1UTx0fGFIeGNWd005WIqQXqEda9GyAi7T2e7DUupVv0g==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -103,99 +103,99 @@
}
},
"node_modules/@algolia/client-abtesting": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz",
- "integrity": "sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.36.0.tgz",
+ "integrity": "sha512-uGr57O1UqDDeZHYXr1VnUomtdgQMxb6fS8yC/LXCMOn5ucN4k6FlcCRqXQnUyiiFZNG/rVK3zpRiyomq4JWXdQ==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-analytics": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz",
- "integrity": "sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.36.0.tgz",
+ "integrity": "sha512-/zrf0NMxcvBBQ4r9lIqM7rMt7oI7gY7bZ+bNcgpZAQMvzXbKJVla3MqKGuPC/bfOthKvAcAr0mCZ8/7GwBmkVw==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-common": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz",
- "integrity": "sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.36.0.tgz",
+ "integrity": "sha512-fDsg9w6xXWQyNkm/VfiWF2D9wnpTPv0fRVei7lWtz7cXJewhOmP1kKE2GaDTI4QDxVxgDkoPJ1+3UVMIzTcjjQ==",
"license": "MIT",
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-insights": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz",
- "integrity": "sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.36.0.tgz",
+ "integrity": "sha512-x6ZICyIN3BZjja47lqlMLG+AZwfx9wrYWttd6Daxp+wX/fFGxha6gdqxeoi5J44BmFqK8CUU4u8vpwHqGOCl4g==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-personalization": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz",
- "integrity": "sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.36.0.tgz",
+ "integrity": "sha512-gnH9VHrC+/9OuaumbgxNXzzEq1AY2j3tm00ymNXNz35T7RQ2AK/x4T5b2UnjOUJejuXaSJ88gFyPk3nM5OhJZQ==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-query-suggestions": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz",
- "integrity": "sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.36.0.tgz",
+ "integrity": "sha512-GkWIS+cAMoxsNPHEp3j7iywO9JJMVHVCWHzPPHFXIe0iNIOfsnZy5MqC1T9sifjqoU9b0GGbzzdxB3TEdwfiFA==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/client-search": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz",
- "integrity": "sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.36.0.tgz",
+ "integrity": "sha512-MLx32nSeDSNxfx28IfvwfHEfeo3AYe9JgEj0rLeYtJGmt0W30K6tCNokxhWGUUKrggQTH6H1lnohWsoj2OC2bw==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -208,81 +208,81 @@
"license": "MIT"
},
"node_modules/@algolia/ingestion": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz",
- "integrity": "sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==",
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.36.0.tgz",
+ "integrity": "sha512-6zmlPLCsyzShOsfs1G1uqxwLTojte3NLyukwyUmJFfa46DSq3wkIOE9hFtqAoV951dXp4sZd2KCFYJmgRjcYbA==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/monitoring": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz",
- "integrity": "sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==",
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.36.0.tgz",
+ "integrity": "sha512-SjJeDqlzAKJiWhquqfDWLEu5X/PIM+5KvUH65c4LBvt8T+USOVJbijtzA9UHZ1eUIfFSDBmbzEH0YvlS6Di2mg==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/recommend": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz",
- "integrity": "sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.36.0.tgz",
+ "integrity": "sha512-FalJm3h9fwoZZpkkMpA0r4Grcvjk32FzmC4CXvlpyF/gBvu6pXE01yygjJBU20zGVLGsXU+Ad8nYPf+oGD7Zkg==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "@algolia/client-common": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-browser-xhr": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz",
- "integrity": "sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.36.0.tgz",
+ "integrity": "sha512-weE9SImWIDmQrfGLb1pSPEfP3mioKQ84GaQRpUmjFxlxG/4nW2bSsmkV+kNp1s+iomL2gnxFknSmcQuuAy+kPA==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0"
+ "@algolia/client-common": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-fetch": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz",
- "integrity": "sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.36.0.tgz",
+ "integrity": "sha512-zGPI2sgzvOwCHTVMmDvc301iirOKCtJ+Egh+HQB/+DG0zTGUT1DpdwQVT25A7Yin/twnO8CkFpI/S+74FVYNjg==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0"
+ "@algolia/client-common": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/@algolia/requester-node-http": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz",
- "integrity": "sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==",
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.36.0.tgz",
+ "integrity": "sha512-dNbBGE/O6VG/6vFhv3CFm5za4rubAVrhQf/ef0YWiDqPMmalPxGEzIijw4xV1mU1JmX2ffyp/x8Kdtz24sDkOQ==",
"license": "MIT",
"dependencies": {
- "@algolia/client-common": "5.35.0"
+ "@algolia/client-common": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -2176,9 +2176,9 @@
"license": "MIT"
},
"node_modules/@cspell/dict-cpp": {
- "version": "6.0.9",
- "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.9.tgz",
- "integrity": "sha512-Xdq9MwGh0D5rsnbOqFW24NIClXXRhN11KJdySMibpcqYGeomxB2ODFBuhj1H7azO7kVGkGH0Okm4yQ2TRzBx0g==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.10.tgz",
+ "integrity": "sha512-VyD8o7kUH2R9Ep/KXRoFy97QJn8qVW6wcQUfGVowNkc/Ux9o3gZlWlQwpzoyhTrg9uHKzKp5aL25eE7e5K1v1g==",
"dev": true,
"license": "MIT"
},
@@ -2623,9 +2623,9 @@
}
},
"node_modules/@csstools/color-helpers": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
- "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
+ "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
"funding": [
{
"type": "github",
@@ -2665,9 +2665,9 @@
}
},
"node_modules/@csstools/css-color-parser": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz",
- "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
+ "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
"funding": [
{
"type": "github",
@@ -2680,7 +2680,7 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/color-helpers": "^5.0.2",
+ "@csstools/color-helpers": "^5.1.0",
"@csstools/css-calc": "^2.1.4"
},
"engines": {
@@ -2755,6 +2755,35 @@
"@csstools/css-tokenizer": "^3.0.4"
}
},
+ "node_modules/@csstools/postcss-alpha-function": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.0.tgz",
+ "integrity": "sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "dependencies": {
+ "@csstools/css-color-parser": "^3.1.0",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
+ "@csstools/utilities": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4"
+ }
+ },
"node_modules/@csstools/postcss-cascade-layers": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz",
@@ -2817,9 +2846,9 @@
}
},
"node_modules/@csstools/postcss-color-function": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz",
- "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.11.tgz",
+ "integrity": "sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw==",
"funding": [
{
"type": "github",
@@ -2832,10 +2861,39 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
+ "@csstools/utilities": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4"
+ }
+ },
+ "node_modules/@csstools/postcss-color-function-display-p3-linear": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.0.tgz",
+ "integrity": "sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "dependencies": {
+ "@csstools/css-color-parser": "^3.1.0",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -2846,9 +2904,9 @@
}
},
"node_modules/@csstools/postcss-color-mix-function": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz",
- "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==",
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.11.tgz",
+ "integrity": "sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q==",
"funding": [
{
"type": "github",
@@ -2861,10 +2919,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -2875,9 +2933,9 @@
}
},
"node_modules/@csstools/postcss-color-mix-variadic-function-arguments": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz",
- "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.1.tgz",
+ "integrity": "sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg==",
"funding": [
{
"type": "github",
@@ -2890,10 +2948,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -2904,9 +2962,9 @@
}
},
"node_modules/@csstools/postcss-content-alt-text": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz",
- "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.7.tgz",
+ "integrity": "sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ==",
"funding": [
{
"type": "github",
@@ -2921,7 +2979,7 @@
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -2985,9 +3043,9 @@
}
},
"node_modules/@csstools/postcss-gamut-mapping": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz",
- "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz",
+ "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==",
"funding": [
{
"type": "github",
@@ -3000,7 +3058,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4"
},
@@ -3012,9 +3070,9 @@
}
},
"node_modules/@csstools/postcss-gradients-interpolation-method": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz",
- "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==",
+ "version": "5.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.11.tgz",
+ "integrity": "sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug==",
"funding": [
{
"type": "github",
@@ -3027,10 +3085,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -3041,9 +3099,9 @@
}
},
"node_modules/@csstools/postcss-hwb-function": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz",
- "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.11.tgz",
+ "integrity": "sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA==",
"funding": [
{
"type": "github",
@@ -3056,10 +3114,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -3070,9 +3128,9 @@
}
},
"node_modules/@csstools/postcss-ic-unit": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz",
- "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.3.tgz",
+ "integrity": "sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q==",
"funding": [
{
"type": "github",
@@ -3085,7 +3143,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
},
@@ -3180,9 +3238,9 @@
}
},
"node_modules/@csstools/postcss-light-dark-function": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz",
- "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==",
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.10.tgz",
+ "integrity": "sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw==",
"funding": [
{
"type": "github",
@@ -3197,7 +3255,7 @@
"dependencies": {
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -3431,9 +3489,9 @@
}
},
"node_modules/@csstools/postcss-oklab-function": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz",
- "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.11.tgz",
+ "integrity": "sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==",
"funding": [
{
"type": "github",
@@ -3446,10 +3504,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -3460,9 +3518,9 @@
}
},
"node_modules/@csstools/postcss-progressive-custom-properties": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz",
- "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.0.tgz",
+ "integrity": "sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==",
"funding": [
{
"type": "github",
@@ -3512,9 +3570,9 @@
}
},
"node_modules/@csstools/postcss-relative-color-syntax": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz",
- "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==",
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.11.tgz",
+ "integrity": "sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng==",
"funding": [
{
"type": "github",
@@ -3527,10 +3585,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -3633,9 +3691,9 @@
}
},
"node_modules/@csstools/postcss-text-decoration-shorthand": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz",
- "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz",
+ "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==",
"funding": [
{
"type": "github",
@@ -3648,7 +3706,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/color-helpers": "^5.0.2",
+ "@csstools/color-helpers": "^5.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -3739,19 +3797,6 @@
"@docusaurus/utils-validation": "3.8.0"
}
},
- "node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/@docusaurus/logger": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz",
- "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.2",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
"node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/@docusaurus/types": {
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz",
@@ -3773,70 +3818,6 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
- "node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/@docusaurus/utils": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz",
- "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/logger": "3.8.0",
- "@docusaurus/types": "3.8.0",
- "@docusaurus/utils-common": "3.8.0",
- "escape-string-regexp": "^4.0.0",
- "execa": "5.1.1",
- "file-loader": "^6.2.0",
- "fs-extra": "^11.1.1",
- "github-slugger": "^1.5.0",
- "globby": "^11.1.0",
- "gray-matter": "^4.0.3",
- "jiti": "^1.20.0",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21",
- "micromatch": "^4.0.5",
- "p-queue": "^6.6.2",
- "prompts": "^2.4.2",
- "resolve-pathname": "^3.0.0",
- "tslib": "^2.6.0",
- "url-loader": "^4.1.1",
- "utility-types": "^3.10.0",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/@docusaurus/utils-common": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz",
- "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/types": "3.8.0",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/@docusaurus/utils-validation": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz",
- "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/logger": "3.8.0",
- "@docusaurus/utils": "3.8.0",
- "@docusaurus/utils-common": "3.8.0",
- "fs-extra": "^11.2.0",
- "joi": "^17.9.2",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
"node_modules/@dipakparmar/docusaurus-plugin-umami/node_modules/webpack-merge": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
@@ -4028,6 +4009,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/core/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/cssnano-preset": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz",
@@ -4095,6 +4095,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/mdx-loader/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/module-type-aliases": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz",
@@ -4148,6 +4167,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-content-docs": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz",
@@ -4181,6 +4219,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-content-pages": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz",
@@ -4204,6 +4261,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-css-cascade-layers": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz",
@@ -4220,6 +4296,25 @@
"node": ">=18.0"
}
},
+ "node_modules/@docusaurus/plugin-css-cascade-layers/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-debug": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz",
@@ -4260,6 +4355,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-google-gtag": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz",
@@ -4280,6 +4394,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-google-tag-manager": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz",
@@ -4299,6 +4432,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-sitemap": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz",
@@ -4323,6 +4475,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/plugin-svgr": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz",
@@ -4346,6 +4517,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/plugin-svgr/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/preset-classic": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz",
@@ -4417,6 +4607,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/theme-common": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz",
@@ -4476,6 +4685,25 @@
"react-dom": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@docusaurus/theme-search-algolia/node_modules/@docusaurus/utils-validation": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
+ "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.1",
+ "@docusaurus/utils": "3.8.1",
+ "@docusaurus/utils-common": "3.8.1",
+ "fs-extra": "^11.2.0",
+ "joi": "^17.9.2",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
"node_modules/@docusaurus/theme-translations": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz",
@@ -4577,14 +4805,14 @@
}
},
"node_modules/@docusaurus/utils-validation": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz",
- "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz",
+ "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==",
"license": "MIT",
"dependencies": {
- "@docusaurus/logger": "3.8.1",
- "@docusaurus/utils": "3.8.1",
- "@docusaurus/utils-common": "3.8.1",
+ "@docusaurus/logger": "3.8.0",
+ "@docusaurus/utils": "3.8.0",
+ "@docusaurus/utils-common": "3.8.0",
"fs-extra": "^11.2.0",
"joi": "^17.9.2",
"js-yaml": "^4.1.0",
@@ -4595,18 +4823,111 @@
"node": ">=18.0"
}
},
+ "node_modules/@docusaurus/utils-validation/node_modules/@docusaurus/logger": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz",
+ "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
+ "node_modules/@docusaurus/utils-validation/node_modules/@docusaurus/types": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz",
+ "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==",
+ "license": "MIT",
+ "dependencies": {
+ "@mdx-js/mdx": "^3.0.0",
+ "@types/history": "^4.7.11",
+ "@types/react": "*",
+ "commander": "^5.1.0",
+ "joi": "^17.9.2",
+ "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0",
+ "utility-types": "^3.10.0",
+ "webpack": "^5.95.0",
+ "webpack-merge": "^5.9.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@docusaurus/utils-validation/node_modules/@docusaurus/utils": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz",
+ "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/logger": "3.8.0",
+ "@docusaurus/types": "3.8.0",
+ "@docusaurus/utils-common": "3.8.0",
+ "escape-string-regexp": "^4.0.0",
+ "execa": "5.1.1",
+ "file-loader": "^6.2.0",
+ "fs-extra": "^11.1.1",
+ "github-slugger": "^1.5.0",
+ "globby": "^11.1.0",
+ "gray-matter": "^4.0.3",
+ "jiti": "^1.20.0",
+ "js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
+ "micromatch": "^4.0.5",
+ "p-queue": "^6.6.2",
+ "prompts": "^2.4.2",
+ "resolve-pathname": "^3.0.0",
+ "tslib": "^2.6.0",
+ "url-loader": "^4.1.1",
+ "utility-types": "^3.10.0",
+ "webpack": "^5.88.1"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
+ "node_modules/@docusaurus/utils-validation/node_modules/@docusaurus/utils-common": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz",
+ "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/types": "3.8.0",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=18.0"
+ }
+ },
+ "node_modules/@docusaurus/utils-validation/node_modules/webpack-merge": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+ "license": "MIT",
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "flat": "^5.0.2",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.52.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.52.0.tgz",
- "integrity": "sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==",
+ "version": "0.53.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.53.0.tgz",
+ "integrity": "sha512-Wyed8Wfn3vMNVwrZrgLMxmqwmlcCE1/RfUAOHFzMJb3QLH03mi9Yv1iOCZjif0yx5EZUeJ+17VD1MHPka9IQjQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "^1.0.8",
- "@typescript-eslint/types": "^8.34.1",
+ "@typescript-eslint/types": "^8.39.1",
"comment-parser": "1.4.1",
"esquery": "^1.6.0",
- "jsdoc-type-pratt-parser": "~4.1.0"
+ "jsdoc-type-pratt-parser": "~4.8.0"
},
"engines": {
"node": ">=20.11.0"
@@ -4693,13 +5014,13 @@
}
},
"node_modules/@eslint/css-tree": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.3.tgz",
- "integrity": "sha512-M9iq4Brt/MG+5/B4Jrla5XZqaCgaHjfZyMSUJM3KNpBU61u8gMYg4TTaNTP/mUGR/rnRrVV7RXmh5qI4pIk0Yw==",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.5.tgz",
+ "integrity": "sha512-bJgnXu0D0K1BbfPfHTmCaJe2ucBOjeg/tG37H2CSqYCw51VMmBtPfWrH8LKPLAVCOp0h94e1n8PfR3v9iRbtyA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "mdn-data": "2.21.0",
+ "mdn-data": "2.23.0",
"source-map-js": "^1.0.1"
},
"engines": {
@@ -4731,9 +5052,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.33.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz",
- "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==",
+ "version": "9.34.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz",
+ "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5680,9 +6001,9 @@
}
},
"node_modules/@types/node-forge": {
- "version": "1.3.13",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz",
- "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz",
+ "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
@@ -5713,9 +6034,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "19.1.10",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz",
- "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==",
+ "version": "19.1.12",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
+ "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"license": "MIT",
"dependencies": {
"csstype": "^3.0.2"
@@ -5838,17 +6159,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz",
- "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz",
+ "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.40.0",
- "@typescript-eslint/type-utils": "8.40.0",
- "@typescript-eslint/utils": "8.40.0",
- "@typescript-eslint/visitor-keys": "8.40.0",
+ "@typescript-eslint/scope-manager": "8.41.0",
+ "@typescript-eslint/type-utils": "8.41.0",
+ "@typescript-eslint/utils": "8.41.0",
+ "@typescript-eslint/visitor-keys": "8.41.0",
"graphemer": "^1.4.0",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
@@ -5862,7 +6183,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.40.0",
+ "@typescript-eslint/parser": "^8.41.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -5878,16 +6199,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz",
- "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz",
+ "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.40.0",
- "@typescript-eslint/types": "8.40.0",
- "@typescript-eslint/typescript-estree": "8.40.0",
- "@typescript-eslint/visitor-keys": "8.40.0",
+ "@typescript-eslint/scope-manager": "8.41.0",
+ "@typescript-eslint/types": "8.41.0",
+ "@typescript-eslint/typescript-estree": "8.41.0",
+ "@typescript-eslint/visitor-keys": "8.41.0",
"debug": "^4.3.4"
},
"engines": {
@@ -5903,14 +6224,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz",
- "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz",
+ "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.40.0",
- "@typescript-eslint/types": "^8.40.0",
+ "@typescript-eslint/tsconfig-utils": "^8.41.0",
+ "@typescript-eslint/types": "^8.41.0",
"debug": "^4.3.4"
},
"engines": {
@@ -5925,14 +6246,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz",
- "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz",
+ "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.40.0",
- "@typescript-eslint/visitor-keys": "8.40.0"
+ "@typescript-eslint/types": "8.41.0",
+ "@typescript-eslint/visitor-keys": "8.41.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5943,9 +6264,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz",
- "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz",
+ "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5960,15 +6281,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz",
- "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz",
+ "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.40.0",
- "@typescript-eslint/typescript-estree": "8.40.0",
- "@typescript-eslint/utils": "8.40.0",
+ "@typescript-eslint/types": "8.41.0",
+ "@typescript-eslint/typescript-estree": "8.41.0",
+ "@typescript-eslint/utils": "8.41.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -5985,9 +6306,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz",
- "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz",
+ "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5999,16 +6320,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz",
- "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz",
+ "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.40.0",
- "@typescript-eslint/tsconfig-utils": "8.40.0",
- "@typescript-eslint/types": "8.40.0",
- "@typescript-eslint/visitor-keys": "8.40.0",
+ "@typescript-eslint/project-service": "8.41.0",
+ "@typescript-eslint/tsconfig-utils": "8.41.0",
+ "@typescript-eslint/types": "8.41.0",
+ "@typescript-eslint/visitor-keys": "8.41.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -6054,16 +6375,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz",
- "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz",
+ "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.40.0",
- "@typescript-eslint/types": "8.40.0",
- "@typescript-eslint/typescript-estree": "8.40.0"
+ "@typescript-eslint/scope-manager": "8.41.0",
+ "@typescript-eslint/types": "8.41.0",
+ "@typescript-eslint/typescript-estree": "8.41.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6078,13 +6399,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz",
- "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz",
+ "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.40.0",
+ "@typescript-eslint/types": "8.41.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -6466,25 +6787,25 @@
}
},
"node_modules/algoliasearch": {
- "version": "5.35.0",
- "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz",
- "integrity": "sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==",
- "license": "MIT",
- "dependencies": {
- "@algolia/abtesting": "1.1.0",
- "@algolia/client-abtesting": "5.35.0",
- "@algolia/client-analytics": "5.35.0",
- "@algolia/client-common": "5.35.0",
- "@algolia/client-insights": "5.35.0",
- "@algolia/client-personalization": "5.35.0",
- "@algolia/client-query-suggestions": "5.35.0",
- "@algolia/client-search": "5.35.0",
- "@algolia/ingestion": "1.35.0",
- "@algolia/monitoring": "1.35.0",
- "@algolia/recommend": "5.35.0",
- "@algolia/requester-browser-xhr": "5.35.0",
- "@algolia/requester-fetch": "5.35.0",
- "@algolia/requester-node-http": "5.35.0"
+ "version": "5.36.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.36.0.tgz",
+ "integrity": "sha512-FpwQ+p4x4RIsWnPj2z9idOC70T90ga7Oeh8BURSFKpqp5lITRsgkIj/bwYj2bY5xbyD7uBuP9AZRnM5EV20WOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/abtesting": "1.2.0",
+ "@algolia/client-abtesting": "5.36.0",
+ "@algolia/client-analytics": "5.36.0",
+ "@algolia/client-common": "5.36.0",
+ "@algolia/client-insights": "5.36.0",
+ "@algolia/client-personalization": "5.36.0",
+ "@algolia/client-query-suggestions": "5.36.0",
+ "@algolia/client-search": "5.36.0",
+ "@algolia/ingestion": "1.36.0",
+ "@algolia/monitoring": "1.36.0",
+ "@algolia/recommend": "5.36.0",
+ "@algolia/requester-browser-xhr": "5.36.0",
+ "@algolia/requester-fetch": "5.36.0",
+ "@algolia/requester-node-http": "5.36.0"
},
"engines": {
"node": ">= 14.0.0"
@@ -7121,9 +7442,9 @@
"license": "MIT"
},
"node_modules/browserslist": {
- "version": "4.25.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz",
- "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==",
+ "version": "4.25.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz",
+ "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==",
"funding": [
{
"type": "opencollective",
@@ -7140,8 +7461,8 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001735",
- "electron-to-chromium": "^1.5.204",
+ "caniuse-lite": "^1.0.30001737",
+ "electron-to-chromium": "^1.5.211",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@@ -7298,9 +7619,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001735",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
- "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
+ "version": "1.0.30001737",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz",
+ "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==",
"funding": [
{
"type": "opencollective",
@@ -8015,9 +8336,9 @@
}
},
"node_modules/core-js": {
- "version": "3.45.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz",
- "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.1.tgz",
+ "integrity": "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -8026,12 +8347,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.45.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.0.tgz",
- "integrity": "sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz",
+ "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.25.1"
+ "browserslist": "^4.25.3"
},
"funding": {
"type": "opencollective",
@@ -8039,9 +8360,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.45.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.0.tgz",
- "integrity": "sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz",
+ "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -8392,9 +8713,9 @@
}
},
"node_modules/css-has-pseudo": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz",
- "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz",
+ "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==",
"funding": [
{
"type": "github",
@@ -9203,9 +9524,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.207",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz",
- "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==",
+ "version": "1.5.211",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz",
+ "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==",
"license": "ISC"
},
"node_modules/emoji-regex": {
@@ -9547,9 +9868,9 @@
}
},
"node_modules/eslint": {
- "version": "9.33.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz",
- "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==",
+ "version": "9.34.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz",
+ "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9559,7 +9880,7 @@
"@eslint/config-helpers": "^0.3.1",
"@eslint/core": "^0.15.2",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.33.0",
+ "@eslint/js": "9.34.0",
"@eslint/plugin-kit": "^0.3.5",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -9608,15 +9929,15 @@
}
},
"node_modules/eslint-config-cheminfo": {
- "version": "15.0.1",
- "resolved": "https://registry.npmjs.org/eslint-config-cheminfo/-/eslint-config-cheminfo-15.0.1.tgz",
- "integrity": "sha512-Bl4LizcVW2ybURIHz4fROj/rcyVQnsJreaUBH6aD8RvpoZxbL8wuDMp/DcwaaYR10RTt/MV8TPYkncRbTpa1Mg==",
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-cheminfo/-/eslint-config-cheminfo-15.0.2.tgz",
+ "integrity": "sha512-us7nQ92wT4tOsr3voBdBKtw2dhwZOcVTKvSWGLOqwrKo+u+smu5HHHfE2KGAZi/X4dHOiDHwCQtbq7d2AV+MhA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/eslint-plugin": "^1.3.4",
"eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jsdoc": "^51.4.1",
+ "eslint-plugin-jsdoc": "^54.1.1",
"eslint-plugin-unicorn": "^60.0.0",
"globals": "^16.3.0"
},
@@ -9764,13 +10085,13 @@
}
},
"node_modules/eslint-plugin-better-tailwindcss": {
- "version": "3.7.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-better-tailwindcss/-/eslint-plugin-better-tailwindcss-3.7.5.tgz",
- "integrity": "sha512-O6xqnXe7hCMMBecFHVmSUg3oER/Olt0EAiAxe6V7MfLG2Kys3MC56RAbgfv0tIRE0xiL7AoYydlxQ1iIMU8qKQ==",
+ "version": "3.7.6",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-better-tailwindcss/-/eslint-plugin-better-tailwindcss-3.7.6.tgz",
+ "integrity": "sha512-sdg5vm968liqk/qJAzXSBPlOdSs0sRkajiOoRrXoYRkvAqXG/80Rd7ibgEXtw+C7QZoQ2pvjEqzR+hEuzrUJvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint/css-tree": "^3.6.3",
+ "@eslint/css-tree": "^3.6.5",
"enhanced-resolve": "^5.18.3",
"jiti": "^2.5.1",
"postcss": "^8.5.6",
@@ -9852,13 +10173,13 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "51.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz",
- "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==",
+ "version": "54.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-54.1.1.tgz",
+ "integrity": "sha512-qoY2Gl0OkvATXIxRaG2irS2ue78+RTaOyYrADvg1ue+9FHE+2Mp7RcpO0epkuhhQgOkH/REv1oJFe58dYv8SGg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@es-joy/jsdoccomment": "~0.52.0",
+ "@es-joy/jsdoccomment": "~0.53.0",
"are-docs-informative": "^0.0.2",
"comment-parser": "1.4.1",
"debug": "^4.4.1",
@@ -9941,9 +10262,9 @@
}
},
"node_modules/eslint-plugin-react-you-might-not-need-an-effect": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-you-might-not-need-an-effect/-/eslint-plugin-react-you-might-not-need-an-effect-0.4.2.tgz",
- "integrity": "sha512-3J/bJ5PPK0IgR034XyGPdhjfAFDCdZnJ5VvrANvwhFk2BhML5XkuekL8JjbngkTXCRbiq2iXdH3GuIUEokD7AA==",
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-you-might-not-need-an-effect/-/eslint-plugin-react-you-might-not-need-an-effect-0.4.4.tgz",
+ "integrity": "sha512-NaD3bnTUSVZ74YmK+V4tI6Ktl8GCeQFeU/5Xqw2R9pfd5NmenmQpatUGrinLavLYJCqyl7BG9WYU1JbpqUhhgg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9954,7 +10275,7 @@
"node": ">=14.0.0"
},
"peerDependencies": {
- "eslint": ">=7.0.0"
+ "eslint": ">=8.40.0"
}
},
"node_modules/eslint-plugin-react-you-might-not-need-an-effect/node_modules/globals": {
@@ -10549,9 +10870,9 @@
}
},
"node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"funding": [
{
"type": "github",
@@ -13123,9 +13444,9 @@
}
},
"node_modules/jsdoc-type-pratt-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
- "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz",
+ "integrity": "sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13902,9 +14223,9 @@
}
},
"node_modules/mdn-data": {
- "version": "2.21.0",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz",
- "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==",
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.23.0.tgz",
+ "integrity": "sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==",
"dev": true,
"license": "CC0-1.0"
},
@@ -16071,9 +16392,9 @@
}
},
"node_modules/ml-spectra-processing": {
- "version": "14.17.0",
- "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.17.0.tgz",
- "integrity": "sha512-IsegYLe16LCsRvwXdhOG0Y/6gYb9JU5rbLMMEI2OZSzcGQpGG6XAq2WE3IAkfWiRE2dCm4w3jzYWZlIJbCy1MA==",
+ "version": "14.17.1",
+ "resolved": "https://registry.npmjs.org/ml-spectra-processing/-/ml-spectra-processing-14.17.1.tgz",
+ "integrity": "sha512-ff2K8Nb91I5fSYcRRiHH0RvUIX1nC4TGg/ctbbyf6R7SUR5MgKF5Kicj+w1HACCK4DQ1HvSc2ZHVE2Z1NDvCRQ==",
"license": "MIT",
"dependencies": {
"binary-search": "^1.3.6",
@@ -17123,9 +17444,9 @@
}
},
"node_modules/postcss-color-functional-notation": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz",
- "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==",
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.11.tgz",
+ "integrity": "sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg==",
"funding": [
{
"type": "github",
@@ -17138,10 +17459,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -17437,9 +17758,9 @@
}
},
"node_modules/postcss-double-position-gradients": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz",
- "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.3.tgz",
+ "integrity": "sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug==",
"funding": [
{
"type": "github",
@@ -17452,7 +17773,7 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0",
"postcss-value-parser": "^4.2.0"
},
@@ -17615,9 +17936,9 @@
}
},
"node_modules/postcss-lab-function": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz",
- "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==",
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.11.tgz",
+ "integrity": "sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ==",
"funding": [
{
"type": "github",
@@ -17630,10 +17951,10 @@
],
"license": "MIT-0",
"dependencies": {
- "@csstools/css-color-parser": "^3.0.10",
+ "@csstools/css-color-parser": "^3.1.0",
"@csstools/css-parser-algorithms": "^3.0.5",
"@csstools/css-tokenizer": "^3.0.4",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/utilities": "^2.0.0"
},
"engines": {
@@ -18204,9 +18525,9 @@
}
},
"node_modules/postcss-preset-env": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz",
- "integrity": "sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==",
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.3.1.tgz",
+ "integrity": "sha512-8ZOOWVwQ0iMpfEYkYo+U6W7fE2dJ/tP6dtEFwPJ66eB5JjnFupfYh+y6zo+vWDO72nGhKOVdxwhTjfzcSNRg4Q==",
"funding": [
{
"type": "github",
@@ -18219,20 +18540,22 @@
],
"license": "MIT-0",
"dependencies": {
+ "@csstools/postcss-alpha-function": "^1.0.0",
"@csstools/postcss-cascade-layers": "^5.0.2",
- "@csstools/postcss-color-function": "^4.0.10",
- "@csstools/postcss-color-mix-function": "^3.0.10",
- "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0",
- "@csstools/postcss-content-alt-text": "^2.0.6",
+ "@csstools/postcss-color-function": "^4.0.11",
+ "@csstools/postcss-color-function-display-p3-linear": "^1.0.0",
+ "@csstools/postcss-color-mix-function": "^3.0.11",
+ "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.1",
+ "@csstools/postcss-content-alt-text": "^2.0.7",
"@csstools/postcss-exponential-functions": "^2.0.9",
"@csstools/postcss-font-format-keywords": "^4.0.0",
- "@csstools/postcss-gamut-mapping": "^2.0.10",
- "@csstools/postcss-gradients-interpolation-method": "^5.0.10",
- "@csstools/postcss-hwb-function": "^4.0.10",
- "@csstools/postcss-ic-unit": "^4.0.2",
+ "@csstools/postcss-gamut-mapping": "^2.0.11",
+ "@csstools/postcss-gradients-interpolation-method": "^5.0.11",
+ "@csstools/postcss-hwb-function": "^4.0.11",
+ "@csstools/postcss-ic-unit": "^4.0.3",
"@csstools/postcss-initial": "^2.0.1",
"@csstools/postcss-is-pseudo-class": "^5.0.3",
- "@csstools/postcss-light-dark-function": "^2.0.9",
+ "@csstools/postcss-light-dark-function": "^2.0.10",
"@csstools/postcss-logical-float-and-clear": "^3.0.0",
"@csstools/postcss-logical-overflow": "^2.0.0",
"@csstools/postcss-logical-overscroll-behavior": "^2.0.0",
@@ -18242,38 +18565,38 @@
"@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5",
"@csstools/postcss-nested-calc": "^4.0.0",
"@csstools/postcss-normalize-display-values": "^4.0.0",
- "@csstools/postcss-oklab-function": "^4.0.10",
- "@csstools/postcss-progressive-custom-properties": "^4.1.0",
+ "@csstools/postcss-oklab-function": "^4.0.11",
+ "@csstools/postcss-progressive-custom-properties": "^4.2.0",
"@csstools/postcss-random-function": "^2.0.1",
- "@csstools/postcss-relative-color-syntax": "^3.0.10",
+ "@csstools/postcss-relative-color-syntax": "^3.0.11",
"@csstools/postcss-scope-pseudo-class": "^4.0.1",
"@csstools/postcss-sign-functions": "^1.1.4",
"@csstools/postcss-stepped-value-functions": "^4.0.9",
- "@csstools/postcss-text-decoration-shorthand": "^4.0.2",
+ "@csstools/postcss-text-decoration-shorthand": "^4.0.3",
"@csstools/postcss-trigonometric-functions": "^4.0.9",
"@csstools/postcss-unset-value": "^4.0.0",
"autoprefixer": "^10.4.21",
- "browserslist": "^4.25.0",
+ "browserslist": "^4.25.1",
"css-blank-pseudo": "^7.0.1",
- "css-has-pseudo": "^7.0.2",
+ "css-has-pseudo": "^7.0.3",
"css-prefers-color-scheme": "^10.0.0",
- "cssdb": "^8.3.0",
+ "cssdb": "^8.4.0",
"postcss-attribute-case-insensitive": "^7.0.1",
"postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^7.0.10",
+ "postcss-color-functional-notation": "^7.0.11",
"postcss-color-hex-alpha": "^10.0.0",
"postcss-color-rebeccapurple": "^10.0.0",
"postcss-custom-media": "^11.0.6",
"postcss-custom-properties": "^14.0.6",
"postcss-custom-selectors": "^8.0.5",
"postcss-dir-pseudo-class": "^9.0.1",
- "postcss-double-position-gradients": "^6.0.2",
+ "postcss-double-position-gradients": "^6.0.3",
"postcss-focus-visible": "^10.0.1",
"postcss-focus-within": "^9.0.1",
"postcss-font-variant": "^5.0.0",
"postcss-gap-properties": "^6.0.0",
"postcss-image-set-function": "^7.0.0",
- "postcss-lab-function": "^7.0.10",
+ "postcss-lab-function": "^7.0.11",
"postcss-logical": "^8.1.0",
"postcss-nesting": "^13.0.2",
"postcss-opacity-percentage": "^3.0.0",
@@ -21005,12 +21328,16 @@
"peer": true
},
"node_modules/tapable": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
- "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz",
+ "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==",
"license": "MIT",
"engines": {
"node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/terser": {
@@ -21499,16 +21826,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.40.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.40.0.tgz",
- "integrity": "sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==",
+ "version": "8.41.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.41.0.tgz",
+ "integrity": "sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.40.0",
- "@typescript-eslint/parser": "8.40.0",
- "@typescript-eslint/typescript-estree": "8.40.0",
- "@typescript-eslint/utils": "8.40.0"
+ "@typescript-eslint/eslint-plugin": "8.41.0",
+ "@typescript-eslint/parser": "8.41.0",
+ "@typescript-eslint/typescript-estree": "8.41.0",
+ "@typescript-eslint/utils": "8.41.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
diff --git a/package.json b/package.json
index 7b38ae9b..488237fb 100644
--- a/package.json
+++ b/package.json
@@ -15,9 +15,10 @@
"dev": "docusaurus start",
"swizzle": "docusaurus swizzle",
"check-types": "tsc",
- "test": "npm run prettier && npm run eslint && npm run check-types",
+ "test": "npm run check-filenames && npm run prettier && npm run eslint && npm run check-types",
"write-heading-ids": "docusaurus write-heading-ids",
- "write-translations": "docusaurus write-translations"
+ "write-translations": "docusaurus write-translations",
+ "check-filenames": "node checkFilenames.mjs"
},
"dependencies": {
"@dipakparmar/docusaurus-plugin-umami": "^2.3.0",
diff --git a/static/img/social-card-new.svg b/static/img/social-card-new.svg
new file mode 100644
index 00000000..53f0e80d
--- /dev/null
+++ b/static/img/social-card-new.svg
@@ -0,0 +1,286 @@
+
+
+
+
diff --git a/static/img/social-card-test.svg b/static/img/social-card-test.svg
new file mode 100644
index 00000000..89e28ebe
--- /dev/null
+++ b/static/img/social-card-test.svg
@@ -0,0 +1,168 @@
+
+
+
+