create-nkvs-mongoose-hono 1.0.0 → 1.0.2

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 (50) hide show
  1. package/README.md +2 -0
  2. package/data/.env +5 -0
  3. package/data/_modules/config.js +11 -3
  4. package/data/_modules/hono/error.js +1 -2
  5. package/data/_modules/hono/main.dev.js +3 -1
  6. package/data/_modules/hono/main.js +3 -4
  7. package/data/_modules/main.dev.js +16 -0
  8. package/data/_modules/main.js +10 -0
  9. package/data/_modules/mongoose/connect.js +2 -3
  10. package/data/_modules/mongoose/crud.js +17 -5
  11. package/data/_modules/packages/validator.js +1 -1
  12. package/data/_modules/plugins/app.dev.js +1 -3
  13. package/data/_modules/plugins/app.js +1 -3
  14. package/data/_modules/plugins/crud.js +2 -3
  15. package/data/_modules/plugins/doc.js +7 -6
  16. package/data/_modules/plugins/store.js +3 -0
  17. package/data/_modules/plugins/validator.js +1 -2
  18. package/data/package.json +2 -2
  19. package/data/src/middleware/_imports.dev.js +1 -1
  20. package/data/src/middleware/global.dev.js +3 -5
  21. package/data/src/middleware/global.js +2 -3
  22. package/data/src/middleware/test.dev.js +2 -4
  23. package/data/src/middleware/test.js +2 -4
  24. package/data/src/models/Apple.js +9 -4
  25. package/data/src/models/Color.js +1 -3
  26. package/data/src/routers/apples.dev.js +2 -4
  27. package/data/src/routers/apples.js +5 -9
  28. package/data/static/compass/assets/config-DiQ0KSRC.js +1 -0
  29. package/data/static/compass/assets/global-middleware-D_iAyTrE.js +1 -0
  30. package/data/static/compass/assets/home--bVFpcXR.js +1 -0
  31. package/data/static/compass/assets/how-to-import-dev-middleware-BKbmlczn.js +1 -0
  32. package/data/static/compass/assets/how-to-import-dev-router-Chu2o0sm.js +1 -0
  33. package/data/static/compass/assets/how-to-import-middleware-BWMQNy7n.js +1 -0
  34. package/data/static/compass/assets/how-to-import-model-BvwXzDVv.js +1 -0
  35. package/data/static/compass/assets/index-Cu-UoRpJ.css +1 -0
  36. package/data/static/compass/assets/index-D6H45Mb0.js +2 -0
  37. package/data/static/compass/assets/middleware-CiRXg1kd.js +1 -0
  38. package/data/static/compass/assets/middleware-example-CjbC5awT.js +1 -0
  39. package/data/static/compass/assets/models-BNO9a_uW.js +1 -0
  40. package/data/static/compass/assets/requests-CrVIycm3.js +1 -0
  41. package/data/static/compass/assets/routers-BrLbEkdM.js +1 -0
  42. package/data/static/compass/index.html +14 -0
  43. package/data/static/compass/vite.svg +1 -0
  44. package/data/static/doc-test.json +24 -0
  45. package/data/static/doc.json +26 -4
  46. package/package.json +1 -1
  47. package/data/main.dev.js +0 -15
  48. package/data/main.js +0 -9
  49. package/data/package-lock.json +0 -639
  50. package/data/static/index.html +0 -11
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  The logic of this package is not yet perfect, but you can try using it.
4
4
 
5
+ Once you start the project, you can open http://localhost:3000/static/compass (default port is 3000).
6
+
5
7
  ## Usage
6
8
 
7
9
  ```PowerShell
package/data/.env ADDED
@@ -0,0 +1,5 @@
1
+ PORT=3000
2
+ MONGODB_URI=mongodb://127.0.0.1:27017/test
3
+ STATIC_PATH=/static/*
4
+ STATIC_ROOT=./
5
+ DOC_PATH=./static/doc.json
@@ -1,7 +1,15 @@
1
- export const MONGODB_URI = 'mongodb://127.0.0.1:27017/test'
1
+ import 'dotenv/config'
2
+
3
+ export const MONGODB_URI = process.env.MONGODB_URI
2
4
 
3
5
  export const excludedQueryKeys = ['page', 'sort', 'limit', 'fields', 'pretty']
4
6
 
5
- export const defaultSelectFields = '-__v'
7
+ export const defaultSelectFields = ''
8
+
9
+ export const PORT = process.env.PORT
10
+
11
+ export const STATIC_PATH = process.env.STATIC_PATH
12
+
13
+ export const STATIC_ROOT = process.env.STATIC_ROOT
6
14
 
7
- export const PORT = 8787
15
+ export const DOC_PATH = process.env.DOC_PATH
@@ -1,7 +1,6 @@
1
1
  import http from 'http'
2
- import { get } from 'nkv-store'
3
2
 
4
- get('app').onError = function (error, { status, json }) {
3
+ store.get('app').onError = function (error, { status, json }) {
5
4
  const errorMessages = []
6
5
  let code = 400
7
6
  if (error.name === 'ValidationError') {
@@ -1 +1,3 @@
1
- console.log('http://localhost:8787/apples/test')
1
+ import { PORT } from '../config.js'
2
+
3
+ console.log(`http://localhost:${PORT}/static/compass`)
@@ -1,11 +1,10 @@
1
- import { get } from 'nkv-store'
2
1
  import { Hono } from 'hono'
