iconograph-ui 1.2.25 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +3 -0
  2. package/example/.dockerignore +3 -0
  3. package/example/Dockerfile +17 -0
  4. package/example/Dockerfile.dev +19 -0
  5. package/example/README.md +38 -0
  6. package/example/jsconfig.json +19 -0
  7. package/example/package.json +26 -0
  8. package/example/src/app.d.ts +13 -0
  9. package/example/src/app.html +15 -0
  10. package/example/src/lib/assets/favicon.svg +1 -0
  11. package/example/src/lib/components/CustomInput.svelte +10 -0
  12. package/example/src/lib/components/CustomLabel.svelte +21 -0
  13. package/example/src/lib/components/CustomLink.svelte +8 -0
  14. package/example/src/lib/components/CustomTable.svelte +37 -0
  15. package/example/src/lib/components/types/input.js +4 -0
  16. package/example/src/lib/index.js +1 -0
  17. package/example/src/routes/+layout.svelte +101 -0
  18. package/example/src/routes/+page.svelte +85 -0
  19. package/example/src/routes/example/+server.js +113 -0
  20. package/example/src/routes/user/+page.svelte +104 -0
  21. package/example/src/routes/user/+server.js +23 -0
  22. package/example/static/css/style.css +133 -0
  23. package/example/static/css/testapp.css +30 -0
  24. package/example/static/favicon.svg +1 -0
  25. package/example/static/icons/icon-calendar-g.png +0 -0
  26. package/example/static/icons/icon-calendar-v.png +0 -0
  27. package/example/static/icons/icon-calendar.png +0 -0
  28. package/example/static/robots.txt +3 -0
  29. package/example/svelte.config.js +39 -0
  30. package/example/vite.config.js +19 -0
  31. package/lib/inputs/Editor.svelte +99 -0
  32. package/lib/table/CellLink.svelte +1 -1
  33. package/lib/table/Table.svelte +17 -57
  34. package/lib/table/TableColumnFilter.svelte +31 -0
  35. package/lib/table/TableFilter.svelte +51 -0
  36. package/lib/table/TablePagination.svelte +66 -0
  37. package/lib/user/UserSelect.svelte +1 -5
  38. package/package.json +2 -1
package/README.md CHANGED
@@ -2,4 +2,7 @@
2
2
 
3
3
  A Svelte Kit components library
4
4
 
5
+ # Instructions
6
+
7
+ In the main repository, run `docker compose up` that starts a server accessible on `http://localhost:8001`
5
8
 
