@mszr/idb-dux 1.0.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.
- package/LICENSE +194 -0
- package/README.md +84 -0
- package/dist/commonjs/admin/index.d.ts +18 -0
- package/dist/commonjs/admin/index.d.ts.map +1 -0
- package/dist/commonjs/admin/index.js +31 -0
- package/dist/commonjs/admin/index.js.map +1 -0
- package/dist/commonjs/admin/init.d.ts +67 -0
- package/dist/commonjs/admin/init.d.ts.map +1 -0
- package/dist/commonjs/admin/init.js +86 -0
- package/dist/commonjs/admin/init.js.map +1 -0
- package/dist/commonjs/admin/query.d.ts +21 -0
- package/dist/commonjs/admin/query.d.ts.map +1 -0
- package/dist/commonjs/admin/query.js +46 -0
- package/dist/commonjs/admin/query.js.map +1 -0
- package/dist/commonjs/admin/types.d.ts +124 -0
- package/dist/commonjs/admin/types.d.ts.map +1 -0
- package/dist/commonjs/admin/types.js +3 -0
- package/dist/commonjs/admin/types.js.map +1 -0
- package/dist/commonjs/admin/webhooks.d.ts +11 -0
- package/dist/commonjs/admin/webhooks.d.ts.map +1 -0
- package/dist/commonjs/admin/webhooks.js +8 -0
- package/dist/commonjs/admin/webhooks.js.map +1 -0
- package/dist/commonjs/errors.d.ts +13 -0
- package/dist/commonjs/errors.d.ts.map +1 -0
- package/dist/commonjs/errors.js +19 -0
- package/dist/commonjs/errors.js.map +1 -0
- package/dist/commonjs/index.d.ts +13 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +29 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/nuxt/defineAuthSyncHandler.d.ts +15 -0
- package/dist/commonjs/nuxt/defineAuthSyncHandler.d.ts.map +1 -0
- package/dist/commonjs/nuxt/defineAuthSyncHandler.js +44 -0
- package/dist/commonjs/nuxt/defineAuthSyncHandler.js.map +1 -0
- package/dist/commonjs/nuxt/defineServerKit.d.ts +5 -0
- package/dist/commonjs/nuxt/defineServerKit.d.ts.map +1 -0
- package/dist/commonjs/nuxt/defineServerKit.js +49 -0
- package/dist/commonjs/nuxt/defineServerKit.js.map +1 -0
- package/dist/commonjs/nuxt/defineWebhookHandler.d.ts +17 -0
- package/dist/commonjs/nuxt/defineWebhookHandler.d.ts.map +1 -0
- package/dist/commonjs/nuxt/defineWebhookHandler.js +24 -0
- package/dist/commonjs/nuxt/defineWebhookHandler.js.map +1 -0
- package/dist/commonjs/nuxt/index.d.ts +15 -0
- package/dist/commonjs/nuxt/index.d.ts.map +1 -0
- package/dist/commonjs/nuxt/index.js +24 -0
- package/dist/commonjs/nuxt/index.js.map +1 -0
- package/dist/commonjs/nuxt/types.d.ts +54 -0
- package/dist/commonjs/nuxt/types.d.ts.map +1 -0
- package/dist/commonjs/nuxt/types.js +3 -0
- package/dist/commonjs/nuxt/types.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/perms/ast.d.ts +98 -0
- package/dist/commonjs/perms/ast.d.ts.map +1 -0
- package/dist/commonjs/perms/ast.js +148 -0
- package/dist/commonjs/perms/ast.js.map +1 -0
- package/dist/commonjs/perms/builder.d.ts +18 -0
- package/dist/commonjs/perms/builder.d.ts.map +1 -0
- package/dist/commonjs/perms/builder.js +260 -0
- package/dist/commonjs/perms/builder.js.map +1 -0
- package/dist/commonjs/perms/context.d.ts +27 -0
- package/dist/commonjs/perms/context.d.ts.map +1 -0
- package/dist/commonjs/perms/context.js +96 -0
- package/dist/commonjs/perms/context.js.map +1 -0
- package/dist/commonjs/perms/index.d.ts +13 -0
- package/dist/commonjs/perms/index.d.ts.map +1 -0
- package/dist/commonjs/perms/index.js +6 -0
- package/dist/commonjs/perms/index.js.map +1 -0
- package/dist/commonjs/perms/types.d.ts +353 -0
- package/dist/commonjs/perms/types.d.ts.map +1 -0
- package/dist/commonjs/perms/types.js +3 -0
- package/dist/commonjs/perms/types.js.map +1 -0
- package/dist/commonjs/perms/validate.d.ts +31 -0
- package/dist/commonjs/perms/validate.d.ts.map +1 -0
- package/dist/commonjs/perms/validate.js +66 -0
- package/dist/commonjs/perms/validate.js.map +1 -0
- package/dist/commonjs/query/constants.d.ts +13 -0
- package/dist/commonjs/query/constants.d.ts.map +1 -0
- package/dist/commonjs/query/constants.js +16 -0
- package/dist/commonjs/query/constants.js.map +1 -0
- package/dist/commonjs/query/defineQuery.d.ts +33 -0
- package/dist/commonjs/query/defineQuery.d.ts.map +1 -0
- package/dist/commonjs/query/defineQuery.js +28 -0
- package/dist/commonjs/query/defineQuery.js.map +1 -0
- package/dist/commonjs/query/index.d.ts +9 -0
- package/dist/commonjs/query/index.d.ts.map +1 -0
- package/dist/commonjs/query/index.js +16 -0
- package/dist/commonjs/query/index.js.map +1 -0
- package/dist/commonjs/query/keys.d.ts +33 -0
- package/dist/commonjs/query/keys.d.ts.map +1 -0
- package/dist/commonjs/query/keys.js +3 -0
- package/dist/commonjs/query/keys.js.map +1 -0
- package/dist/commonjs/query/shapeResult.d.ts +36 -0
- package/dist/commonjs/query/shapeResult.d.ts.map +1 -0
- package/dist/commonjs/query/shapeResult.js +173 -0
- package/dist/commonjs/query/shapeResult.js.map +1 -0
- package/dist/commonjs/query/types.d.ts +187 -0
- package/dist/commonjs/query/types.d.ts.map +1 -0
- package/dist/commonjs/query/types.js +3 -0
- package/dist/commonjs/query/types.js.map +1 -0
- package/dist/commonjs/query/validation.d.ts +61 -0
- package/dist/commonjs/query/validation.d.ts.map +1 -0
- package/dist/commonjs/query/validation.js +3 -0
- package/dist/commonjs/query/validation.js.map +1 -0
- package/dist/commonjs/query/wire.d.ts +13 -0
- package/dist/commonjs/query/wire.d.ts.map +1 -0
- package/dist/commonjs/query/wire.js +77 -0
- package/dist/commonjs/query/wire.js.map +1 -0
- package/dist/commonjs/schema/defineSchema.d.ts +110 -0
- package/dist/commonjs/schema/defineSchema.d.ts.map +1 -0
- package/dist/commonjs/schema/defineSchema.js +72 -0
- package/dist/commonjs/schema/defineSchema.js.map +1 -0
- package/dist/commonjs/schema/fields.d.ts +33 -0
- package/dist/commonjs/schema/fields.d.ts.map +1 -0
- package/dist/commonjs/schema/fields.js +3 -0
- package/dist/commonjs/schema/fields.js.map +1 -0
- package/dist/commonjs/schema/index.d.ts +9 -0
- package/dist/commonjs/schema/index.d.ts.map +1 -0
- package/dist/commonjs/schema/index.js +10 -0
- package/dist/commonjs/schema/index.js.map +1 -0
- package/dist/commonjs/schema/namespace.d.ts +82 -0
- package/dist/commonjs/schema/namespace.d.ts.map +1 -0
- package/dist/commonjs/schema/namespace.js +37 -0
- package/dist/commonjs/schema/namespace.js.map +1 -0
- package/dist/commonjs/schema/register.d.ts +37 -0
- package/dist/commonjs/schema/register.d.ts.map +1 -0
- package/dist/commonjs/schema/register.js +3 -0
- package/dist/commonjs/schema/register.js.map +1 -0
- package/dist/commonjs/schema/singularize.d.ts +45 -0
- package/dist/commonjs/schema/singularize.d.ts.map +1 -0
- package/dist/commonjs/schema/singularize.js +47 -0
- package/dist/commonjs/schema/singularize.js.map +1 -0
- package/dist/commonjs/schema/types.d.ts +39 -0
- package/dist/commonjs/schema/types.d.ts.map +1 -0
- package/dist/commonjs/schema/types.js +3 -0
- package/dist/commonjs/schema/types.js.map +1 -0
- package/dist/commonjs/schema/util.d.ts +11 -0
- package/dist/commonjs/schema/util.d.ts.map +1 -0
- package/dist/commonjs/schema/util.js +3 -0
- package/dist/commonjs/schema/util.js.map +1 -0
- package/dist/commonjs/tx/index.d.ts +4 -0
- package/dist/commonjs/tx/index.d.ts.map +1 -0
- package/dist/commonjs/tx/index.js +11 -0
- package/dist/commonjs/tx/index.js.map +1 -0
- package/dist/commonjs/tx/typedTx.d.ts +15 -0
- package/dist/commonjs/tx/typedTx.d.ts.map +1 -0
- package/dist/commonjs/tx/typedTx.js +54 -0
- package/dist/commonjs/tx/typedTx.js.map +1 -0
- package/dist/commonjs/tx/types.d.ts +104 -0
- package/dist/commonjs/tx/types.d.ts.map +1 -0
- package/dist/commonjs/tx/types.js +3 -0
- package/dist/commonjs/tx/types.js.map +1 -0
- package/dist/commonjs/vue/baseline/InstantDuxDatabase.d.ts +52 -0
- package/dist/commonjs/vue/baseline/InstantDuxDatabase.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/InstantDuxDatabase.js +157 -0
- package/dist/commonjs/vue/baseline/InstantDuxDatabase.js.map +1 -0
- package/dist/commonjs/vue/baseline/InstantDuxRoom.d.ts +72 -0
- package/dist/commonjs/vue/baseline/InstantDuxRoom.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/InstantDuxRoom.js +211 -0
- package/dist/commonjs/vue/baseline/InstantDuxRoom.js.map +1 -0
- package/dist/commonjs/vue/baseline/components/Cursor.d.ts +15 -0
- package/dist/commonjs/vue/baseline/components/Cursor.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/components/Cursor.js +39 -0
- package/dist/commonjs/vue/baseline/components/Cursor.js.map +1 -0
- package/dist/commonjs/vue/baseline/components/Cursors.d.ts +65 -0
- package/dist/commonjs/vue/baseline/components/Cursors.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/components/Cursors.js +113 -0
- package/dist/commonjs/vue/baseline/components/Cursors.js.map +1 -0
- package/dist/commonjs/vue/baseline/components/auth.d.ts +37 -0
- package/dist/commonjs/vue/baseline/components/auth.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/components/auth.js +27 -0
- package/dist/commonjs/vue/baseline/components/auth.js.map +1 -0
- package/dist/commonjs/vue/baseline/index.d.ts +11 -0
- package/dist/commonjs/vue/baseline/index.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/index.js +29 -0
- package/dist/commonjs/vue/baseline/index.js.map +1 -0
- package/dist/commonjs/vue/baseline/useInfiniteQuery.d.ts +19 -0
- package/dist/commonjs/vue/baseline/useInfiniteQuery.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/useInfiniteQuery.js +65 -0
- package/dist/commonjs/vue/baseline/useInfiniteQuery.js.map +1 -0
- package/dist/commonjs/vue/baseline/utils.d.ts +9 -0
- package/dist/commonjs/vue/baseline/utils.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/utils.js +29 -0
- package/dist/commonjs/vue/baseline/utils.js.map +1 -0
- package/dist/commonjs/vue/baseline/version.d.ts +3 -0
- package/dist/commonjs/vue/baseline/version.d.ts.map +1 -0
- package/dist/commonjs/vue/baseline/version.js +6 -0
- package/dist/commonjs/vue/baseline/version.js.map +1 -0
- package/dist/commonjs/vue/index.d.ts +21 -0
- package/dist/commonjs/vue/index.d.ts.map +1 -0
- package/dist/commonjs/vue/index.js +31 -0
- package/dist/commonjs/vue/index.js.map +1 -0
- package/dist/commonjs/vue/overlay/db.d.ts +106 -0
- package/dist/commonjs/vue/overlay/db.d.ts.map +1 -0
- package/dist/commonjs/vue/overlay/db.js +105 -0
- package/dist/commonjs/vue/overlay/db.js.map +1 -0
- package/dist/commonjs/vue/overlay/defineDb.d.ts +34 -0
- package/dist/commonjs/vue/overlay/defineDb.d.ts.map +1 -0
- package/dist/commonjs/vue/overlay/defineDb.js +48 -0
- package/dist/commonjs/vue/overlay/defineDb.js.map +1 -0
- package/dist/commonjs/vue/overlay/result.d.ts +29 -0
- package/dist/commonjs/vue/overlay/result.d.ts.map +1 -0
- package/dist/commonjs/vue/overlay/result.js +75 -0
- package/dist/commonjs/vue/overlay/result.js.map +1 -0
- package/dist/commonjs/vue/overlay/rooms/index.d.ts +79 -0
- package/dist/commonjs/vue/overlay/rooms/index.d.ts.map +1 -0
- package/dist/commonjs/vue/overlay/rooms/index.js +28 -0
- package/dist/commonjs/vue/overlay/rooms/index.js.map +1 -0
- package/dist/commonjs/vue/overlay/types.d.ts +73 -0
- package/dist/commonjs/vue/overlay/types.d.ts.map +1 -0
- package/dist/commonjs/vue/overlay/types.js +3 -0
- package/dist/commonjs/vue/overlay/types.js.map +1 -0
- package/dist/commonjs/webhooks/defineWebhookHandlers.d.ts +27 -0
- package/dist/commonjs/webhooks/defineWebhookHandlers.d.ts.map +1 -0
- package/dist/commonjs/webhooks/defineWebhookHandlers.js +33 -0
- package/dist/commonjs/webhooks/defineWebhookHandlers.js.map +1 -0
- package/dist/commonjs/webhooks/index.d.ts +15 -0
- package/dist/commonjs/webhooks/index.d.ts.map +1 -0
- package/dist/commonjs/webhooks/index.js +21 -0
- package/dist/commonjs/webhooks/index.js.map +1 -0
- package/dist/commonjs/webhooks/init.d.ts +13 -0
- package/dist/commonjs/webhooks/init.d.ts.map +1 -0
- package/dist/commonjs/webhooks/init.js +39 -0
- package/dist/commonjs/webhooks/init.js.map +1 -0
- package/dist/commonjs/webhooks/types.d.ts +136 -0
- package/dist/commonjs/webhooks/types.d.ts.map +1 -0
- package/dist/commonjs/webhooks/types.js +3 -0
- package/dist/commonjs/webhooks/types.js.map +1 -0
- package/dist/esm/admin/index.d.ts +18 -0
- package/dist/esm/admin/index.d.ts.map +1 -0
- package/dist/esm/admin/index.js +21 -0
- package/dist/esm/admin/index.js.map +1 -0
- package/dist/esm/admin/init.d.ts +67 -0
- package/dist/esm/admin/init.d.ts.map +1 -0
- package/dist/esm/admin/init.js +81 -0
- package/dist/esm/admin/init.js.map +1 -0
- package/dist/esm/admin/query.d.ts +21 -0
- package/dist/esm/admin/query.d.ts.map +1 -0
- package/dist/esm/admin/query.js +42 -0
- package/dist/esm/admin/query.js.map +1 -0
- package/dist/esm/admin/types.d.ts +124 -0
- package/dist/esm/admin/types.d.ts.map +1 -0
- package/dist/esm/admin/types.js +2 -0
- package/dist/esm/admin/types.js.map +1 -0
- package/dist/esm/admin/webhooks.d.ts +11 -0
- package/dist/esm/admin/webhooks.d.ts.map +1 -0
- package/dist/esm/admin/webhooks.js +5 -0
- package/dist/esm/admin/webhooks.js.map +1 -0
- package/dist/esm/errors.d.ts +13 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +16 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nuxt/defineAuthSyncHandler.d.ts +15 -0
- package/dist/esm/nuxt/defineAuthSyncHandler.d.ts.map +1 -0
- package/dist/esm/nuxt/defineAuthSyncHandler.js +41 -0
- package/dist/esm/nuxt/defineAuthSyncHandler.js.map +1 -0
- package/dist/esm/nuxt/defineServerKit.d.ts +5 -0
- package/dist/esm/nuxt/defineServerKit.d.ts.map +1 -0
- package/dist/esm/nuxt/defineServerKit.js +46 -0
- package/dist/esm/nuxt/defineServerKit.js.map +1 -0
- package/dist/esm/nuxt/defineWebhookHandler.d.ts +17 -0
- package/dist/esm/nuxt/defineWebhookHandler.d.ts.map +1 -0
- package/dist/esm/nuxt/defineWebhookHandler.js +21 -0
- package/dist/esm/nuxt/defineWebhookHandler.js.map +1 -0
- package/dist/esm/nuxt/index.d.ts +15 -0
- package/dist/esm/nuxt/index.d.ts.map +1 -0
- package/dist/esm/nuxt/index.js +17 -0
- package/dist/esm/nuxt/index.js.map +1 -0
- package/dist/esm/nuxt/types.d.ts +54 -0
- package/dist/esm/nuxt/types.d.ts.map +1 -0
- package/dist/esm/nuxt/types.js +2 -0
- package/dist/esm/nuxt/types.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/perms/ast.d.ts +98 -0
- package/dist/esm/perms/ast.d.ts.map +1 -0
- package/dist/esm/perms/ast.js +140 -0
- package/dist/esm/perms/ast.js.map +1 -0
- package/dist/esm/perms/builder.d.ts +18 -0
- package/dist/esm/perms/builder.d.ts.map +1 -0
- package/dist/esm/perms/builder.js +257 -0
- package/dist/esm/perms/builder.js.map +1 -0
- package/dist/esm/perms/context.d.ts +27 -0
- package/dist/esm/perms/context.d.ts.map +1 -0
- package/dist/esm/perms/context.js +93 -0
- package/dist/esm/perms/context.js.map +1 -0
- package/dist/esm/perms/index.d.ts +13 -0
- package/dist/esm/perms/index.d.ts.map +1 -0
- package/dist/esm/perms/index.js +2 -0
- package/dist/esm/perms/index.js.map +1 -0
- package/dist/esm/perms/types.d.ts +353 -0
- package/dist/esm/perms/types.d.ts.map +1 -0
- package/dist/esm/perms/types.js +2 -0
- package/dist/esm/perms/types.js.map +1 -0
- package/dist/esm/perms/validate.d.ts +31 -0
- package/dist/esm/perms/validate.d.ts.map +1 -0
- package/dist/esm/perms/validate.js +61 -0
- package/dist/esm/perms/validate.js.map +1 -0
- package/dist/esm/query/constants.d.ts +13 -0
- package/dist/esm/query/constants.d.ts.map +1 -0
- package/dist/esm/query/constants.js +13 -0
- package/dist/esm/query/constants.js.map +1 -0
- package/dist/esm/query/defineQuery.d.ts +33 -0
- package/dist/esm/query/defineQuery.d.ts.map +1 -0
- package/dist/esm/query/defineQuery.js +24 -0
- package/dist/esm/query/defineQuery.js.map +1 -0
- package/dist/esm/query/index.d.ts +9 -0
- package/dist/esm/query/index.d.ts.map +1 -0
- package/dist/esm/query/index.js +5 -0
- package/dist/esm/query/index.js.map +1 -0
- package/dist/esm/query/keys.d.ts +33 -0
- package/dist/esm/query/keys.d.ts.map +1 -0
- package/dist/esm/query/keys.js +2 -0
- package/dist/esm/query/keys.js.map +1 -0
- package/dist/esm/query/shapeResult.d.ts +36 -0
- package/dist/esm/query/shapeResult.d.ts.map +1 -0
- package/dist/esm/query/shapeResult.js +168 -0
- package/dist/esm/query/shapeResult.js.map +1 -0
- package/dist/esm/query/types.d.ts +187 -0
- package/dist/esm/query/types.d.ts.map +1 -0
- package/dist/esm/query/types.js +2 -0
- package/dist/esm/query/types.js.map +1 -0
- package/dist/esm/query/validation.d.ts +61 -0
- package/dist/esm/query/validation.d.ts.map +1 -0
- package/dist/esm/query/validation.js +2 -0
- package/dist/esm/query/validation.js.map +1 -0
- package/dist/esm/query/wire.d.ts +13 -0
- package/dist/esm/query/wire.d.ts.map +1 -0
- package/dist/esm/query/wire.js +74 -0
- package/dist/esm/query/wire.js.map +1 -0
- package/dist/esm/schema/defineSchema.d.ts +110 -0
- package/dist/esm/schema/defineSchema.d.ts.map +1 -0
- package/dist/esm/schema/defineSchema.js +69 -0
- package/dist/esm/schema/defineSchema.js.map +1 -0
- package/dist/esm/schema/fields.d.ts +33 -0
- package/dist/esm/schema/fields.d.ts.map +1 -0
- package/dist/esm/schema/fields.js +2 -0
- package/dist/esm/schema/fields.js.map +1 -0
- package/dist/esm/schema/index.d.ts +9 -0
- package/dist/esm/schema/index.d.ts.map +1 -0
- package/dist/esm/schema/index.js +4 -0
- package/dist/esm/schema/index.js.map +1 -0
- package/dist/esm/schema/namespace.d.ts +82 -0
- package/dist/esm/schema/namespace.d.ts.map +1 -0
- package/dist/esm/schema/namespace.js +34 -0
- package/dist/esm/schema/namespace.js.map +1 -0
- package/dist/esm/schema/register.d.ts +37 -0
- package/dist/esm/schema/register.d.ts.map +1 -0
- package/dist/esm/schema/register.js +2 -0
- package/dist/esm/schema/register.js.map +1 -0
- package/dist/esm/schema/singularize.d.ts +45 -0
- package/dist/esm/schema/singularize.d.ts.map +1 -0
- package/dist/esm/schema/singularize.js +44 -0
- package/dist/esm/schema/singularize.js.map +1 -0
- package/dist/esm/schema/types.d.ts +39 -0
- package/dist/esm/schema/types.d.ts.map +1 -0
- package/dist/esm/schema/types.js +2 -0
- package/dist/esm/schema/types.js.map +1 -0
- package/dist/esm/schema/util.d.ts +11 -0
- package/dist/esm/schema/util.d.ts.map +1 -0
- package/dist/esm/schema/util.js +2 -0
- package/dist/esm/schema/util.js.map +1 -0
- package/dist/esm/tx/index.d.ts +4 -0
- package/dist/esm/tx/index.d.ts.map +1 -0
- package/dist/esm/tx/index.js +5 -0
- package/dist/esm/tx/index.js.map +1 -0
- package/dist/esm/tx/typedTx.d.ts +15 -0
- package/dist/esm/tx/typedTx.d.ts.map +1 -0
- package/dist/esm/tx/typedTx.js +51 -0
- package/dist/esm/tx/typedTx.js.map +1 -0
- package/dist/esm/tx/types.d.ts +104 -0
- package/dist/esm/tx/types.d.ts.map +1 -0
- package/dist/esm/tx/types.js +2 -0
- package/dist/esm/tx/types.js.map +1 -0
- package/dist/esm/vue/baseline/InstantDuxDatabase.d.ts +52 -0
- package/dist/esm/vue/baseline/InstantDuxDatabase.d.ts.map +1 -0
- package/dist/esm/vue/baseline/InstantDuxDatabase.js +149 -0
- package/dist/esm/vue/baseline/InstantDuxDatabase.js.map +1 -0
- package/dist/esm/vue/baseline/InstantDuxRoom.d.ts +72 -0
- package/dist/esm/vue/baseline/InstantDuxRoom.d.ts.map +1 -0
- package/dist/esm/vue/baseline/InstantDuxRoom.js +202 -0
- package/dist/esm/vue/baseline/InstantDuxRoom.js.map +1 -0
- package/dist/esm/vue/baseline/components/Cursor.d.ts +15 -0
- package/dist/esm/vue/baseline/components/Cursor.d.ts.map +1 -0
- package/dist/esm/vue/baseline/components/Cursor.js +36 -0
- package/dist/esm/vue/baseline/components/Cursor.js.map +1 -0
- package/dist/esm/vue/baseline/components/Cursors.d.ts +65 -0
- package/dist/esm/vue/baseline/components/Cursors.d.ts.map +1 -0
- package/dist/esm/vue/baseline/components/Cursors.js +107 -0
- package/dist/esm/vue/baseline/components/Cursors.js.map +1 -0
- package/dist/esm/vue/baseline/components/auth.d.ts +37 -0
- package/dist/esm/vue/baseline/components/auth.d.ts.map +1 -0
- package/dist/esm/vue/baseline/components/auth.js +24 -0
- package/dist/esm/vue/baseline/components/auth.js.map +1 -0
- package/dist/esm/vue/baseline/index.d.ts +11 -0
- package/dist/esm/vue/baseline/index.d.ts.map +1 -0
- package/dist/esm/vue/baseline/index.js +10 -0
- package/dist/esm/vue/baseline/index.js.map +1 -0
- package/dist/esm/vue/baseline/useInfiniteQuery.d.ts +19 -0
- package/dist/esm/vue/baseline/useInfiniteQuery.d.ts.map +1 -0
- package/dist/esm/vue/baseline/useInfiniteQuery.js +62 -0
- package/dist/esm/vue/baseline/useInfiniteQuery.js.map +1 -0
- package/dist/esm/vue/baseline/utils.d.ts +9 -0
- package/dist/esm/vue/baseline/utils.d.ts.map +1 -0
- package/dist/esm/vue/baseline/utils.js +25 -0
- package/dist/esm/vue/baseline/utils.js.map +1 -0
- package/dist/esm/vue/baseline/version.d.ts +3 -0
- package/dist/esm/vue/baseline/version.d.ts.map +1 -0
- package/dist/esm/vue/baseline/version.js +4 -0
- package/dist/esm/vue/baseline/version.js.map +1 -0
- package/dist/esm/vue/index.d.ts +21 -0
- package/dist/esm/vue/index.d.ts.map +1 -0
- package/dist/esm/vue/index.js +18 -0
- package/dist/esm/vue/index.js.map +1 -0
- package/dist/esm/vue/overlay/db.d.ts +106 -0
- package/dist/esm/vue/overlay/db.d.ts.map +1 -0
- package/dist/esm/vue/overlay/db.js +101 -0
- package/dist/esm/vue/overlay/db.js.map +1 -0
- package/dist/esm/vue/overlay/defineDb.d.ts +34 -0
- package/dist/esm/vue/overlay/defineDb.d.ts.map +1 -0
- package/dist/esm/vue/overlay/defineDb.js +44 -0
- package/dist/esm/vue/overlay/defineDb.js.map +1 -0
- package/dist/esm/vue/overlay/result.d.ts +29 -0
- package/dist/esm/vue/overlay/result.d.ts.map +1 -0
- package/dist/esm/vue/overlay/result.js +71 -0
- package/dist/esm/vue/overlay/result.js.map +1 -0
- package/dist/esm/vue/overlay/rooms/index.d.ts +79 -0
- package/dist/esm/vue/overlay/rooms/index.d.ts.map +1 -0
- package/dist/esm/vue/overlay/rooms/index.js +25 -0
- package/dist/esm/vue/overlay/rooms/index.js.map +1 -0
- package/dist/esm/vue/overlay/types.d.ts +73 -0
- package/dist/esm/vue/overlay/types.d.ts.map +1 -0
- package/dist/esm/vue/overlay/types.js +2 -0
- package/dist/esm/vue/overlay/types.js.map +1 -0
- package/dist/esm/webhooks/defineWebhookHandlers.d.ts +27 -0
- package/dist/esm/webhooks/defineWebhookHandlers.d.ts.map +1 -0
- package/dist/esm/webhooks/defineWebhookHandlers.js +30 -0
- package/dist/esm/webhooks/defineWebhookHandlers.js.map +1 -0
- package/dist/esm/webhooks/index.d.ts +15 -0
- package/dist/esm/webhooks/index.d.ts.map +1 -0
- package/dist/esm/webhooks/index.js +14 -0
- package/dist/esm/webhooks/index.js.map +1 -0
- package/dist/esm/webhooks/init.d.ts +13 -0
- package/dist/esm/webhooks/init.d.ts.map +1 -0
- package/dist/esm/webhooks/init.js +36 -0
- package/dist/esm/webhooks/init.js.map +1 -0
- package/dist/esm/webhooks/types.d.ts +136 -0
- package/dist/esm/webhooks/types.d.ts.map +1 -0
- package/dist/esm/webhooks/types.js +2 -0
- package/dist/esm/webhooks/types.js.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InstantDuxRoom = exports.rooms = exports.defaultActivityStopTimeout = void 0;
|
|
4
|
+
exports.useTopicEffect = useTopicEffect;
|
|
5
|
+
exports.usePublishTopic = usePublishTopic;
|
|
6
|
+
exports.usePresence = usePresence;
|
|
7
|
+
exports.useSyncPresence = useSyncPresence;
|
|
8
|
+
exports.useTypingIndicator = useTypingIndicator;
|
|
9
|
+
const vue_1 = require("vue");
|
|
10
|
+
const utils_js_1 = require("./utils.js");
|
|
11
|
+
exports.defaultActivityStopTimeout = 1_000;
|
|
12
|
+
// ------
|
|
13
|
+
// Topics
|
|
14
|
+
/**
|
|
15
|
+
* Listen for broadcasted events given a room and topic.
|
|
16
|
+
*
|
|
17
|
+
* @see https://instantdb.com/docs/presence-and-topics
|
|
18
|
+
*/
|
|
19
|
+
function useTopicEffect(room, topic, onEvent) {
|
|
20
|
+
(0, vue_1.watchEffect)((onCleanup) => {
|
|
21
|
+
// DUX-DELTA(ssr): no topic subscription on the server.
|
|
22
|
+
if (!(0, utils_js_1.isClient)())
|
|
23
|
+
return;
|
|
24
|
+
// END DUX-DELTA
|
|
25
|
+
const type = (0, vue_1.toValue)(room.type);
|
|
26
|
+
const id = (0, vue_1.toValue)(room.id);
|
|
27
|
+
const unsub = room.core._reactor.subscribeTopic(type, id, topic, (event, peer) => {
|
|
28
|
+
onEvent(event, peer);
|
|
29
|
+
});
|
|
30
|
+
onCleanup(unsub);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Broadcast an event to a room.
|
|
35
|
+
*
|
|
36
|
+
* @see https://instantdb.com/docs/presence-and-topics
|
|
37
|
+
*/
|
|
38
|
+
function usePublishTopic(room, topic) {
|
|
39
|
+
(0, vue_1.watchEffect)((onCleanup) => {
|
|
40
|
+
// DUX-DELTA(ssr): no room join on the server.
|
|
41
|
+
if (!(0, utils_js_1.isClient)())
|
|
42
|
+
return;
|
|
43
|
+
// END DUX-DELTA
|
|
44
|
+
const type = (0, vue_1.toValue)(room.type);
|
|
45
|
+
const id = (0, vue_1.toValue)(room.id);
|
|
46
|
+
const unsub = room.core._reactor.joinRoom(type, id);
|
|
47
|
+
onCleanup(unsub);
|
|
48
|
+
});
|
|
49
|
+
return (data) => {
|
|
50
|
+
room.core._reactor.publishTopic({
|
|
51
|
+
roomType: (0, vue_1.toValue)(room.type),
|
|
52
|
+
roomId: (0, vue_1.toValue)(room.id),
|
|
53
|
+
topic,
|
|
54
|
+
data,
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// ---------
|
|
59
|
+
// Presence
|
|
60
|
+
/**
|
|
61
|
+
* Listen for peer's presence data in a room, and publish the current user's
|
|
62
|
+
* presence.
|
|
63
|
+
*
|
|
64
|
+
* @see https://instantdb.com/docs/presence-and-topics
|
|
65
|
+
*/
|
|
66
|
+
function usePresence(room, opts = {}) {
|
|
67
|
+
const initial = (room.core._reactor.getPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id), opts) ?? {
|
|
68
|
+
peers: {},
|
|
69
|
+
isLoading: true,
|
|
70
|
+
});
|
|
71
|
+
const peers = (0, vue_1.shallowRef)(initial.peers);
|
|
72
|
+
const isLoading = (0, vue_1.shallowRef)(initial.isLoading);
|
|
73
|
+
const user = (0, vue_1.shallowRef)(initial.user);
|
|
74
|
+
const error = (0, vue_1.shallowRef)(initial.error);
|
|
75
|
+
(0, vue_1.watchEffect)((onCleanup) => {
|
|
76
|
+
// DUX-DELTA(ssr): no presence subscription on the server.
|
|
77
|
+
if (!(0, utils_js_1.isClient)())
|
|
78
|
+
return;
|
|
79
|
+
// END DUX-DELTA
|
|
80
|
+
const type = (0, vue_1.toValue)(room.type);
|
|
81
|
+
const id = (0, vue_1.toValue)(room.id);
|
|
82
|
+
const unsub = room.core._reactor.subscribePresence(type, id, opts, (data) => {
|
|
83
|
+
peers.value = data.peers;
|
|
84
|
+
isLoading.value = data.isLoading;
|
|
85
|
+
if ('user' in data)
|
|
86
|
+
user.value = data.user;
|
|
87
|
+
if ('error' in data)
|
|
88
|
+
error.value = data.error;
|
|
89
|
+
});
|
|
90
|
+
onCleanup(unsub);
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
peers,
|
|
94
|
+
isLoading,
|
|
95
|
+
user,
|
|
96
|
+
error,
|
|
97
|
+
publishPresence: (data) => {
|
|
98
|
+
room.core._reactor.publishPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id), data);
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Publishes presence data to a room.
|
|
104
|
+
*
|
|
105
|
+
* @see https://instantdb.com/docs/presence-and-topics
|
|
106
|
+
*/
|
|
107
|
+
function useSyncPresence(room, data) {
|
|
108
|
+
(0, vue_1.watchEffect)((onCleanup) => {
|
|
109
|
+
// DUX-DELTA(ssr): no room join on the server.
|
|
110
|
+
if (!(0, utils_js_1.isClient)())
|
|
111
|
+
return;
|
|
112
|
+
// END DUX-DELTA
|
|
113
|
+
const type = (0, vue_1.toValue)(room.type);
|
|
114
|
+
const id = (0, vue_1.toValue)(room.id);
|
|
115
|
+
const unsub = room.core._reactor.joinRoom(type, id, (0, vue_1.toValue)(data));
|
|
116
|
+
onCleanup(unsub);
|
|
117
|
+
});
|
|
118
|
+
(0, vue_1.watchEffect)(() => {
|
|
119
|
+
// DUX-DELTA(ssr): no presence publish on the server.
|
|
120
|
+
if (!(0, utils_js_1.isClient)())
|
|
121
|
+
return;
|
|
122
|
+
// END DUX-DELTA
|
|
123
|
+
room.core._reactor.publishPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id), (0, vue_1.toValue)(data));
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// -----------------
|
|
127
|
+
// Typing Indicator
|
|
128
|
+
/**
|
|
129
|
+
* Manage typing indicator state.
|
|
130
|
+
*
|
|
131
|
+
* @see https://instantdb.com/docs/presence-and-topics
|
|
132
|
+
*/
|
|
133
|
+
function useTypingIndicator(room, inputName, opts = {}) {
|
|
134
|
+
let timeoutId = null;
|
|
135
|
+
const presence = usePresence(room, {
|
|
136
|
+
keys: [inputName],
|
|
137
|
+
});
|
|
138
|
+
const active = (0, vue_1.shallowRef)([]);
|
|
139
|
+
(0, vue_1.watchEffect)(() => {
|
|
140
|
+
if (opts?.writeOnly) {
|
|
141
|
+
active.value = [];
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Track peers so we re-run when presence updates
|
|
145
|
+
void presence.peers.value;
|
|
146
|
+
const snapshot = room.core._reactor.getPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id));
|
|
147
|
+
active.value = Object.values(snapshot?.peers ?? {}).filter((p) => p[inputName] === true);
|
|
148
|
+
});
|
|
149
|
+
const setActive = (isActive) => {
|
|
150
|
+
room.core._reactor.publishPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id), {
|
|
151
|
+
[inputName]: isActive ? true : null,
|
|
152
|
+
});
|
|
153
|
+
if (timeoutId) {
|
|
154
|
+
clearTimeout(timeoutId);
|
|
155
|
+
timeoutId = null;
|
|
156
|
+
}
|
|
157
|
+
if (!isActive)
|
|
158
|
+
return;
|
|
159
|
+
if (opts?.timeout === null || opts?.timeout === 0)
|
|
160
|
+
return;
|
|
161
|
+
timeoutId = setTimeout(() => {
|
|
162
|
+
room.core._reactor.publishPresence((0, vue_1.toValue)(room.type), (0, vue_1.toValue)(room.id), {
|
|
163
|
+
[inputName]: null,
|
|
164
|
+
});
|
|
165
|
+
}, opts?.timeout ?? exports.defaultActivityStopTimeout);
|
|
166
|
+
};
|
|
167
|
+
(0, utils_js_1.tryOnScopeDispose)(() => {
|
|
168
|
+
if (timeoutId) {
|
|
169
|
+
clearTimeout(timeoutId);
|
|
170
|
+
timeoutId = null;
|
|
171
|
+
}
|
|
172
|
+
// Clear sticky typing state on unmount, even when timeout is disabled.
|
|
173
|
+
setActive(false);
|
|
174
|
+
});
|
|
175
|
+
const onKeydown = (e) => {
|
|
176
|
+
const isEnter = opts?.stopOnEnter && e.key === 'Enter';
|
|
177
|
+
const isActive = !isEnter;
|
|
178
|
+
setActive(isActive);
|
|
179
|
+
};
|
|
180
|
+
const onBlur = () => {
|
|
181
|
+
setActive(false);
|
|
182
|
+
};
|
|
183
|
+
return {
|
|
184
|
+
active,
|
|
185
|
+
setActive,
|
|
186
|
+
inputProps: { onKeydown, onBlur },
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// --------------
|
|
190
|
+
// Hooks namespace
|
|
191
|
+
exports.rooms = {
|
|
192
|
+
useTopicEffect,
|
|
193
|
+
usePublishTopic,
|
|
194
|
+
usePresence,
|
|
195
|
+
useSyncPresence,
|
|
196
|
+
useTypingIndicator,
|
|
197
|
+
};
|
|
198
|
+
// ------------
|
|
199
|
+
// Class
|
|
200
|
+
class InstantDuxRoom {
|
|
201
|
+
core;
|
|
202
|
+
type;
|
|
203
|
+
id;
|
|
204
|
+
constructor(core, type, id) {
|
|
205
|
+
this.core = core;
|
|
206
|
+
this.type = type;
|
|
207
|
+
this.id = id;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.InstantDuxRoom = InstantDuxRoom;
|
|
211
|
+
//# sourceMappingURL=InstantDuxRoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstantDuxRoom.js","sourceRoot":"","sources":["../../../../src/vue/baseline/InstantDuxRoom.ts"],"names":[],"mappings":"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","sourcesContent":["// Vendored from @instantdb/vue/src/InstantVueRoom.ts — see UPSTREAM.md.\n// Deltas: class/handle rename (InstantVueRoom → InstantDuxRoom) and the SSR\n// floor guards on each reactor subscription.\nimport type {\n InstantCoreDatabase,\n InstantSchemaDef,\n PresenceOpts,\n PresenceResponse,\n RoomSchemaShape,\n} from '@instantdb/core'\nimport type { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue'\nimport { shallowRef, toValue, watchEffect } from 'vue'\n\nimport { isClient, tryOnScopeDispose } from './utils.js'\n\n// ------\n// Types\n\nexport type PresenceHandle<PresenceShape, Keys extends keyof PresenceShape> = {\n [K in keyof PresenceResponse<PresenceShape, Keys>]: ShallowRef<\n PresenceResponse<PresenceShape, Keys>[K]\n >\n} & {\n publishPresence: (data: Partial<PresenceShape>) => void\n}\n\nexport interface TypingIndicatorOpts {\n timeout?: number | null\n stopOnEnter?: boolean\n // Perf opt - `active` will always be an empty array\n writeOnly?: boolean\n}\n\nexport interface TypingIndicatorHandle<PresenceShape> {\n active: Ref<PresenceShape[]>\n setActive: (active: boolean) => void\n /**\n * Listener keys are lowercased (`onKeydown`, not `onKeyDown`) so that\n * Vue's `v-bind` spread hyphenates them correctly to native DOM events\n * (`keydown`). With camelCase Vue would emit a non-existent `key-down`\n * listener and the indicator would never fire.\n */\n inputProps: {\n onKeydown: (e: KeyboardEvent) => void\n onBlur: () => void\n }\n}\n\nexport const defaultActivityStopTimeout = 1_000\n\n// ------\n// Topics\n\n/**\n * Listen for broadcasted events given a room and topic.\n *\n * @see https://instantdb.com/docs/presence-and-topics\n */\nexport function useTopicEffect<\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n TopicType extends keyof RoomSchema[RoomType]['topics'],\n>(\n room: InstantDuxRoom<any, RoomSchema, RoomType>,\n topic: TopicType,\n onEvent: (\n event: RoomSchema[RoomType]['topics'][TopicType],\n peer: RoomSchema[RoomType]['presence'],\n ) => any,\n): void {\n watchEffect((onCleanup) => {\n // DUX-DELTA(ssr): no topic subscription on the server.\n if (!isClient())\n return\n // END DUX-DELTA\n const type = toValue(room.type)\n const id = toValue(room.id)\n const unsub = room.core._reactor.subscribeTopic(\n type,\n id,\n topic,\n (event: any, peer: any) => {\n onEvent(event, peer)\n },\n )\n onCleanup(unsub)\n })\n}\n\n/**\n * Broadcast an event to a room.\n *\n * @see https://instantdb.com/docs/presence-and-topics\n */\nexport function usePublishTopic<\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n TopicType extends keyof RoomSchema[RoomType]['topics'],\n>(\n room: InstantDuxRoom<any, RoomSchema, RoomType>,\n topic: TopicType,\n): (data: RoomSchema[RoomType]['topics'][TopicType]) => void {\n watchEffect((onCleanup) => {\n // DUX-DELTA(ssr): no room join on the server.\n if (!isClient())\n return\n // END DUX-DELTA\n const type = toValue(room.type) as string\n const id = toValue(room.id)\n const unsub = room.core._reactor.joinRoom(type, id)\n onCleanup(unsub)\n })\n\n return (data: RoomSchema[RoomType]['topics'][TopicType]) => {\n room.core._reactor.publishTopic({\n roomType: toValue(room.type),\n roomId: toValue(room.id),\n topic,\n data,\n })\n }\n}\n\n// ---------\n// Presence\n\n/**\n * Listen for peer's presence data in a room, and publish the current user's\n * presence.\n *\n * @see https://instantdb.com/docs/presence-and-topics\n */\nexport function usePresence<\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n Keys extends keyof RoomSchema[RoomType]['presence'],\n>(\n room: InstantDuxRoom<any, RoomSchema, RoomType>,\n opts: PresenceOpts<RoomSchema[RoomType]['presence'], Keys> = {},\n): PresenceHandle<RoomSchema[RoomType]['presence'], Keys> {\n const initial = (room.core._reactor.getPresence(\n toValue(room.type),\n toValue(room.id),\n opts,\n ) ?? {\n peers: {},\n isLoading: true,\n }) as PresenceResponse<RoomSchema[RoomType]['presence'], Keys>\n\n const peers = shallowRef(initial.peers)\n const isLoading = shallowRef(initial.isLoading)\n const user = shallowRef<any>((initial as any).user)\n const error = shallowRef<any>((initial as any).error)\n\n watchEffect((onCleanup) => {\n // DUX-DELTA(ssr): no presence subscription on the server.\n if (!isClient())\n return\n // END DUX-DELTA\n const type = toValue(room.type)\n const id = toValue(room.id)\n const unsub = room.core._reactor.subscribePresence(\n type,\n id,\n opts,\n (data: any) => {\n peers.value = data.peers\n isLoading.value = data.isLoading\n if ('user' in data)\n user.value = data.user\n if ('error' in data)\n error.value = data.error\n },\n )\n onCleanup(unsub)\n })\n\n return {\n peers,\n isLoading,\n user,\n error,\n publishPresence: (data: Partial<RoomSchema[RoomType]['presence']>) => {\n room.core._reactor.publishPresence(\n toValue(room.type),\n toValue(room.id),\n data,\n )\n },\n } as PresenceHandle<RoomSchema[RoomType]['presence'], Keys>\n}\n\n/**\n * Publishes presence data to a room.\n *\n * @see https://instantdb.com/docs/presence-and-topics\n */\nexport function useSyncPresence<\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n>(\n room: InstantDuxRoom<any, RoomSchema, RoomType>,\n data: MaybeRefOrGetter<Partial<RoomSchema[RoomType]['presence']>>,\n): void {\n watchEffect((onCleanup) => {\n // DUX-DELTA(ssr): no room join on the server.\n if (!isClient())\n return\n // END DUX-DELTA\n const type = toValue(room.type) as string\n const id = toValue(room.id)\n const unsub = room.core._reactor.joinRoom(type, id, toValue(data))\n onCleanup(unsub)\n })\n\n watchEffect(() => {\n // DUX-DELTA(ssr): no presence publish on the server.\n if (!isClient())\n return\n // END DUX-DELTA\n room.core._reactor.publishPresence(\n toValue(room.type),\n toValue(room.id),\n toValue(data),\n )\n })\n}\n\n// -----------------\n// Typing Indicator\n\n/**\n * Manage typing indicator state.\n *\n * @see https://instantdb.com/docs/presence-and-topics\n */\nexport function useTypingIndicator<\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n>(\n room: InstantDuxRoom<any, RoomSchema, RoomType>,\n inputName: string,\n opts: TypingIndicatorOpts = {},\n): TypingIndicatorHandle<RoomSchema[RoomType]['presence']> {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n const presence = usePresence(room, {\n keys: [inputName] as (keyof RoomSchema[RoomType]['presence'])[],\n })\n\n const active = shallowRef<RoomSchema[RoomType]['presence'][]>([])\n\n watchEffect(() => {\n if (opts?.writeOnly) {\n active.value = []\n return\n }\n // Track peers so we re-run when presence updates\n void presence.peers.value\n const snapshot = room.core._reactor.getPresence(\n toValue(room.type),\n toValue(room.id),\n )\n active.value = Object.values(snapshot?.peers ?? {}).filter(\n (p: any) => p[inputName] === true,\n )\n })\n\n const setActive = (isActive: boolean) => {\n room.core._reactor.publishPresence(toValue(room.type), toValue(room.id), {\n [inputName]: isActive ? true : null,\n } as Partial<RoomSchema[RoomType]['presence']>)\n\n if (timeoutId) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n\n if (!isActive)\n return\n if (opts?.timeout === null || opts?.timeout === 0)\n return\n\n timeoutId = setTimeout(() => {\n room.core._reactor.publishPresence(toValue(room.type), toValue(room.id), {\n [inputName]: null,\n } as Partial<RoomSchema[RoomType]['presence']>)\n }, opts?.timeout ?? defaultActivityStopTimeout)\n }\n\n tryOnScopeDispose(() => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n // Clear sticky typing state on unmount, even when timeout is disabled.\n setActive(false)\n })\n\n const onKeydown = (e: KeyboardEvent) => {\n const isEnter = opts?.stopOnEnter && e.key === 'Enter'\n const isActive = !isEnter\n setActive(isActive)\n }\n\n const onBlur = () => {\n setActive(false)\n }\n\n return {\n active,\n setActive,\n inputProps: { onKeydown, onBlur },\n }\n}\n\n// --------------\n// Hooks namespace\n\nexport const rooms = {\n useTopicEffect,\n usePublishTopic,\n usePresence,\n useSyncPresence,\n useTypingIndicator,\n}\n\n// ------------\n// Class\n\nexport class InstantDuxRoom<\n Schema extends InstantSchemaDef<any, any, any>,\n RoomSchema extends RoomSchemaShape,\n RoomType extends keyof RoomSchema,\n> {\n core: InstantCoreDatabase<Schema, boolean>\n type: ComputedRef<RoomType> | RoomType\n id: ComputedRef<string> | string\n\n constructor(\n core: InstantCoreDatabase<Schema, boolean>,\n type: ComputedRef<RoomType> | RoomType,\n id: ComputedRef<string> | string,\n ) {\n this.core = core\n this.type = type\n this.id = id\n }\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const Cursor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
color: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
9
|
+
color: {
|
|
10
|
+
type: StringConstructor;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
14
|
+
export default Cursor;
|
|
15
|
+
//# sourceMappingURL=Cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cursor.d.ts","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/Cursor.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,MAAM;;;;;;;;;;;;iGAmCjB,CAAA;AAEF,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Cursor = void 0;
|
|
4
|
+
// Vendored from @instantdb/vue/src/components/Cursor.vue — see UPSTREAM.md.
|
|
5
|
+
// DUX-DELTA(components): shipped as a `.ts` render function rather than a
|
|
6
|
+
// `.vue` SFC, so the library needs no SFC compile step and the boundary lint
|
|
7
|
+
// can see the source. Behavior matches the SFC.
|
|
8
|
+
const vue_1 = require("vue");
|
|
9
|
+
const paths = [
|
|
10
|
+
{ fill: 'rgba(0,0,0,.2)', useColor: false },
|
|
11
|
+
{ fill: 'white', useColor: false },
|
|
12
|
+
{ fill: null, useColor: true },
|
|
13
|
+
];
|
|
14
|
+
exports.Cursor = (0, vue_1.defineComponent)({
|
|
15
|
+
name: 'Cursor',
|
|
16
|
+
props: { color: { type: String, required: true } },
|
|
17
|
+
setup(props) {
|
|
18
|
+
return () => (0, vue_1.h)('svg', {
|
|
19
|
+
style: { height: '35px', width: '35px' },
|
|
20
|
+
viewBox: '0 0 35 35',
|
|
21
|
+
fill: 'none',
|
|
22
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
23
|
+
}, paths.map((layer, index) => (0, vue_1.h)('g', {
|
|
24
|
+
key: index,
|
|
25
|
+
fill: layer.useColor ? props.color || 'black' : layer.fill,
|
|
26
|
+
transform: 'matrix(1, 0, 0, 1, -11.999999046325684, -8.406899452209473)',
|
|
27
|
+
}, index === 2
|
|
28
|
+
? [
|
|
29
|
+
(0, vue_1.h)('path', { d: 'm19.751 24.4155-1.844.774-3.1-7.374 1.841-.775z' }),
|
|
30
|
+
(0, vue_1.h)('path', { d: 'm13 10.814v11.188l2.969-2.866.428-.139h4.768z' }),
|
|
31
|
+
]
|
|
32
|
+
: [
|
|
33
|
+
(0, vue_1.h)('path', { d: 'm12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z' }),
|
|
34
|
+
(0, vue_1.h)('path', { d: 'm21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z' }),
|
|
35
|
+
])));
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
exports.default = exports.Cursor;
|
|
39
|
+
//# sourceMappingURL=Cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cursor.js","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/Cursor.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,gDAAgD;AAChD,6BAAwC;AAExC,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;CACtB,CAAA;AAEG,QAAA,MAAM,GAAG,IAAA,qBAAe,EAAC;IACpC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAClD,KAAK,CAAC,KAAK;QACT,OAAO,GAAG,EAAE,CACV,IAAA,OAAC,EACC,KAAK,EACL;YACE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YACxC,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,4BAA4B;SACpC,EACD,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACzB,IAAA,OAAC,EACC,GAAG,EACH;YACE,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YAC1D,SAAS,EACP,6DAA6D;SAChE,EACD,KAAK,KAAK,CAAC;YACT,CAAC,CAAC;gBACE,IAAA,OAAC,EAAC,MAAM,EAAE,EAAE,CAAC,EAAE,iDAAiD,EAAE,CAAC;gBACnE,IAAA,OAAC,EAAC,MAAM,EAAE,EAAE,CAAC,EAAE,+CAA+C,EAAE,CAAC;aAClE;YACH,CAAC,CAAC;gBACE,IAAA,OAAC,EAAC,MAAM,EAAE,EAAE,CAAC,EAAE,qDAAqD,EAAE,CAAC;gBACvE,IAAA,OAAC,EAAC,MAAM,EAAE,EAAE,CAAC,EAAE,wDAAwD,EAAE,CAAC;aAC3E,CACN,CACF,CACF,CAAA;IACL,CAAC;CACF,CAAC,CAAA;AAEF,kBAAe,cAAM,CAAA","sourcesContent":["// Vendored from @instantdb/vue/src/components/Cursor.vue — see UPSTREAM.md.\n// DUX-DELTA(components): shipped as a `.ts` render function rather than a\n// `.vue` SFC, so the library needs no SFC compile step and the boundary lint\n// can see the source. Behavior matches the SFC.\nimport { defineComponent, h } from 'vue'\n\nconst paths = [\n { fill: 'rgba(0,0,0,.2)', useColor: false },\n { fill: 'white', useColor: false },\n { fill: null, useColor: true },\n] as const\n\nexport const Cursor = defineComponent({\n name: 'Cursor',\n props: { color: { type: String, required: true } },\n setup(props) {\n return () =>\n h(\n 'svg',\n {\n style: { height: '35px', width: '35px' },\n viewBox: '0 0 35 35',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n },\n paths.map((layer, index) =>\n h(\n 'g',\n {\n key: index,\n fill: layer.useColor ? props.color || 'black' : layer.fill,\n transform:\n 'matrix(1, 0, 0, 1, -11.999999046325684, -8.406899452209473)',\n },\n index === 2\n ? [\n h('path', { d: 'm19.751 24.4155-1.844.774-3.1-7.374 1.841-.775z' }),\n h('path', { d: 'm13 10.814v11.188l2.969-2.866.428-.139h4.768z' }),\n ]\n : [\n h('path', { d: 'm12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z' }),\n h('path', { d: 'm21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z' }),\n ],\n ),\n ),\n )\n },\n})\n\nexport default Cursor\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ComputedRef, PropType } from 'vue';
|
|
2
|
+
interface GenericRoom {
|
|
3
|
+
type: ComputedRef<string> | string;
|
|
4
|
+
id: ComputedRef<string> | string;
|
|
5
|
+
core: any;
|
|
6
|
+
}
|
|
7
|
+
export declare const Cursors: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
room: {
|
|
9
|
+
type: PropType<GenericRoom>;
|
|
10
|
+
required: true;
|
|
11
|
+
};
|
|
12
|
+
spaceId: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
required: false;
|
|
15
|
+
};
|
|
16
|
+
as: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
userCursorColor: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
required: false;
|
|
23
|
+
};
|
|
24
|
+
propagate: {
|
|
25
|
+
type: BooleanConstructor;
|
|
26
|
+
default: boolean;
|
|
27
|
+
};
|
|
28
|
+
zIndex: {
|
|
29
|
+
type: NumberConstructor;
|
|
30
|
+
default: number;
|
|
31
|
+
};
|
|
32
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
35
|
+
room: {
|
|
36
|
+
type: PropType<GenericRoom>;
|
|
37
|
+
required: true;
|
|
38
|
+
};
|
|
39
|
+
spaceId: {
|
|
40
|
+
type: StringConstructor;
|
|
41
|
+
required: false;
|
|
42
|
+
};
|
|
43
|
+
as: {
|
|
44
|
+
type: StringConstructor;
|
|
45
|
+
default: string;
|
|
46
|
+
};
|
|
47
|
+
userCursorColor: {
|
|
48
|
+
type: StringConstructor;
|
|
49
|
+
required: false;
|
|
50
|
+
};
|
|
51
|
+
propagate: {
|
|
52
|
+
type: BooleanConstructor;
|
|
53
|
+
default: boolean;
|
|
54
|
+
};
|
|
55
|
+
zIndex: {
|
|
56
|
+
type: NumberConstructor;
|
|
57
|
+
default: number;
|
|
58
|
+
};
|
|
59
|
+
}>> & Readonly<{}>, {
|
|
60
|
+
as: string;
|
|
61
|
+
propagate: boolean;
|
|
62
|
+
zIndex: number;
|
|
63
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
64
|
+
export default Cursors;
|
|
65
|
+
//# sourceMappingURL=Cursors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cursors.d.ts","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/Cursors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAyBhD,UAAU,WAAW;IACnB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAClC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAChC,IAAI,EAAE,GAAG,CAAA;CACV;AAED,eAAO,MAAM,OAAO;;cAGQ,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;cAArB,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;4EA8H/C,CAAA;AAEF,eAAe,OAAO,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Cursors = void 0;
|
|
7
|
+
// Vendored from @instantdb/vue/src/components/Cursors.vue — see UPSTREAM.md.
|
|
8
|
+
// DUX-DELTA(components): shipped as a `.ts` render function rather than a
|
|
9
|
+
// `.vue` SFC. Behavior matches the SFC: publish the local cursor on
|
|
10
|
+
// pointer/touch move, render peer cursors from presence.
|
|
11
|
+
const vue_1 = require("vue");
|
|
12
|
+
const InstantDuxRoom_js_1 = require("../InstantDuxRoom.js");
|
|
13
|
+
const Cursor_js_1 = __importDefault(require("./Cursor.js"));
|
|
14
|
+
exports.Cursors = (0, vue_1.defineComponent)({
|
|
15
|
+
name: 'Cursors',
|
|
16
|
+
props: {
|
|
17
|
+
room: { type: Object, required: true },
|
|
18
|
+
spaceId: { type: String, required: false },
|
|
19
|
+
as: { type: String, default: 'div' },
|
|
20
|
+
userCursorColor: { type: String, required: false },
|
|
21
|
+
propagate: { type: Boolean, default: false },
|
|
22
|
+
zIndex: { type: Number, default: 99999 },
|
|
23
|
+
},
|
|
24
|
+
setup(props, { slots }) {
|
|
25
|
+
const spaceId = (0, vue_1.computed)(() => props.spaceId
|
|
26
|
+
|| `cursors-space-default--${String((0, vue_1.toValue)(props.room.type))}-${(0, vue_1.toValue)(props.room.id)}`);
|
|
27
|
+
const { peers, publishPresence } = (0, InstantDuxRoom_js_1.usePresence)(props.room, {
|
|
28
|
+
keys: [spaceId.value],
|
|
29
|
+
});
|
|
30
|
+
const fullPresence = (0, vue_1.computed)(() => {
|
|
31
|
+
void peers.value;
|
|
32
|
+
return props.room.core._reactor.getPresence((0, vue_1.toValue)(props.room.type), (0, vue_1.toValue)(props.room.id));
|
|
33
|
+
});
|
|
34
|
+
const cursorPeers = (0, vue_1.computed)(() => {
|
|
35
|
+
const sid = spaceId.value;
|
|
36
|
+
return Object.entries(peers.value || {}).flatMap(([peerId, p]) => {
|
|
37
|
+
const cursor = p?.[sid];
|
|
38
|
+
return cursor ? [{ peerId, cursor }] : [];
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
function publishCursor(rect, touch) {
|
|
42
|
+
const x = touch.clientX;
|
|
43
|
+
const y = touch.clientY;
|
|
44
|
+
const xPercent = ((x - rect.left) / rect.width) * 100;
|
|
45
|
+
const yPercent = ((y - rect.top) / rect.height) * 100;
|
|
46
|
+
publishPresence({
|
|
47
|
+
[spaceId.value]: { x, y, xPercent, yPercent, color: props.userCursorColor },
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function onMouseMove(e) {
|
|
51
|
+
if (!props.propagate)
|
|
52
|
+
e.stopPropagation();
|
|
53
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
54
|
+
publishCursor(rect, e);
|
|
55
|
+
}
|
|
56
|
+
function clearCursor() {
|
|
57
|
+
publishPresence({ [spaceId.value]: undefined });
|
|
58
|
+
}
|
|
59
|
+
function onTouchMove(e) {
|
|
60
|
+
if (e.touches.length !== 1)
|
|
61
|
+
return;
|
|
62
|
+
const touch = e.touches[0];
|
|
63
|
+
if (!touch || !(touch.target instanceof Element))
|
|
64
|
+
return;
|
|
65
|
+
if (!props.propagate)
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
const rect = touch.target.getBoundingClientRect();
|
|
68
|
+
publishCursor(rect, touch);
|
|
69
|
+
}
|
|
70
|
+
return () => (0, vue_1.h)(props.as, {
|
|
71
|
+
style: { position: 'relative' },
|
|
72
|
+
onMousemove: onMouseMove,
|
|
73
|
+
onMouseout: clearCursor,
|
|
74
|
+
onBlur: clearCursor,
|
|
75
|
+
onTouchmove: onTouchMove,
|
|
76
|
+
onTouchend: clearCursor,
|
|
77
|
+
}, [
|
|
78
|
+
slots.default?.(),
|
|
79
|
+
(0, vue_1.h)('div', {
|
|
80
|
+
style: {
|
|
81
|
+
position: 'absolute',
|
|
82
|
+
top: 0,
|
|
83
|
+
left: 0,
|
|
84
|
+
bottom: 0,
|
|
85
|
+
right: 0,
|
|
86
|
+
overflow: 'hidden',
|
|
87
|
+
pointerEvents: 'none',
|
|
88
|
+
userSelect: 'none',
|
|
89
|
+
zIndex: props.zIndex,
|
|
90
|
+
},
|
|
91
|
+
}, cursorPeers.value.map(({ peerId, cursor }) => (0, vue_1.h)('div', {
|
|
92
|
+
key: peerId,
|
|
93
|
+
style: {
|
|
94
|
+
position: 'absolute',
|
|
95
|
+
top: 0,
|
|
96
|
+
left: 0,
|
|
97
|
+
bottom: 0,
|
|
98
|
+
right: 0,
|
|
99
|
+
transform: `translate(${cursor.xPercent}%, ${cursor.yPercent}%)`,
|
|
100
|
+
transformOrigin: '0 0',
|
|
101
|
+
transition: 'transform 100ms',
|
|
102
|
+
},
|
|
103
|
+
}, slots.cursor
|
|
104
|
+
? slots.cursor({
|
|
105
|
+
color: cursor.color,
|
|
106
|
+
presence: fullPresence.value?.peers[peerId],
|
|
107
|
+
})
|
|
108
|
+
: (0, vue_1.h)(Cursor_js_1.default, { color: cursor.color ?? '' })))),
|
|
109
|
+
]);
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
exports.default = exports.Cursors;
|
|
113
|
+
//# sourceMappingURL=Cursors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cursors.js","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/Cursors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComputedRef, PropType } from 'vue'\n// Vendored from @instantdb/vue/src/components/Cursors.vue — see UPSTREAM.md.\n// DUX-DELTA(components): shipped as a `.ts` render function rather than a\n// `.vue` SFC. Behavior matches the SFC: publish the local cursor on\n// pointer/touch move, render peer cursors from presence.\nimport { computed, defineComponent, h, toValue } from 'vue'\nimport { usePresence } from '../InstantDuxRoom.js'\nimport Cursor from './Cursor.js'\n\ninterface CursorPresence {\n x: number\n y: number\n xPercent: number\n yPercent: number\n color?: string\n}\n\n// DUX-DELTA(types): the runtime `room` prop is the loose room handle, not a\n// concrete `InstantDuxRoom`. The official SFC infers `RoomSchema`/`RoomType`\n// per use; a `.ts` render fn can't express inferring generic props, and a\n// concrete room would reject one read back through Vue/Pinia reactivity (which\n// unwraps its deep `core`/reactor types). `core` is left loose so the handle\n// assigns however it's stored — no `markRaw` ceremony at the call site. It\n// stays assignable *to* `InstantDuxRoom<any, any, any>` for the internal\n// `usePresence` call.\ninterface GenericRoom {\n type: ComputedRef<string> | string\n id: ComputedRef<string> | string\n core: any\n}\n\nexport const Cursors = defineComponent({\n name: 'Cursors',\n props: {\n room: { type: Object as PropType<GenericRoom>, required: true },\n spaceId: { type: String, required: false },\n as: { type: String, default: 'div' },\n userCursorColor: { type: String, required: false },\n propagate: { type: Boolean, default: false },\n zIndex: { type: Number, default: 99999 },\n },\n setup(props, { slots }) {\n const spaceId = computed(\n () =>\n props.spaceId\n || `cursors-space-default--${String(toValue(props.room.type))}-${toValue(props.room.id)}`,\n )\n\n const { peers, publishPresence } = usePresence(props.room, {\n keys: [spaceId.value] as any,\n })\n\n const fullPresence = computed(() => {\n void peers.value\n return props.room.core._reactor.getPresence(\n toValue(props.room.type),\n toValue(props.room.id),\n )\n })\n\n const cursorPeers = computed(() => {\n const sid = spaceId.value\n return Object.entries(peers.value || {}).flatMap(([peerId, p]) => {\n const cursor = (p as any)?.[sid] as CursorPresence | undefined\n return cursor ? [{ peerId, cursor }] : []\n })\n })\n\n function publishCursor(\n rect: DOMRect,\n touch: { clientX: number, clientY: number },\n ) {\n const x = touch.clientX\n const y = touch.clientY\n const xPercent = ((x - rect.left) / rect.width) * 100\n const yPercent = ((y - rect.top) / rect.height) * 100\n publishPresence({\n [spaceId.value]: { x, y, xPercent, yPercent, color: props.userCursorColor },\n } as any)\n }\n\n function onMouseMove(e: MouseEvent) {\n if (!props.propagate)\n e.stopPropagation()\n const rect = (e.currentTarget as Element).getBoundingClientRect()\n publishCursor(rect, e)\n }\n\n function clearCursor() {\n publishPresence({ [spaceId.value]: undefined } as any)\n }\n\n function onTouchMove(e: TouchEvent) {\n if (e.touches.length !== 1)\n return\n const touch = e.touches[0]\n if (!touch || !(touch.target instanceof Element))\n return\n if (!props.propagate)\n e.stopPropagation()\n const rect = touch.target.getBoundingClientRect()\n publishCursor(rect, touch)\n }\n\n return () =>\n h(\n props.as,\n {\n style: { position: 'relative' },\n onMousemove: onMouseMove,\n onMouseout: clearCursor,\n onBlur: clearCursor,\n onTouchmove: onTouchMove,\n onTouchend: clearCursor,\n },\n [\n slots.default?.(),\n h(\n 'div',\n {\n style: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n overflow: 'hidden',\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: props.zIndex,\n },\n },\n cursorPeers.value.map(({ peerId, cursor }) =>\n h(\n 'div',\n {\n key: peerId,\n style: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n transform: `translate(${cursor.xPercent}%, ${cursor.yPercent}%)`,\n transformOrigin: '0 0',\n transition: 'transform 100ms',\n },\n },\n slots.cursor\n ? slots.cursor({\n color: cursor.color,\n presence: fullPresence.value?.peers[peerId],\n })\n : h(Cursor, { color: cursor.color ?? '' }),\n ),\n ),\n ),\n ],\n )\n },\n})\n\nexport default Cursors\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PropType, Ref } from 'vue';
|
|
2
|
+
interface AuthGateDb {
|
|
3
|
+
useAuth: () => {
|
|
4
|
+
isLoading: Ref<boolean>;
|
|
5
|
+
error: Ref<unknown>;
|
|
6
|
+
user: Ref<unknown>;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
type AnyDb = AuthGateDb;
|
|
10
|
+
export declare const SignedIn: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
11
|
+
db: {
|
|
12
|
+
type: PropType<AnyDb>;
|
|
13
|
+
required: true;
|
|
14
|
+
};
|
|
15
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}>[] | null | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
18
|
+
db: {
|
|
19
|
+
type: PropType<AnyDb>;
|
|
20
|
+
required: true;
|
|
21
|
+
};
|
|
22
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
23
|
+
export declare const SignedOut: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
24
|
+
db: {
|
|
25
|
+
type: PropType<AnyDb>;
|
|
26
|
+
required: true;
|
|
27
|
+
};
|
|
28
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
}>[] | null | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
31
|
+
db: {
|
|
32
|
+
type: PropType<AnyDb>;
|
|
33
|
+
required: true;
|
|
34
|
+
};
|
|
35
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAYxC,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM;QACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QACvB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QACnB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;KACnB,CAAA;CACF;AACD,KAAK,KAAK,GAAG,UAAU,CAAA;AAGvB,eAAO,MAAM,QAAQ;;cAEY,QAAQ,CAAC,KAAK,CAAC;;;;;;;cAAf,QAAQ,CAAC,KAAK,CAAC;;;iGAM9C,CAAA;AAEF,eAAO,MAAM,SAAS;;cAEW,QAAQ,CAAC,KAAK,CAAC;;;;;;;cAAf,QAAQ,CAAC,KAAK,CAAC;;;iGAM9C,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SignedOut = exports.SignedIn = void 0;
|
|
4
|
+
// Vendored from @instantdb/vue/src/components/SignedIn.vue + SignedOut.vue —
|
|
5
|
+
// see UPSTREAM.md.
|
|
6
|
+
// DUX-DELTA(components): shipped as `.ts` render functions rather than `.vue`
|
|
7
|
+
// SFCs. Behavior matches the SFCs: render the default slot only when the auth
|
|
8
|
+
// gate is satisfied and not loading/errored.
|
|
9
|
+
const vue_1 = require("vue");
|
|
10
|
+
// END DUX-DELTA
|
|
11
|
+
exports.SignedIn = (0, vue_1.defineComponent)({
|
|
12
|
+
name: 'SignedIn',
|
|
13
|
+
props: { db: { type: Object, required: true } },
|
|
14
|
+
setup(props, { slots }) {
|
|
15
|
+
const { isLoading, error, user } = props.db.useAuth();
|
|
16
|
+
return () => !isLoading.value && !error.value && user.value ? slots.default?.() : null;
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
exports.SignedOut = (0, vue_1.defineComponent)({
|
|
20
|
+
name: 'SignedOut',
|
|
21
|
+
props: { db: { type: Object, required: true } },
|
|
22
|
+
setup(props, { slots }) {
|
|
23
|
+
const { isLoading, error, user } = props.db.useAuth();
|
|
24
|
+
return () => !isLoading.value && !error.value && !user.value ? slots.default?.() : null;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../src/vue/baseline/components/auth.ts"],"names":[],"mappings":";;;AACA,6EAA6E;AAC7E,mBAAmB;AACnB,8EAA8E;AAC9E,8EAA8E;AAC9E,6CAA6C;AAC7C,6BAAqC;AAcrC,gBAAgB;AAEH,QAAA,QAAQ,GAAG,IAAA,qBAAe,EAAC;IACtC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAClE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAA;QACrD,OAAO,GAAG,EAAE,CACV,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,CAAC;CACF,CAAC,CAAA;AAEW,QAAA,SAAS,GAAG,IAAA,qBAAe,EAAC;IACvC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAClE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAA;QACrD,OAAO,GAAG,EAAE,CACV,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9E,CAAC;CACF,CAAC,CAAA","sourcesContent":["import type { PropType, Ref } from 'vue'\n// Vendored from @instantdb/vue/src/components/SignedIn.vue + SignedOut.vue —\n// see UPSTREAM.md.\n// DUX-DELTA(components): shipped as `.ts` render functions rather than `.vue`\n// SFCs. Behavior matches the SFCs: render the default slot only when the auth\n// gate is satisfied and not loading/errored.\nimport { defineComponent } from 'vue'\n\n// DUX-DELTA(types): the `db` prop is the minimal auth-gate surface, not the\n// full baseline db. The public surface is the overlay `IdbClient` (the only db\n// users hold); both it and the baseline satisfy this, so `:db=\"db\"` typechecks\n// with the public db without the components reaching up into the overlay layer.\ninterface AuthGateDb {\n useAuth: () => {\n isLoading: Ref<boolean>\n error: Ref<unknown>\n user: Ref<unknown>\n }\n}\ntype AnyDb = AuthGateDb\n// END DUX-DELTA\n\nexport const SignedIn = defineComponent({\n name: 'SignedIn',\n props: { db: { type: Object as PropType<AnyDb>, required: true } },\n setup(props, { slots }) {\n const { isLoading, error, user } = props.db.useAuth()\n return () =>\n !isLoading.value && !error.value && user.value ? slots.default?.() : null\n },\n})\n\nexport const SignedOut = defineComponent({\n name: 'SignedOut',\n props: { db: { type: Object as PropType<AnyDb>, required: true } },\n setup(props, { slots }) {\n const { isLoading, error, user } = props.db.useAuth()\n return () =>\n !isLoading.value && !error.value && !user.value ? slots.default?.() : null\n },\n})\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { SignedIn, SignedOut } from './components/auth.js';
|
|
2
|
+
export { Cursor } from './components/Cursor.js';
|
|
3
|
+
export { Cursors } from './components/Cursors.js';
|
|
4
|
+
export { init, InstantDuxDatabase } from './InstantDuxDatabase.js';
|
|
5
|
+
export type { UseAuthReturn, UseQueryReturn } from './InstantDuxDatabase.js';
|
|
6
|
+
export { InstantDuxRoom, rooms, usePresence, usePublishTopic, useSyncPresence, useTopicEffect, useTypingIndicator, } from './InstantDuxRoom.js';
|
|
7
|
+
export type { PresenceHandle, TypingIndicatorHandle, TypingIndicatorOpts, } from './InstantDuxRoom.js';
|
|
8
|
+
export { useInfiniteQuery } from './useInfiniteQuery.js';
|
|
9
|
+
export type { InfiniteQueryResult } from './useInfiniteQuery.js';
|
|
10
|
+
export { isClient, tryOnScopeDispose } from './utils.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vue/baseline/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAClE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EACL,cAAc,EACd,KAAK,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tryOnScopeDispose = exports.isClient = exports.useInfiniteQuery = exports.useTypingIndicator = exports.useTopicEffect = exports.useSyncPresence = exports.usePublishTopic = exports.usePresence = exports.rooms = exports.InstantDuxRoom = exports.InstantDuxDatabase = exports.init = exports.Cursors = exports.Cursor = exports.SignedOut = exports.SignedIn = void 0;
|
|
4
|
+
// The internal baseline surface — consumed only by the overlay and the parity
|
|
5
|
+
// harness, never re-exported from `/vue`. See UPSTREAM.md.
|
|
6
|
+
var auth_js_1 = require("./components/auth.js");
|
|
7
|
+
Object.defineProperty(exports, "SignedIn", { enumerable: true, get: function () { return auth_js_1.SignedIn; } });
|
|
8
|
+
Object.defineProperty(exports, "SignedOut", { enumerable: true, get: function () { return auth_js_1.SignedOut; } });
|
|
9
|
+
var Cursor_js_1 = require("./components/Cursor.js");
|
|
10
|
+
Object.defineProperty(exports, "Cursor", { enumerable: true, get: function () { return Cursor_js_1.Cursor; } });
|
|
11
|
+
var Cursors_js_1 = require("./components/Cursors.js");
|
|
12
|
+
Object.defineProperty(exports, "Cursors", { enumerable: true, get: function () { return Cursors_js_1.Cursors; } });
|
|
13
|
+
var InstantDuxDatabase_js_1 = require("./InstantDuxDatabase.js");
|
|
14
|
+
Object.defineProperty(exports, "init", { enumerable: true, get: function () { return InstantDuxDatabase_js_1.init; } });
|
|
15
|
+
Object.defineProperty(exports, "InstantDuxDatabase", { enumerable: true, get: function () { return InstantDuxDatabase_js_1.InstantDuxDatabase; } });
|
|
16
|
+
var InstantDuxRoom_js_1 = require("./InstantDuxRoom.js");
|
|
17
|
+
Object.defineProperty(exports, "InstantDuxRoom", { enumerable: true, get: function () { return InstantDuxRoom_js_1.InstantDuxRoom; } });
|
|
18
|
+
Object.defineProperty(exports, "rooms", { enumerable: true, get: function () { return InstantDuxRoom_js_1.rooms; } });
|
|
19
|
+
Object.defineProperty(exports, "usePresence", { enumerable: true, get: function () { return InstantDuxRoom_js_1.usePresence; } });
|
|
20
|
+
Object.defineProperty(exports, "usePublishTopic", { enumerable: true, get: function () { return InstantDuxRoom_js_1.usePublishTopic; } });
|
|
21
|
+
Object.defineProperty(exports, "useSyncPresence", { enumerable: true, get: function () { return InstantDuxRoom_js_1.useSyncPresence; } });
|
|
22
|
+
Object.defineProperty(exports, "useTopicEffect", { enumerable: true, get: function () { return InstantDuxRoom_js_1.useTopicEffect; } });
|
|
23
|
+
Object.defineProperty(exports, "useTypingIndicator", { enumerable: true, get: function () { return InstantDuxRoom_js_1.useTypingIndicator; } });
|
|
24
|
+
var useInfiniteQuery_js_1 = require("./useInfiniteQuery.js");
|
|
25
|
+
Object.defineProperty(exports, "useInfiniteQuery", { enumerable: true, get: function () { return useInfiniteQuery_js_1.useInfiniteQuery; } });
|
|
26
|
+
var utils_js_1 = require("./utils.js");
|
|
27
|
+
Object.defineProperty(exports, "isClient", { enumerable: true, get: function () { return utils_js_1.isClient; } });
|
|
28
|
+
Object.defineProperty(exports, "tryOnScopeDispose", { enumerable: true, get: function () { return utils_js_1.tryOnScopeDispose; } });
|
|
29
|
+
//# sourceMappingURL=index.js.map
|