3
2
  import { serve } from '@hono/node-server'
4
3
  import { serveStatic } from '@hono/node-server/serve-static'
5
4
  import { etag } from 'hono/etag'
6
- import { PORT } from '../config.js'
5
+ import { PORT, STATIC_PATH, STATIC_ROOT } from '../config.js'
7
6
 
8
- const app = get('app')
7
+ const app = store.get('app')
9
8
  const honoApp = new Hono()
10
9
 
11
10
  app.globalMiddleware.forEach((middleware) => {
@@ -16,7 +15,7 @@ app.globalMiddleware.forEach((middleware) => {
16
15
  honoApp.use(middleware)
17
16
  })
18
17
 
19
- honoApp.use('/static/*', etag(), serveStatic({ root: './' }))
18
+ honoApp.use(STATIC_PATH, etag(), serveStatic({ root: STATIC_ROOT }))
20
19
 
21
20
  app.routers.forEach((router) => {
22
21
  const honoRouter = new Hono()
@@ -0,0 +1,16 @@
1
+ import './plugins/store.js'
2
+ import './plugins/app.js'
3
+ import './plugins/app.dev.js'
4
+ import './plugins/validator.js'
5
+ import '../src/models/_imports.js'
6
+ import './mongoose/connect.js'
7
+ import './mongoose/connect.dev.js'
8
+ import '../src/middleware/_imports.js'
9
+ import '../src/middleware/_imports.dev.js'
10
+ import '../src/routers/_imports.js'
11
+ import '../src/routers/_imports.dev.js'
12
+ import './plugins/crud.js'
13
+ import './plugins/doc.js'
14
+ import './hono/error.js'
15
+ import './hono/main.js'
16
+ import './hono/main.dev.js'
@@ -0,0 +1,10 @@
1
+ import './plugins/store.js'
2
+ import './plugins/app.js'
3
+ import './plugins/validator.js'
4
+ import '../src/models/_imports.js'
5
+ import './mongoose/connect.js'
6
+ import '../src/middleware/_imports.js'
7
+ import '../src/routers/_imports.js'
8
+ import './plugins/crud.js'
9
+ import './hono/error.js'
10
+ import './hono/main.js'
@@ -1,9 +1,8 @@
1
1
  import { connect, model, Schema } from 'mongoose'
2
- import { get } from 'nkv-store'
3
2
  import { MONGODB_URI } from '../config.js'
4
3
 
5
- const app = get('app')
6
- const { isArray } = get('validator')
4
+ const app = store.get('app')
5
+ const { isArray } = store.get('validator')
7
6
 
8
7
  for (const modelName in app.models) {
9
8
  const { schema, collection, options, middleware } = app.models[modelName]
@@ -1,8 +1,7 @@
1
- import { get } from 'nkv-store'
2
1
  import { excludedQueryKeys, defaultSelectFields } from '../config.js'
3
2
 
4
- const { models, mongooseModels } = get('app')
5
- const { isArray, isEmptyObject, isString, isNumber } = get('validator')
3
+ const { models, mongooseModels } = store.get('app')
4
+ const { isArray, isEmptyObject, isString, isNumber, isObject } = store.get('validator')
6
5
 
7
6
  export function findAll(modelName, { filter, sort, fields, page, limit, populate, count }) {
8
7
  return async function ({ json, req }) {
@@ -11,7 +10,7 @@ export function findAll(modelName, { filter, sort, fields, page, limit, populate
11
10
  const Model = mongooseModels[modelName]
12
11
  const _filter = filterHandler({ query, filter })
13
12
 
14
- let find = Model.find()
13
+ let find = Model.find(_filter)
15
14
 
16
15
  find = sortHandler({ find, query, sort })
17
16
  find = fieldHandler({ find, query, fields })
@@ -57,7 +56,7 @@ export function create(modelName) {
57
56
  return async function ({ json, req }) {
58
57
  const body = await req.json()
59
58
  const Model = mongooseModels[modelName]
60
- const instance = new Model(bdoy)
59
+ const instance = new Model(body)
61
60
 
62
61
  await instance.save()
63
62
 
@@ -94,6 +93,8 @@ export function remove(modelName) {
94
93
  }
95
94
  }
96
95
 
96
+ const operations = ['$gte', '$gt', '$lte', '$lt']
97
+
97
98
  function filterHandler({ query, filter }) {
98
99
  filter = { ...query, ...filter }
99
100
 
@@ -101,6 +102,17 @@ function filterHandler({ query, filter }) {
101
102
 
102
103
  filter = JSON.parse(JSON.stringify(filter).replace(/\b(gte|gt|lte|lt)\b/g, match => `$${match}`))
103
104
 
105
+ for (let i = 0; i < operations.length; i++) {
106
+ const operation = operations[i]
107
+ if (filter['_id[' + operation + ']']) {
108
+ if (!isObject(filter['_id'])) {
109
+ filter['_id'] = {}
110
+ }
111
+ filter['_id'][operation] = filter['_id[' + operation + ']']
112
+ delete filter['_id[' + operation + ']']
113
+ }
114
+ }
115
+
104
116
  return filter
105
117
  }
106
118
 
@@ -36,7 +36,7 @@ export function isEmptyObject(value) {
36
36
  }
37
37
 
38
38
  for (const key in value) {
39
- if (object.hasOwnProperty(key)) {
39
+ if (value.hasOwnProperty(key)) {
40
40
  return false
41
41
  }
42
42
  }
@@ -1,6 +1,4 @@
1
- import { set } from 'nkv-store'
2
-
3
- set('_app', {
1
+ store.set('_app', {
4
2
  globalMiddleware: {},
5
3
  middleware: {},
6
4
  routers: {}
@@ -1,6 +1,4 @@
1
- import { set } from 'nkv-store'
2
-
3
- set('app', {
1
+ store.set('app', {
4
2
  globalMiddleware: [],
5
3
  middleware: {},
6
4
  routers: [],
@@ -1,9 +1,8 @@
1
- import { get } from 'nkv-store'
2
1
  import * as crudMap from '../packages/crud.js'
3
2
  import * as crudHandlers from '../mongoose/crud.js'
4
3
 
5
- const app = get('app')
6
- const { isBoolean, isObject } = get('validator')
4
+ const app = store.get('app')
5
+ const { isBoolean, isObject } = store.get('validator')
7
6
 
8
7
  app.routers.forEach((router) => {
9
8
  if (!router.crud || !router.crud.model || !app.models[router.crud.model]) {
@@ -1,8 +1,8 @@
1
- import { get } from 'nkv-store'
2
1
  import fs from 'fs/promises'
2
+ import * as config from '../config.js'
3
3
 
4
- const app = get('app')
5
- const _app = get('_app')
4
+ const app = store.get('app')
5
+ const _app = store.get('_app')
6
6
 
7
7
  app.routers.forEach((router) => {
8
8
  const _router = _app.routers[router.path]
@@ -29,6 +29,7 @@ app.routers.forEach((router) => {
29
29
  })
30
30
 
31
31
  const doc = {
32
+ config,
32
33
  models: app.models,
33
34
  globalMiddleware: _app.globalMiddleware,
34
35
  middleware: _app.middleware,
@@ -43,11 +44,11 @@ const jsendDoc = {
43
44
  const content = JSON.stringify(jsendDoc, null, 2)
44
45
 
45
46
  try {
46
- const oldDocContent = await fs.readFile('./static/doc.json', { encoding: 'utf-8' })
47
+ const oldDocContent = await fs.readFile(config.DOC_PATH, { encoding: 'utf-8' })
47
48
 
48
49
  if (oldDocContent !== content) {
49
- await fs.writeFile('./static/doc.json', content)
50
+ await fs.writeFile(config.DOC_PATH, content)
50
51
  }
51
52
  } catch {
52
- await fs.writeFile('./static/doc.json', content)
53
+ await fs.writeFile(config.DOC_PATH, content)
53
54
  }
@@ -0,0 +1,3 @@
1
+ import * as store from 'nkv-store'
2
+
3
+ global.store = store
@@ -1,4 +1,3 @@
1
- import { set } from 'nkv-store'
2
1
  import * as validator from '../packages/validator.js'
3
2
 
4
- set('validator', { ...validator })
3
+ store.set('validator', { ...validator })
package/data/package.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "dev": "nodemon main.dev.js",
8
- "build": "ncc build main.js -m",
7
+ "dev": "nodemon _modules/main.dev.js",
8
+ "build": "ncc build _modules/main.js -m",
9
9
  "start": "node dist/index.js"
10
10
  },
11
11
  "keywords": [],
@@ -1,2 +1,2 @@
1
- import './test.dev.js'
2
1
  import './global.dev.js'
2
+ import './test.dev.js'
@@ -1,6 +1,4 @@
1
- import { get } from 'nkv-store'
1
+ const { globalMiddleware } = store.get('_app')
2
2
 
3
- const _app = get('_app')
4
-
5
- _app.globalMiddleware['cors'] = 'cors.'
6
- _app.globalMiddleware['prettyJSON'] = 'pretty JSON.'
3
+ globalMiddleware['cors'] = 'cors.'
4
+ globalMiddleware['prettyJSON'] = 'pretty JSON.'
@@ -1,7 +1,6 @@
1
- import { get } from 'nkv-store'
2
1
  import { cors } from 'hono/cors'
3
2
  import { prettyJSON } from 'hono/pretty-json'
4
3
 
5
- const app = get('app')
4
+ const { globalMiddleware } = store.get('app')
6
5
 
7
- app.globalMiddleware.push(cors(), prettyJSON())
6
+ globalMiddleware.push(cors(), prettyJSON())
@@ -1,5 +1,3 @@
1
- import { get } from 'nkv-store'
1
+ const { middleware } = store.get('_app')
2
2
 
3
- const _app = get('_app')
4
-
5
- _app.middleware['test'] = 'console log 1.'
3
+ middleware['test'] = 'console log 1.'
@@ -1,8 +1,6 @@
1
- import { get } from 'nkv-store'
1
+ const { middleware } = store.get('app')
2
2
 
3
- const app = get('app')
4
-
5
- app.middleware['test'] = async function (context, next) {
3
+ middleware['test'] = async function (context, next) {
6
4
  console.log(1)
7
5
  await next()
8
6
  }
@@ -1,6 +1,4 @@
1
- import { get } from 'nkv-store'
2
-
3
- get('app').models.Apple = {
1
+ store.get('app').models.Apple = {
4
2
  collection: 'apples',
5
3
  documentName: 'apple',
6
4
  schema: {
@@ -15,5 +13,12 @@ get('app').models.Apple = {
15
13
  },
16
14
  options: {
17
15
  timestamps: true
18
- }
16
+ },
17
+ middleware: [
18
+ {
19
+ hook: 'pre',
20
+ method: 'save',
21
+ async handler(doc) {}
22
+ }
23
+ ]
19
24
  }
@@ -1,6 +1,4 @@
1
- import { get } from 'nkv-store'
2
-
3
- get('app').models.Color = {
1
+ store.get('app').models.Color = {
4
2
  collection: 'colors',
5
3
  documentName: 'color',
6
4
  schema: {
@@ -1,10 +1,8 @@
1
- import { get } from 'nkv-store'
2
-
3
- get('_app').routers['/apples'] = {
1
+ store.get('_app').routers['/apples'] = {
4
2
  description: 'Apple',
5
3
  events: {
6
4
  'GET /test': {
7
5
  description: 'Apple test interface.'
8
6
  }
9
7
  }
10
- }
8
+ }
@@ -1,17 +1,15 @@
1
- import { get } from 'nkv-store'
2
-
3
- const router = {
1
+ store.get('app').routers.push({
4
2
  path: '/apples',
5
3
  crud: {
6
4
  model: 'Apple',
7
5
  findAll: {
8
6
  count: true,
9
- populate: 'color',
10
- limit: 5
7
+ populate: 'color'
11
8
  },
12
9
  findOne: {
13
10
  populate: 'color'
14
- }
11
+ },
12
+ create: true
15
13
  },
16
14
  events: {
17
15
  'GET /test': {
@@ -21,6 +19,4 @@ const router = {
21
19
  }
22
20
  }
23
21
  }
24
- }
25
-
26
- get('app').routers.push(router)
22
+ })
@@ -0,0 +1 @@
1
+ import{g as f,c as r,a as t,u as s,w as d,v as i,F as m,r as v,o as a,t as u}from"./index-D6H45Mb0.js";const C={class:"flex flex-col gap-4"},R={class:"border border-slate-200 rounded-lg overflow-hidden"},U={class:"flex justify-between"},D={class:"w-full"},L={class:"border-t border-slate-200"},_={class:"border-l border-slate-200 flex items-center focus-within:bg-slate-50 transition"},k={class:"border-t border-slate-200"},E={class:"border-l border-slate-200 flex items-center focus-within:bg-slate-50 transition"},B={class:"border-t border-slate-200"},z={class:"border-l border-slate-200 flex items-center focus-within:bg-slate-50 transition"},S={class:"border-t border-slate-200"},H={class:"border-l border-slate-200 flex items-center transition p-4"},V={class:"border-t border-slate-200"},I={class:"border-l border-slate-200 flex items-center focus-within:bg-slate-50 transition"},F={class:"border border-slate-200 rounded-lg overflow-hidden"},A={class:"w-full"},O={class:"px-4 py-3 w-64"},j={class:"border-l border-slate-200 px-4 py-3"},T={__name:"config",setup(M){const e=f("front-end"),c=f("back-end");function g(l){localStorage.setItem("configURL",l.target.value),alert("Change the DOC URL")}function p(l){localStorage.setItem("configBaseURL",l.target.value),alert("Change the baseURL")}function x(l){localStorage.setItem("configAuthorization",l.target.value),alert("Change the authorization")}function w(l){localStorage.setItem("configBodyRows",l.target.value),alert("Change the bodyRows")}function h(){e.config.showDoc=!0,alert("show doc.")}function y(){e.config.showDoc=!1,alert("hide doc.")}return(l,o)=>(a(),r("div",C,[t("div",R,[t("div",U,[o[5]||(o[5]=t("div",{class:"px-4 py-3 font-bold bg-slate-100 flex-1"},"FrontEnd Config",-1)),t("button",{class:"px-4 py-3 cursor-pointer border-l border-slate-200 hover:bg-slate-50 transition",onClick:o[0]||(o[0]=(...n)=>s(e).methods.refreshData&&s(e).methods.refreshData(...n))},"Refresh Data")]),t("table",D,[t("tbody",null,[t("tr",L,[o[7]||(o[7]=t("td",{class:"px-4 py-3 w-64"},"DOC URL",-1)),t("td",_,[d(t("input",{type:"text","onUpdate:modelValue":o[1]||(o[1]=n=>s(e).config.URL=n),class:"w-full outline-none px-4 py-3",onChange:g},null,544),[[i,s(e).config.URL]]),o[6]||(o[6]=t("div",{class:"text-xs font-bold mr-4"},"Editable",-1))])]),t("tr",k,[o[9]||(o[9]=t("td",{class:"px-4 py-3 w-64"},"baseURL",-1)),t("td",E,[d(t("input",{type:"text","onUpdate:modelValue":o[2]||(o[2]=n=>s(e).config.baseURL=n),class:"w-full outline-none px-4 py-3",onChange:p},null,544),[[i,s(e).config.baseURL]]),o[8]||(o[8]=t("div",{class:"text-xs font-bold mr-4"},"Editable",-1))])]),t("tr",B,[o[11]||(o[11]=t("td",{class:"px-4 py-3 w-64"},"authorization",-1)),t("td",z,[d(t("input",{type:"text","onUpdate:modelValue":o[3]||(o[3]=n=>s(e).config.authorization=n),class:"w-full outline-none px-4 py-3",onChange:x},null,544),[[i,s(e).config.authorization]]),o[10]||(o[10]=t("div",{class:"text-xs font-bold mr-4"},"Editable",-1))])]),t("tr",S,[o[12]||(o[12]=t("td",{class:"px-4 py-3 w-64"},"showDoc",-1)),t("td",H,[s(e).config.showDoc?(a(),r("button",{key:1,class:"px-4 py-3 border border-slate-200 rounded-lg cursor-pointer hover:bg-slate-50",onClick:y},"Hide")):(a(),r("button",{key:0,class:"px-4 py-3 border border-slate-200 rounded-lg cursor-pointer hover:bg-slate-50",onClick:h},"Show"))])]),t("tr",V,[o[14]||(o[14]=t("td",{class:"px-4 py-3 w-64"},"bodyRows",-1)),t("td",I,[d(t("input",{type:"text","onUpdate:modelValue":o[4]||(o[4]=n=>s(e).config.bodyRows=n),class:"w-full outline-none px-4 py-3",onChange:w},null,544),[[i,s(e).config.bodyRows]]),o[13]||(o[13]=t("div",{class:"text-xs font-bold mr-4"},"Editable",-1))])])])])]),t("div",F,[o[15]||(o[15]=t("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"BackEnd Config",-1)),t("table",A,[t("tbody",null,[(a(!0),r(m,null,v(s(c).config,(n,b)=>(a(),r("tr",{key:b,class:"even:bg-slate-100 border-t border-slate-200"},[t("td",O,u(b),1),t("td",j,u(n),1)]))),128))])])])]))}};export{T as default};
@@ -0,0 +1 @@
1
+ import{g as c,c as a,a as e,f as m,u as s,F as p,r as f,d as r,o as l,t as b}from"./index-D6H45Mb0.js";import{G as _,a as u,H as w}from"./how-to-import-dev-middleware-BKbmlczn.js";import{H as g}from"./how-to-import-middleware-BWMQNy7n.js";const h={class:"flex flex-col gap-4"},x={class:"border border-slate-200 rounded-lg overflow-hidden"},v={class:"flex justify-between"},y={class:"w-full"},D={class:"px-4 py-3 w-64"},M={class:"border-l border-slate-200 px-4 py-3"},C={__name:"global-middleware",setup(k){const o=c("front-end"),n=c("back-end");return(E,t)=>(l(),a("div",h,[e("div",x,[e("div",v,[t[1]||(t[1]=e("div",{class:"px-4 py-3 font-bold bg-slate-100 flex-1"},"Global Middleware Compass",-1)),e("button",{class:"px-4 py-3 cursor-pointer border-l border-slate-200 hover:bg-slate-50 transition",onClick:t[0]||(t[0]=(...d)=>s(o).methods.refreshData&&s(o).methods.refreshData(...d))},"Refresh Data")]),e("table",y,[(l(!0),a(p,null,f(s(n).globalMiddleware,(d,i)=>(l(),a("tr",{key:i,class:"even:bg-slate-100 border-t border-slate-200"},[e("td",D,b(i),1),e("td",M,b(d),1)]))),128))])]),s(o).methods.isEmptyObject(s(n).globalMiddleware)||s(o).config.showDoc?(l(),a(p,{key:0},[r(_),r(g),r(u),r(w)],64)):m("",!0)]))}};export{C as default};
@@ -0,0 +1 @@
1
+ import{G as p,a as n,H as i}from"./how-to-import-dev-middleware-BKbmlczn.js";import{M as m}from"./middleware-example-CjbC5awT.js";import{_ as c,c as s,a as o,o as d,b as v,d as e,e as t}from"./index-D6H45Mb0.js";import{H as b}from"./how-to-import-middleware-BWMQNy7n.js";import{R as x,a as f,b as u,c as w,d as g,e as _,H as y,f as M,g as h}from"./how-to-import-dev-router-Chu2o0sm.js";import{M as D,H as R}from"./how-to-import-model-BvwXzDVv.js";const H={},E={class:"border border-slate-200 rounded-lg overflow-hidden"};function k(l,a){return d(),s("div",E,[...a[0]||(a[0]=[o("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Middleware - Dev",-1),o("div",{class:"px-4 py-3 border-t border-slate-200"},"const { middleware } = store.get('_app')",-1),o("div",{class:"px-4 py-3 border-t border-slate-100"},"middleware['test'] = 'console log 1.'",-1)])])}const T=c(H,[["render",k]]),j={class:"flex flex-col gap-4"},$={__name:"home",setup(l){return(a,r)=>(d(),s("div",j,[r[0]||(r[0]=v('<div class="border border-slate-200 px-4 py-3 font-bold bg-slate-100 rounded-lg flex justify-between"><div>Example</div><a href="https://www.npmjs.com/package/create-nkvs-mongoose-hono" target="_blank">create-nkvs-mongoose-hono</a></div><div class="border border-slate-200 rounded-lg overflow-hidden"><div class="px-4 py-3 bg-slate-100 font-bold">npm create nkvs-mongoose-hono@latest project-name</div><div class="px-4 py-3 border-t border-slate-200">cd project-name</div><div class="px-4 py-3 border-t border-slate-200">npm install</div><div class="px-4 py-3 border-t border-slate-200">npm run dev</div><div class="px-4 py-3 border-t border-slate-200">npm run build</div><div class="px-4 py-3 border-t border-slate-200">npm run start</div></div>',2)),e(p),e(m),e(b),e(n),e(T),e(i),e(x),e(f),e(u),e(w),e(g),e(_),e(y),e(M),e(h),e(D),e(R),r[1]||(r[1]=o("div",{class:"border border-slate-200 px-4 py-3 text-center rounded-lg"},[t("For more details: "),o("a",{href:"https://mongoosejs.com/",class:"font-bold"},"Mongoose"),t(" and "),o("a",{href:"https://hono.dev/",class:"font-bold"},"Hono"),t(".")],-1))]))}};export{$ as default};
@@ -0,0 +1 @@
1
+ import{_ as d,c as o,b as l,o as s,a as r}from"./index-D6H45Mb0.js";const a={},i={class:"border border-slate-200 rounded-lg overflow-hidden"};function p(t,e){return s(),o("div",i,[...e[0]||(e[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Global Middleware</div><div class="px-4 py-3 border-t border-slate-200">import { cors } from &#39;hono/cors&#39;</div><div class="px-4 py-3 border-t border-slate-100">import { prettyJSON } from &#39;hono/pretty-json&#39;</div><div class="px-4 py-3 border-t border-slate-100">const { globalMiddleware } = store.get(&#39;app&#39;)</div><div class="px-4 py-3 border-t border-slate-100">globalMiddleware.push(cors(), prettyJSON())</div>',5)])])}const m=d(a,[["render",p]]),c={},n={class:"border border-slate-200 rounded-lg overflow-hidden"};function b(t,e){return s(),o("div",n,[...e[0]||(e[0]=[r("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Global Middleware - Dev",-1),r("div",{class:"px-4 py-3 border-t border-slate-200"},"const { globalMiddleware } = store.get('_app')",-1),r("div",{class:"px-4 py-3 border-t border-slate-100"},"globalMiddleware['cors'] = 'cors.'",-1),r("div",{class:"px-4 py-3 border-t border-slate-100"},"globalMiddleware['prettyJSON'] = 'pretty JSON.'",-1)])])}const w=d(c,[["render",b]]),v={},_={class:"border border-slate-200 rounded-lg overflow-hidden"};function f(t,e){return s(),o("div",_,[...e[0]||(e[0]=[r("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Global Middleware - Dev & Middleware - Dev / middleware/_import.dev.js",-1),r("div",{class:"px-4 py-3 border-t border-slate-200"},"import './global.dev.js'",-1),r("div",{class:"px-4 py-3 border-t border-slate-100"},"import './test.dev.js'",-1)])])}const y=d(v,[["render",f]]);export{m as G,y as H,w as a};
@@ -0,0 +1 @@
1
+ import{_ as e,c as t,b as l,o as d,a as o}from"./index-D6H45Mb0.js";const a={},p={class:"border border-slate-200 rounded-lg overflow-hidden"};function b(s,r){return d(),t("div",p,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router</div><div class="px-4 py-3 border-t border-slate-200">store.get(&#39;app&#39;).routers.push({</div><div class="px-4 py-3 border-t border-slate-100">  path: &#39;/apples&#39;,</div><div class="px-4 py-3 border-t border-slate-100">  crud: {</div><div class="px-4 py-3 border-t border-slate-100">    model: &#39;Apple&#39;,</div><div class="px-4 py-3 border-t border-slate-100">    findAll: { count: true, populate: &#39;color&#39;, limit: 5 }</div><div class="px-4 py-3 border-t border-slate-100">    findOne: { populate: &#39;color&#39; }</div><div class="px-4 py-3 border-t border-slate-100">  },</div><div class="px-4 py-3 border-t border-slate-100">  events: {</div><div class="px-4 py-3 border-t border-slate-100">    &#39;GET /test&#39;: { middleware: [&#39;test&#39;], async handler({ json }) { return json({}) } }</div><div class="px-4 py-3 border-t border-slate-100">  }</div><div class="px-4 py-3 border-t border-slate-100">)}</div>',12)])])}const H=e(a,[["render",b]]),c={},n={class:"border border-slate-200 rounded-lg overflow-hidden"};function i(s,r){return d(),t("div",n,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router / findAll</div><div class="px-4 py-3 border-t border-slate-200">Boolean or Object</div><table class="w-full"><thead><tr class="border-t border-slate-200"><th class="px-4 py-3 text-left w-32">Name</th><th class="px-4 py-3 border-l border-slate-200 text-left w-96">Type</th><th class="px-4 py-3 border-l border-slate-200 text-left">Example</th></tr></thead><tbody><tr class="border-t border-slate-200"><td class="px-4 py-3">middleware</td><td class="px-4 py-3 border-l border-slate-200">Array-String</td><td class="px-4 py-3 border-l border-slate-200">[&#39;test&#39;]</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">filter</td><td class="px-4 py-3 border-l border-slate-200">Object</td><td class="px-4 py-3 border-l border-slate-200">{ &#39;age[gte]&#39;: 18 }</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">fields</td><td class="px-4 py-3 border-l border-slate-200">String</td><td class="px-4 py-3 border-l border-slate-200">&#39;name color&#39; ✅, &#39;name -createdAt&#39; ❌, &#39;-createdAt -upadtedAt&#39; ❌</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">sort</td><td class="px-4 py-3 border-l border-slate-200">String</td><td class="px-4 py-3 border-l border-slate-200">&#39;-createdAt&#39;</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">page</td><td class="px-4 py-3 border-l border-slate-200">Number</td><td class="px-4 py-3 border-l border-slate-200">1</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">limit</td><td class="px-4 py-3 border-l border-slate-200">Number or Boolean</td><td class="px-4 py-3 border-l border-slate-200">false, 10, If number &gt; 300 then number = 300</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">populate</td><td class="px-4 py-3 border-l border-slate-200">String or Object or Array-Object</td><td class="px-4 py-3 border-l border-slate-200">&#39;color&#39;, { path: &#39;color&#39;, select: &#39;name&#39;, populate: {} }, [{ path: &#39;color&#39; }]</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">count</td><td class="px-4 py-3 border-l border-slate-200">Boolean</td><td class="px-4 py-3 border-l border-slate-200">true</td></tr></tbody></table>',3)])])}const I=e(c,[["render",i]]),x={},y={class:"border border-slate-200 rounded-lg overflow-hidden"};function v(s,r){return d(),t("div",y,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router / findOne</div><div class="px-4 py-3 border-t border-slate-200">Boolean or Object</div><table class="w-full"><thead><tr class="border-t border-slate-200"><th class="px-4 py-3 text-left w-32">Name</th><th class="px-4 py-3 border-l border-slate-200 text-left w-96">Type</th><th class="px-4 py-3 border-l border-slate-200 text-left">Example</th></tr></thead><tbody><tr class="border-t border-slate-200"><td class="px-4 py-3">middleware</td><td class="px-4 py-3 border-l border-slate-200">Array-String</td><td class="px-4 py-3 border-l border-slate-200">[&#39;test&#39;]</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">filter</td><td class="px-4 py-3 border-l border-slate-200">Object</td><td class="px-4 py-3 border-l border-slate-200">{ &#39;age[gte]&#39;: 18 }</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">fields</td><td class="px-4 py-3 border-l border-slate-200">String</td><td class="px-4 py-3 border-l border-slate-200">&#39;name color&#39; ✅, &#39;name -createdAt&#39; ❌, &#39;-createdAt -upadtedAt&#39; ❌</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">populate</td><td class="px-4 py-3 border-l border-slate-200">String or Object or Array-Object</td><td class="px-4 py-3 border-l border-slate-200">&#39;color&#39;, { path: &#39;color&#39;, select: &#39;name&#39;, populate: {} }, [{ path: &#39;color&#39; }]</td></tr></tbody></table>',3)])])}const k=e(x,[["render",v]]),f={},u={class:"border border-slate-200 rounded-lg overflow-hidden"};function _(s,r){return d(),t("div",u,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router / create</div><div class="px-4 py-3 border-t border-slate-200">Boolean or Object</div><table class="w-full"><thead><tr class="border-t border-slate-200"><th class="px-4 py-3 text-left w-32">Name</th><th class="px-4 py-3 border-l border-slate-200 text-left w-96">Type</th><th class="px-4 py-3 border-l border-slate-200 text-left">Example</th></tr></thead><tbody><tr class="border-t border-slate-200"><td class="px-4 py-3">middleware</td><td class="px-4 py-3 border-l border-slate-200">Array-String</td><td class="px-4 py-3 border-l border-slate-200">[&#39;test&#39;]</td></tr></tbody></table>',3)])])}const G=e(f,[["render",_]]),h={},m={class:"border border-slate-200 rounded-lg overflow-hidden"};function g(s,r){return d(),t("div",m,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router / update</div><div class="px-4 py-3 border-t border-slate-200">Boolean or Object</div><table class="w-full"><thead><tr class="border-t border-slate-200"><th class="px-4 py-3 text-left w-32">Name</th><th class="px-4 py-3 border-l border-slate-200 text-left w-96">Type</th><th class="px-4 py-3 border-l border-slate-200 text-left">Example</th></tr></thead><tbody><tr class="border-t border-slate-200"><td class="px-4 py-3">middleware</td><td class="px-4 py-3 border-l border-slate-200">Array-String</td><td class="px-4 py-3 border-l border-slate-200">[&#39;test&#39;]</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">ignoreFields</td><td class="px-4 py-3 border-l border-slate-200">Array</td><td class="px-4 py-3 border-l border-slate-200">[&#39;active&#39;]</td></tr><tr class="border-t border-slate-200"><td class="px-4 py-3">options</td><td class="px-4 py-3 border-l border-slate-200">Object</td><td class="px-4 py-3 border-l border-slate-200">{ new: true }</td></tr></tbody></table>',3)])])}const V=e(h,[["render",g]]),w={},$={class:"border border-slate-200 rounded-lg overflow-hidden"};function A(s,r){return d(),t("div",$,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router / remove</div><div class="px-4 py-3 border-t border-slate-200">Boolean or Object</div><table class="w-full"><thead><tr class="border-t border-slate-200"><th class="px-4 py-3 text-left w-32">Name</th><th class="px-4 py-3 border-l border-slate-200 text-left w-96">Type</th><th class="px-4 py-3 border-l border-slate-200 text-left">Example</th></tr></thead><tbody><tr class="border-t border-slate-200"><td class="px-4 py-3">middleware</td><td class="px-4 py-3 border-l border-slate-200">Array-String</td><td class="px-4 py-3 border-l border-slate-200">[&#39;test&#39;]</td></tr></tbody></table>',3)])])}const C=e(w,[["render",A]]),R={},j={class:"border border-slate-200 rounded-lg overflow-hidden"};function O(s,r){return d(),t("div",j,[...r[0]||(r[0]=[o("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Router / _import.js",-1),o("div",{class:"px-4 py-3 border-t border-slate-200"},"import './apples.js'",-1)])])}const U=e(R,[["render",O]]),S={},B={class:"border border-slate-200 rounded-lg overflow-hidden"};function E(s,r){return d(),t("div",B,[...r[0]||(r[0]=[l('<div class="px-4 py-3 bg-slate-100 font-bold">Router - Dev</div><div class="px-4 py-3 border-t border-slate-200">store.get(&#39;_app&#39;).routers[&#39;/apples&#39;] = {</div><div class="px-4 py-3 border-t border-slate-100">  description: &#39;Apple&#39;,</div><div class="px-4 py-3 border-t border-slate-100">  events: {</div><div class="px-4 py-3 border-t border-slate-100">    &#39;GET /test&#39;: { description: &#39;Apple test interface.&#39; }</div><div class="px-4 py-3 border-t border-slate-100">  }</div><div class="px-4 py-3 border-t border-slate-100">}</div>',7)])])}const q=e(S,[["render",E]]),D={},N={class:"border border-slate-200 rounded-lg overflow-hidden"};function T(s,r){return d(),t("div",N,[...r[0]||(r[0]=[o("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Router - Dev / _import.dev.js",-1),o("div",{class:"px-4 py-3 border-t border-slate-200"},"import './apples.dev.js'",-1)])])}const z=e(D,[["render",T]]);export{U as H,H as R,I as a,k as b,G as c,V as d,C as e,q as f,z as g};
@@ -0,0 +1 @@
1
+ import{_ as o,c as s,a as e,o as d}from"./index-D6H45Mb0.js";const t={},a={class:"border border-slate-200 rounded-lg overflow-hidden"};function l(i,r){return d(),s("div",a,[...r[0]||(r[0]=[e("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Global Middleware & Middleware / middleware/_import.js",-1),e("div",{class:"px-4 py-3 border-t border-slate-200"},"import './global.js'",-1),e("div",{class:"px-4 py-3 border-t border-slate-100"},"import './test.js'",-1)])])}const n=o(t,[["render",l]]);export{n as H};
@@ -0,0 +1 @@
1
+ import{_ as d,c as o,b as a,o as s,a as r}from"./index-D6H45Mb0.js";const l={},p={class:"border border-slate-200 rounded-lg overflow-hidden"};function i(t,e){return s(),o("div",p,[...e[0]||(e[0]=[a('<div class="px-4 py-3 bg-slate-100 font-bold">Model</div><div class="px-4 py-3 border-t border-slate-200">store.get(&#39;app&#39;).models.Apple = {</div><div class="px-4 py-3 border-t border-slate-100">  collection: &#39;apples&#39;,</div><div class="px-4 py-3 border-t border-slate-100">  documentName: &#39;apple&#39;,</div><div class="px-4 py-3 border-t border-slate-100">  schema: {</div><div class="px-4 py-3 border-t border-slate-100">    name: { type: &#39;String&#39;, required: true },</div><div class="px-4 py-3 border-t border-slate-100">    color: { type: &#39;ObjectId&#39;, ref: &#39;Color&#39; },</div><div class="px-4 py-3 border-t border-slate-100">  },</div><div class="px-4 py-3 border-t border-slate-100">  options: { timestamps: true, methods: {}, statics: {} },</div><div class="px-4 py-3 border-t border-slate-100">  middleware: [{ hook: &#39;pre&#39;, &#39;method&#39;: &#39;save&#39;, async handler(doc) {} }]</div><div class="px-4 py-3 border-t border-slate-100">}</div>',11)])])}const m=d(l,[["render",i]]),c={},b={class:"border border-slate-200 rounded-lg overflow-hidden"};function n(t,e){return s(),o("div",b,[...e[0]||(e[0]=[r("div",{class:"px-4 py-3 bg-slate-100 font-bold"},"Model / _import.js",-1),r("div",{class:"px-4 py-3 border-t border-slate-200"},"import './Apple.js'",-1),r("div",{class:"px-4 py-3 border-t border-slate-100"},"import './Color.js'",-1)])])}const x=d(c,[["render",n]]);export{x as H,m as M};
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-600:oklch(57.7% .245 27.325);--color-green-600:oklch(62.7% .194 149.214);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-white:#fff;--spacing:.25rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--font-weight-bold:700;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.fixed{position:fixed}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.left-0{left:calc(var(--spacing)*0)}.z-50{z-index:50}.m-4{margin:calc(var(--spacing)*4)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-1{margin-top:calc(var(--spacing)*1)}.mr-4{margin-right:calc(var(--spacing)*4)}.flex{display:flex}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.h-8{height:calc(var(--spacing)*8)}.w-8{width:calc(var(--spacing)*8)}.w-32{width:calc(var(--spacing)*32)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-b-slate-200{border-bottom-color:var(--color-slate-200)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-white{background-color:var(--color-white)}.bg-white\/75{background-color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.bg-white\/75{background-color:color-mix(in oklab,var(--color-white)75%,transparent)}}.p-4{padding:calc(var(--spacing)*4)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-4{padding-right:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.text-green-600{color:var(--color-green-600)}.text-red-600{color:var(--color-red-600)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.even\:bg-slate-100:nth-child(2n){background-color:var(--color-slate-100)}.focus-within\:bg-slate-50:focus-within{background-color:var(--color-slate-50)}@media(hover:hover){.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}.custom-enter-active,.custom-leave-active{transition:.5s;transform:translateY(0)}.custom-enter-from,.custom-leave-to{opacity:0;transform:translateY(-2rem)}