@@ -0,0 +1,3 @@
1
+ .svelte-kit
2
+ node_modules
3
+ package-lock.json
@@ -0,0 +1,17 @@
1
+ FROM node:24.6-alpine3.22 AS frnt-bibliapedia
2
+ LABEL maintainer="nathan.chevalier@asso-parabole.fr"
3
+
4
+ RUN mkdir -p /usr/src/app/node_modules && mkdir -p /usr/src/app/.svelte-kit && chown -R node:node /usr/src/app
5
+
6
+ WORKDIR /usr/src/app
7
+ COPY . .
8
+
9
+ RUN npm install
10
+
11
+ RUN npm run build
12
+
13
+ RUN rm -rf src/ static/
14
+
15
+ USER node:node
16
+
17
+ CMD [ "npm" , "run", "start" ]
@@ -0,0 +1,19 @@
1
+ FROM node:24.6-alpine3.22 AS frnt-bibliapedia-dev
2
+ LABEL maintainer="nathan.chevalier@asso-parabole.fr"
3
+
4
+ RUN mkdir -p /usr/src/app/node_modules && mkdir -p /usr/src/app/.svelte-kit && chown -R node:node /usr/src/app
5
+
6
+ WORKDIR /usr/src/app
7
+
8
+ COPY ["package.json", "package-lock.json*", "./"]
9
+
10
+ RUN npm install --save-dev --loglevel verbose
11
+
12
+ USER node:node
13
+
14
+ COPY --chown=node:node . .
15
+
16
+ EXPOSE 5173
17
+ EXPOSE 24678
18
+
19
+ CMD ["npm", "run", "dev", "--", "--no-open", "--host", "0.0.0.0"]
@@ -0,0 +1,38 @@
1
+ # sv
2
+
3
+ Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
4
+
5
+ ## Creating a project
6
+
7
+ If you're seeing this, you've probably already done this step. Congrats!
8
+
9
+ ```sh
10
+ # create a new project in the current directory
11
+ npx sv create
12
+
13
+ # create a new project in my-app
14
+ npx sv create my-app
15
+ ```
16
+
17
+ ## Developing
18
+
19
+ Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
20
+
21
+ ```sh
22
+ npm run dev
23
+
24
+ # or start the server and open the app in a new browser tab
25
+ npm run dev -- --open
26
+ ```
27
+
28
+ ## Building
29
+
30
+ To create a production version of your app:
31
+
32
+ ```sh
33
+ npm run build
34
+ ```
35
+
36
+ You can preview the production build with `npm run preview`.
37
+
38
+ > To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
@@ -0,0 +1,19 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "moduleResolution": "bundler"
13
+ }
14
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
15
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
16
+ //
17
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
18
+ // from the referenced tsconfig.json - TypeScript does not merge them in
19
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "frnt-bibliapedia",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite dev",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "prepare": "svelte-kit sync || echo ''",
11
+ "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
12
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch"
13
+ },
14
+ "devDependencies": {
15
+ "@sveltejs/adapter-auto": "^6.0.0",
16
+ "@sveltejs/adapter-node": "^5.3.1",
17
+ "@sveltejs/kit": "^2.22.0",
18
+ "@sveltejs/vite-plugin-svelte": "^6.0.0",
19
+ "svelte": "^5.0.0",
20
+ "quill": "^2.0.3",
21
+ "svelte-check": "^4.0.0",
22
+ "svelte-portal": "2.2.1",
23
+ "typescript": "^5.0.0",
24
+ "vite": "^7.0.4"
25
+ }
26
+ }
@@ -0,0 +1,13 @@
1
+ // See https://svelte.dev/docs/kit/types#app.d.ts
2
+ // for information about these interfaces
3
+ declare global {
4
+ namespace App {
5
+ // interface Error {}
6
+ // interface Locals {}
7
+ // interface PageData {}
8
+ // interface PageState {}
9
+ // interface Platform {}
10
+ }
11
+ }
12
+
13
+ export {};
@@ -0,0 +1,15 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ %sveltekit.head%
7
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:ital,wght@0,100..900;1,100..900&family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
9
+ <link rel="stylesheet" href="%sveltekit.assets%/css/style.css" />
10
+ <link rel="stylesheet" href="%sveltekit.assets%/css/testapp.css" />
11
+ </head>
12
+ <body data-sveltekit-preload-data="hover">
13
+ <div style="display: contents">%sveltekit.body%</div>
14
+ </body>
15
+ </html>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>
@@ -0,0 +1,10 @@
1
+ <script>
2
+ export let name;
3
+ export let value;
4
+ </script>
5
+
6
+ <input type="color" bind:value={value}/>
7
+
8
+ <style>
9
+
10
+ </style>
@@ -0,0 +1,21 @@
1
+ <script>
2
+ export let type;
3
+ </script>
4
+
5
+ <div>
6
+ {type}
7
+ </div>
8
+
9
+ <style>
10
+ div {
11
+ font-weight: 600;
12
+ text-transform: uppercase;
13
+ font-size: 13px;
14
+ color: #777;
15
+ background-color: #ddd;
16
+ padding: 5px 16px;
17
+ height: 16px;
18
+ line-height: 16px;
19
+ border-radius: 20px;
20
+ }
21
+ </style>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import CellLink from "$lib/iconograph-ui/table/CellLink.svelte";
3
+
4
+ export let id;
5
+ export let name;
6
+ </script>
7
+
8
+ <CellLink url="/org/{id}" text={name} ></CellLink>
@@ -0,0 +1,37 @@
1
+ <script>
2
+ // @ts-nocheck
3
+ import Table from "$lib/iconograph-ui/table/Table.svelte";
4
+ import CustomInput from "./CustomInput.svelte";
5
+ import CustomLabel from "./CustomLabel.svelte";
6
+ import CustomLink from "./CustomLink.svelte";
7
+ import { enumType } from "./types/input";
8
+
9
+ let statuses = [
10
+ { name: 'ALL', value: 0 },
11
+ { name: 'DRAFT', value: 1 },
12
+ { name: 'REJECTED', value: 2 },
13
+ { name: 'CONVERGED', value: 3 },
14
+ { name: 'APPROVED', value: 4 },
15
+ { name: 'PUBLISHED', value: 5 },
16
+ { name: 'DISABLED', value: 6 },
17
+ { name: 'DELETED', value: 7 },
18
+ { name: 'REPORTED', value: 8 },
19
+ { name: 'MOD_L1', value: 9 },
20
+ { name: 'MODING', value: 10 }
21
+ ];
22
+
23
+ let settings = [
24
+ {
25
+ field: "name", label: "Nom", component: CustomLink, width: 120, props: {},
26
+ sort: (a, b) => a.name.localeCompare(b.name)
27
+ },
28
+ { field: "city", label: "Ville", component: null, props: {}, width: 200, sort: (a, b) => a.name.localeCompare(b.name)},
29
+ { field: "type", label: "Type", component: CustomLabel, props: {}, width: 120, sort: (a, b) => null, filterOptions: enumType},
30
+ { field: "status", label: "Statut", component: null, props: {}, width: 120, sort: (a, b) => null},
31
+ ]
32
+
33
+ let uri = "/example"
34
+
35
+ </script>
36
+
37
+ <Table uri={uri} columns={settings} actions={false} pagination={true} ></Table>
@@ -0,0 +1,4 @@
1
+ export const enumType = [
2
+ { A: "Option A" },
3
+ { C: "Option C" }
4
+ ];
@@ -0,0 +1 @@
1
+ // place files you want to import through the `$lib` alias in this folder.
@@ -0,0 +1,101 @@
1
+ <script>
2
+ // @ts-nocheck
3
+ import { page } from '$app/stores';
4
+ import { afterUpdate } from 'svelte';
5
+
6
+ import NotificationWrapper from '$lib/iconograph-ui/notification/NotificationWrapper.svelte';
7
+ import MainMenu from "$lib/iconograph-ui/navigation/MainMenu.svelte";
8
+
9
+ let current_url = $page.url.pathname.split('/');
10
+
11
+ afterUpdate(() => {
12
+ current_url = $page.url.pathname.split('/');
13
+ });
14
+
15
+ let isMenuOpen = false;
16
+
17
+ let menu = {
18
+ logo: "",
19
+ main: [
20
+ { name: 'Home', uri: '', icon: '/icons/icon-calendar-g.png', iconHover: '/icons/icon-calendar-v.png', selected: current_url[1] == ''},
21
+ { name: 'Home', uri: '', icon: '/icons/icon-calendar-g.png', iconHover: '/icons/icon-calendar-v.png', selected: current_url[1] == '1' },
22
+ { name: 'Home', uri: '', icon: '/icons/icon-calendar-g.png', iconHover: '/icons/icon-calendar-v.png', selected: current_url[1] == '1' },
23
+ { name: 'Home', uri: '', icon: '/icons/icon-calendar-g.png', iconHover: '/icons/icon-calendar-v.png', selected: current_url[1] == '1' },
24
+ ],
25
+ };
26
+
27
+ </script>
28
+
29
+ <MainMenu menu={menu} isOpen={isMenuOpen} ></MainMenu>
30
+
31
+ <div id="main-container" class="{isMenuOpen ? 'menu-open' : ''}" >
32
+ <div style="display: contents">
33
+
34
+ <slot />
35
+
36
+ </div>
37
+ </div>
38
+
39
+ <NotificationWrapper></NotificationWrapper>
40
+
41
+ <style>
42
+ #main-container {
43
+ position: relative;
44
+ display: flex;
45
+ flex-direction: column;
46
+ justify-content: center;
47
+ left: 85px;
48
+ width: calc(100% - 85px);
49
+ transition: 0.3s all ease-in-out;
50
+ padding-bottom: 48px;
51
+ }
52
+ #main-container.menu-open {
53
+ width: calc(100% - 300px);
54
+ left: 300px;
55
+ }
56
+
57
+
58
+ #main-container section > article {
59
+ width: calc(100% - 48px);
60
+ max-width: min(calc(100% - 24px), 1100px) !important;
61
+ margin-bottom: 30px;
62
+ padding: 24px 24px;
63
+ background-color: #ffffff;
64
+ box-sizing: border-box;
65
+ border: 1px solid #e4e4e4;
66
+ border-radius: 8px;
67
+ }
68
+
69
+ @media (max-width: 1040px) {
70
+ #main-container.menu-open > section {
71
+ width: 100%;
72
+ min-width: 300px;
73
+ }
74
+ nav {
75
+ z-index: 50;
76
+ }
77
+ #main-container.menu-open section > article {
78
+ width: calc(100% - 88px);
79
+ }
80
+ }
81
+
82
+ @media (max-width: 780px) {
83
+ #main-container {
84
+ left: 0px;
85
+ margin-top: 0px;
86
+ }
87
+ #main-container.menu-open {
88
+ width: 100vw;
89
+ left: 0px;
90
+ }
91
+ article {
92
+ width: calc(100% - 88px);
93
+ margin-bottom: 30px;
94
+ padding: 24px 24px;
95
+ }
96
+ #main-container section > article {
97
+ width: calc(100% - 88px);
98
+ }
99
+ }
100
+ </style>
101
+
@@ -0,0 +1,85 @@
1
+ <script>
2
+ import HeadSection from "$lib/iconograph-ui/layout/HeadSection.svelte";
3
+ import BodySection from "$lib/iconograph-ui/layout/BodySection.svelte";
4
+ import Card from "$lib/iconograph-ui/layout/Card.svelte";
5
+ import Modal from "$lib/iconograph-ui/layout/Modal.svelte";
6
+ import Form from "$lib/iconograph-ui/form/Form.svelte";
7
+ import FlexForm from "$lib/iconograph-ui/form/FlexForm.svelte";
8
+ import Input from "$lib/iconograph-ui/form/Input.svelte";
9
+ import SexeChoiceInput from "$lib/iconograph-ui/form/SexeChoiceInput.svelte";
10
+ import CustomInput from "$lib/components/CustomInput.svelte";
11
+ import CustomTable from "../lib/components/CustomTable.svelte";
12
+ import Editor from "$lib/iconograph-ui/inputs/Editor.svelte";
13
+ import SegmentedSwitchInput from "$lib/iconograph-ui/form/SegmentedSwitchInput.svelte"
14
+
15
+ let options = [{ key: "Value" }]
16
+ let inputs = [
17
+ { component: Input, props: { type: "text", name: "title", label: "Titre" } },
18
+ { component: Input, props: { type: "select", name: "title", label: "Titre" } },
19
+ { component: Input, props: { type: "select", name: "custom", label: "Custom", options: options } },
20
+ { component: Input, props: { type: "email", name: "email", label: "Email"}, value: "test@example.com" },
21
+ { component: SexeChoiceInput, props: { name: "sexe", label: "Sexe" } },
22
+ { component: CustomInput, props: { name: "color", label: "Couleur" } },
23
+ ];
24
+
25
+ let button = {
26
+ label: "Enregistrer",
27
+ }
28
+
29
+ let open = false;
30
+ let section = 'Doc';
31
+
32
+ function onEditorChange(event) {
33
+ console.log("HTML:", event.detail.html);
34
+ }
35
+ </script>
36
+
37
+ <HeadSection>
38
+
39
+ <h1 style="margin-top: 40px;">Welcome to SvelteKit</h1>
40
+ <p style="margin-bottom: 24px;">Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation</p>
41
+
42
+ </HeadSection>
43
+
44
+ <BodySection>
45
+
46
+ <Card padding={'0px'} >
47
+ <CustomTable></CustomTable>
48
+ </Card>
49
+
50
+ <Card>
51
+ <div on:click={() => open = true}>Open Modal</div>
52
+ </Card>
53
+
54
+ <Card padding={'24px'}>
55
+ <h1>My Form</h1>
56
+
57
+ <Form inputs={inputs} uri={'/test'} button={button}>
58
+ </Form>
59
+
60
+ </Card>
61
+
62
+ <Card padding={'0px'}>
63
+ <Editor on:change={onEditorChange}></Editor>
64
+ </Card>
65
+ </BodySection>
66
+
67
+ <Modal bind:open={open}>
68
+ <div style="padding: 24px; width: 600px; height: 350px; margin-bottom: 24px;">
69
+ <FlexForm inputs={inputs} uri={'/test'} button={button}>
70
+ <SegmentedSwitchInput options={['Doc', 'Group', 'Entité']} bind:selected={section} ></SegmentedSwitchInput>
71
+ <p style="margin: 12px;">{section} is selected</p>
72
+
73
+ {#each inputs as input}
74
+ {#if !input.disabled }
75
+ <div class="form-row">
76
+ <div>
77
+ <label for="{input.props.name}" class="mandatory">{input.props.label}</label>
78
+ <svelte:component this={input.component} {...input.props} bind:value={input.value} />
79
+ </div>
80
+ </div>
81
+ {/if}
82
+ {/each}
83
+ </FlexForm>
84
+ </div>
85
+ </Modal>
@@ -0,0 +1,113 @@
1
+ // @ts-nocheck
2
+ import { json } from '@sveltejs/kit';
3
+
4
+ export async function GET({ request, url, cookies }) {
5
+ let limit = url.searchParams.get('limit');
6
+ let offset = url.searchParams.get('offset');
7
+ offset = offset ? offset : 1;
8
+
9
+ let response = [
10
+ { id: "1001", name: "Saint Louis", city: "Paris", type: "HOMME", status: "ACTIVE" },
11
+ { id: "1002", name: "Saint Jean", city: "Jérusalem", type: "HOMME", status: "DISABLED" },
12
+ { id: "1003", name: "Sainte Blandine", city: "Lyon", type: "FEMME", status: "ACTIVE" },
13
+ { id: "1004", name: "Saint Christophe", city: "Corinthe", type: "HOMME", status: "ACTIVE" },
14
+ { id: "1005", name: "Sainte Rita", city: "Lupiano", type: "FEMME", status: "DELETED" },
15
+ { id: "1006", name: "Saint François d'Assise", city: "Assise", type: "HOMME", status: "ACTIVE" },
16
+ { id: "1007", name: "Sainte Claire", city: "Assise", type: "FEMME", status: "ACTIVE" },
17
+ { id: "1008", name: "Saint Pierre", city: "Rome", type: "HOMME", status: "DISABLED" },
18
+ { id: "1009", name: "Saint Paul", city: "Antioche", type: "HOMME", status: "ACTIVE" },
19
+ { id: "1010", name: "Sainte Thérèse de Lisieux", city: "Lisieux", type: "FEMME", status: "ACTIVE" },
20
+ { id: "1011", name: "Saint Augustin", city: "Hippo", type: "HOMME", status: "ACTIVE" },
21
+ { id: "1012", name: "Saint Thomas d'Aquin", city: "Roccasecca", type: "HOMME", status: "ACTIVE" },
22
+ { id: "1013", name: "Sainte Bernadette", city: "Lourdes", type: "FEMME", status: "DISABLED" },
23
+ { id: "1014", name: "Saint Antoine de Padoue", city: "Padoue", type: "HOMME", status: "ACTIVE" },
24
+ { id: "1015", name: "Saint Martin", city: "Tours", type: "HOMME", status: "DELETED" },
25
+ { id: "1016", name: "Sainte Jeanne d’Arc", city: "Domrémy", type: "FEMME", status: "ACTIVE" },
26
+ { id: "1017", name: "Saint Denis", city: "Paris", type: "HOMME", status: "ACTIVE" },
27
+ { id: "1018", name: "Saint Nicolas", city: "Myre", type: "HOMME", status: "DISABLED" },
28
+ { id: "1019", name: "Sainte Monique", city: "Tagaste", type: "FEMME", status: "ACTIVE" },
29
+ { id: "1020", name: "Saint Joseph", city: "Nazareth", type: "HOMME", status: "ACTIVE" },
30
+ { id: "1021", name: "Saint André", city: "Patras", type: "HOMME", status: "DELETED" },
31
+ { id: "1022", name: "Sainte Marguerite", city: "Écosse", type: "FEMME", status: "ACTIVE" },
32
+ { id: "1023", name: "Saint Georges", city: "Lydda", type: "HOMME", status: "ACTIVE" },
33
+ { id: "1024", name: "Saint Patrick", city: "Irlande", type: "HOMME", status: "DISABLED" },
34
+ { id: "1025", name: "Sainte Hélène", city: "Constantinople", type: "FEMME", status: "ACTIVE" },
35
+ { id: "1026", name: "Saint Étienne", city: "Jérusalem", type: "HOMME", status: "ACTIVE" },
36
+ { id: "1027", name: "Sainte Marie-Madeleine", city: "Magdala", type: "FEMME", status: "ACTIVE" },
37
+ { id: "1028", name: "Saint Matthieu", city: "Capharnaüm", type: "HOMME", status: "DELETED" },
38
+ { id: "1029", name: "Saint Marc", city: "Alexandrie", type: "HOMME", status: "ACTIVE" },
39
+ { id: "1030", name: "Saint Luc", city: "Antioche", type: "HOMME", status: "ACTIVE" },
40
+ { id: "1031", name: "Sainte Catherine de Sienne", city: "Sienne", type: "FEMME", status: "ACTIVE" },
41
+ { id: "1032", name: "Saint Benoît", city: "Nursie", type: "HOMME", status: "DISABLED" },
42
+ { id: "1033", name: "Saint Ignace de Loyola", city: "Loyola", type: "HOMME", status: "ACTIVE" },
43
+ { id: "1034", name: "Saint Jean Bosco", city: "Turin", type: "HOMME", status: "ACTIVE" },
44
+ { id: "1035", name: "Sainte Faustine", city: "Cracovie", type: "FEMME", status: "DELETED" },
45
+ { id: "1036", name: "Saint Cyrille", city: "Alexandrie", type: "HOMME", status: "ACTIVE" },
46
+ { id: "1037", name: "Saint Méthode", city: "Salonique", type: "HOMME", status: "ACTIVE" },
47
+ { id: "1038", name: "Sainte Cécile", city: "Rome", type: "FEMME", status: "ACTIVE" },
48
+ { id: "1039", name: "Saint Ambroise", city: "Milan", type: "HOMME", status: "DISABLED" },
49
+ { id: "1040", name: "Saint Grégoire", city: "Rome", type: "HOMME", status: "ACTIVE" },
50
+ { id: "1041", name: "Saint Léon", city: "Rome", type: "HOMME", status: "ACTIVE" },
51
+ { id: "1042", name: "Sainte Élisabeth", city: "Hongrie", type: "FEMME", status: "ACTIVE" },
52
+ { id: "1043", name: "Saint Sébastien", city: "Rome", type: "HOMME", status: "DELETED" },
53
+ { id: "1044", name: "Saint Laurent", city: "Rome", type: "HOMME", status: "ACTIVE" },
54
+ { id: "1045", name: "Sainte Agnès", city: "Rome", type: "FEMME", status: "ACTIVE" },
55
+ { id: "1046", name: "Saint Basile", city: "Césarée", type: "HOMME", status: "DISABLED" },
56
+ { id: "1047", name: "Saint Athanase", city: "Alexandrie", type: "HOMME", status: "ACTIVE" },
57
+ { id: "1048", name: "Saint Anselme", city: "Aoste", type: "HOMME", status: "ACTIVE" },
58
+ { id: "1049", name: "Sainte Brigitte", city: "Suède", type: "FEMME", status: "ACTIVE" },
59
+ { id: "1050", name: "Saint Albert", city: "Cologne", type: "HOMME", status: "ACTIVE" },
60
+ { id: "1051", name: "Saint Louis-Marie Grignion", city: "Montfort", type: "HOMME", status: "ACTIVE" },
61
+ { id: "1052", name: "Saint Charles Borromée", city: "Milan", type: "HOMME", status: "DISABLED" },
62
+ { id: "1053", name: "Sainte Geneviève", city: "Paris", type: "FEMME", status: "ACTIVE" },
63
+ { id: "1054", name: "Saint Philibert", city: "Tournus", type: "HOMME", status: "DELETED" },
64
+ { id: "1055", name: "Saint Dominique", city: "Caleruega", type: "HOMME", status: "ACTIVE" },
65
+ { id: "1056", name: "Sainte Scholastique", city: "Nursie", type: "FEMME", status: "ACTIVE" },
66
+ { id: "1057", name: "Saint François Xavier", city: "Navarre", type: "HOMME", status: "ACTIVE" },
67
+ { id: "1058", name: "Saint Vincent de Paul", city: "Pouy", type: "HOMME", status: "DISABLED" },
68
+ { id: "1059", name: "Sainte Louise de Marillac", city: "Paris", type: "FEMME", status: "ACTIVE" },
69
+ { id: "1060", name: "Saint Camille de Lellis", city: "Bucchianico", type: "HOMME", status: "ACTIVE" },
70
+ { id: "1061", name: "Saint Alphonse de Liguori", city: "Naples", type: "HOMME", status: "ACTIVE" },
71
+ { id: "1062", name: "Sainte Anne", city: "Jérusalem", type: "FEMME", status: "DELETED" },
72
+ { id: "1063", name: "Saint Joachim", city: "Jérusalem", type: "HOMME", status: "ACTIVE" },
73
+ { id: "1064", name: "Saint Isaac", city: "Ninive", type: "HOMME", status: "ACTIVE" },
74
+ { id: "1065", name: "Sainte Véronique", city: "Jérusalem", type: "FEMME", status: "DISABLED" },
75
+ { id: "1066", name: "Saint Éphrem", city: "Nisibe", type: "HOMME", status: "ACTIVE" },
76
+ { id: "1067", name: "Saint Maxime", city: "Chalcedoine", type: "HOMME", status: "ACTIVE" },
77
+ { id: "1068", name: "Sainte Julienne", city: "Cornillon", type: "FEMME", status: "ACTIVE" },
78
+ { id: "1069", name: "Saint Prosper", city: "Aquitaine", type: "HOMME", status: "ACTIVE" },
79
+ { id: "1070", name: "Saint Hilaire", city: "Poitiers", type: "HOMME", status: "DELETED" },
80
+ { id: "1071", name: "Saint Irénée", city: "Lyon", type: "HOMME", status: "ACTIVE" },
81
+ { id: "1072", name: "Sainte Odile", city: "Alsace", type: "FEMME", status: "ACTIVE" },
82
+ { id: "1073", name: "Saint Clément", city: "Rome", type: "HOMME", status: "ACTIVE" },
83
+ { id: "1074", name: "Saint Barnabé", city: "Chypre", type: "HOMME", status: "DISABLED" },
84
+ { id: "1075", name: "Sainte Philomène", city: "Rome", type: "FEMME", status: "ACTIVE" },
85
+ { id: "1076", name: "Saint Barthélemy", city: "Arménie", type: "HOMME", status: "ACTIVE" },
86
+ { id: "1077", name: "Saint Simon", city: "Canaan", type: "HOMME", status: "DELETED" },
87
+ { id: "1078", name: "Saint Jude", city: "Édesse", type: "HOMME", status: "ACTIVE" },
88
+ { id: "1079", name: "Saint Jacques", city: "Compostelle", type: "HOMME", status: "ACTIVE" },
89
+ { id: "1080", name: "Sainte Apolline", city: "Alexandrie", type: "FEMME", status: "ACTIVE" },
90
+ { id: "1081", name: "Saint Cyr", city: "Tarse", type: "HOMME", status: "DISABLED" },
91
+ { id: "1082", name: "Sainte Perpétue", city: "Carthage", type: "FEMME", status: "ACTIVE" },
92
+ { id: "1083", name: "Sainte Félicité", city: "Carthage", type: "FEMME", status: "ACTIVE" },
93
+ { id: "1084", name: "Saint Polycarpe", city: "Smyrne", type: "HOMME", status: "ACTIVE" },
94
+ { id: "1085", name: "Saint Justin", city: "Naplouse", type: "HOMME", status: "DELETED" },
95
+ { id: "1086", name: "Saint Clovis", city: "Soissons", type: "HOMME", status: "ACTIVE" },
96
+ { id: "1087", name: "Sainte Bathilde", city: "Chelles", type: "FEMME", status: "ACTIVE" },
97
+ { id: "1088", name: "Saint Louis de Gonzague", city: "Mantoue", type: "HOMME", status: "ACTIVE" },
98
+ { id: "1089", name: "Sainte Madeleine Sophie", city: "Joigny", type: "FEMME", status: "ACTIVE" },
99
+ { id: "1090", name: "Saint Claude", city: "Besançon", type: "HOMME", status: "DISABLED" },
100
+ { id: "1091", name: "Saint Bernard", city: "Clairvaux", type: "HOMME", status: "ACTIVE" },
101
+ { id: "1092", name: "Sainte Juliette", city: "Césarée", type: "FEMME", status: "ACTIVE" },
102
+ { id: "1093", name: "Saint Pierre Claver", city: "Verdú", type: "HOMME", status: "ACTIVE" },
103
+ { id: "1094", name: "Saint François de Sales", city: "Annecy", type: "HOMME", status: "ACTIVE" },
104
+ { id: "1095", name: "Sainte Jeanne de Chantal", city: "Bourgogne", type: "FEMME", status: "DELETED" },
105
+ { id: "1096", name: "Saint Prosper d'Aquitaine", city: "Aquitaine", type: "HOMME", status: "ACTIVE" },
106
+ { id: "1097", name: "Saint Raymond", city: "Barcelone", type: "HOMME", status: "ACTIVE" },
107
+ { id: "1098", name: "Sainte Marguerite-Marie", city: "Paray-le-Monial", type: "FEMME", status: "ACTIVE" },
108
+ { id: "1099", name: "Saint Jean-Marie Vianney", city: "Ars", type: "HOMME", status: "ACTIVE" },
109
+ { id: "1100", name: "Sainte Édith", city: "Angleterre", type: "FEMME", status: "ACTIVE" }
110
+ ]
111
+
112
+ return json({ data: response.slice((offset - 1) * limit, offset * limit), count: response.length }, { status: 200 });
113
+ }