diff --git a/.cursor/rules/global.mdc b/.cursor/rules/global.mdc new file mode 100644 index 0000000000000000000000000000000000000000..04f03de47ddd7afa32814f65c88c1813b698061c --- /dev/null +++ b/.cursor/rules/global.mdc @@ -0,0 +1,8 @@ +--- +description: +globs: +alwaysApply: true +--- +你是 Baklib 的自定义模版开发人员,使用 Liquid 语法并遵循 Baklib 模版开发手册的规范编写代码 + +- 使用 DaisyUI 写 HTML 代码 \ No newline at end of file diff --git a/.cursor/rules/theme-dev.mdc b/.cursor/rules/theme-dev.mdc new file mode 100644 index 0000000000000000000000000000000000000000..412385abb488162942298f319a370b4178bdd54a --- /dev/null +++ b/.cursor/rules/theme-dev.mdc @@ -0,0 +1,534 @@ +--- +description: +globs: +alwaysApply: false +--- +# Baklib 主题(Liquid 模板)开发文档 + +## 1. 什么是主题/模板? + +Baklib 主题(Theme)是基于 [Liquid](https://shopify.github.io/liquid/) 模板引擎的页面渲染方案。主题决定了站点的页面结构、样式、交互和内容展示方式。每个主题由一组模板文件、片段、资源和配置组成,支持高度自定义和动态扩展。 + +## 2. 主题目录结构与文件命名规范 + +每个主题位于 `themes/` 目录下,按类型分为 `wiki`、`community`、`cms` 等子目录。每个主题下通常包含如下结构: + +``` +themes/ + wiki/ + demo_wiki/ + assets/ # 静态资源(css/js/images) + config/ # 配置文件(如 settings_schema.json) + layout/ # 布局文件(如 theme.liquid) + locales/ # 多语言翻译 + snippets/ # 片段文件(可复用的 UI 单元) + src/ # 前端源码 + statics/ # 静态页面 + templates/ # 页面模板(如 page.liquid、index.liquid) +``` + +- **模板文件**:`templates/` 下的 `.liquid` 文件,决定页面结构。 +- **片段文件**:`snippets/` 下的 `_xxx.liquid`,可被模板 `render` 引用。 +- **布局文件**:`layout/theme.liquid`,全局页面骨架,插槽为 `{{ content_for_layout }}`。 +- **资源文件**:`assets/` 下的 css/js/image。 +- **配置文件**:`config/settings_schema.json`,定义主题可配置项。 + +### 文件命名规范 +- 模板文件:如 `page.liquid`、`index.liquid`、`search.liquid`。 +- 片段文件:以 `_` 开头,如 `_header.liquid`、`_footer.liquid`。 +- 布局文件:`theme.liquid`。 +- 配置文件:`settings_schema.json`。 + +## 3. 文件内容规范与 schema 说明 + +### 模板文件(如 page.liquid) +- 支持标准 HTML + Liquid 语法。 +- 推荐每个模板文件底部添加 `{% schema %} ... {% endschema %}`,描述该模板的元信息和可配置项。 +- 示例: + +```liquid +{% schema %} + { + "name": "Page", + "description": "内容页模板", + "thumb_url": "images/theme/page.png", + "settings": [ + { "id": "show_list", "type": "checkbox", "default": false, "label": "栏目" }, + { "id": "title", "type": "text", "readonly": true, "label": "标题" }, + { "id": "tags", "type": "tag_picker", "multiple": true, "label": "标签" }, + { "id": "description", "type": "textarea", "label": "描述" }, + { "id": "icon", "type": "image_picker", "label": "图标" }, + { "id": "content", "type": "richtext", "label": "正文" } + ] + } +{% endschema %} +``` + +### 配置文件(settings_schema.json) +- 定义主题全局可配置项,支持分组、类型、默认值、说明等。 +- 支持的类型有:`text`、`checkbox`、`radio`、`image_picker`、`html`、`tag_picker`、`richtext` 等。 +- 示例片段: + +```json +{ + "id": "logo_url", + "type": "image_picker", + "label": "Logo", + "info": "页头显示的 logo 图片" +} +``` + +## 4. 模板可用变量与对象 + +模板渲染时,系统会自动注入一系列变量和对象,常用如下: + +### 站点对象 `site` +- `site.name`:站点名称 +- `site.settings`:主题配置项(见 settings_schema.json) +- `site.pages`:页面树(可通过路径索引,如 `site.pages['/']`) +- `site.index_path`:首页路径 +- `site.favicon_url`:站点 favicon +- `site.nav_tree_path`:导航树接口路径 +- `site.plugins`:插件相关对象(如 `site.plugins.feedback`) + +### 页面对象 `page` +- `page.id`:页面 ID +- `page.path`:页面路径 +- `page.link_text`:页面标题 +- `page.settings`:页面配置项(如 `title`、`tags`、`description`、`icon`、`content` 等) +- `page.parent`:父级页面对象 +- `page.children_in_list`:子页面列表 +- `page.breadcrumb`:面包屑导航数组 +- `page.author`:作者对象(如 `page.author.name`、`page.author.avatar_url`) +- `page.published_at`:发布时间 +- `page.prev_page`/`page.next_page`:前后页对象 + +### 用户对象 `current_user` +- `current_user.name`:当前登录用户名称 +- `current_user.image`:头像 + +### 搜索对象 `search` +- `search.pages`:搜索结果页面数组 +- `search.keywords`:搜索关键词 +- `search.page_number`:当前页码 +- `search.extends`:自定义结果集 + +### 其他变量 +- `params`:当前请求参数(如 `params.q`) + +## 5. 可用标签与过滤器 + +### 片段渲染标签 +- `{% render 'xxx', param1: value1 %}`:渲染 snippets 目录下的 `_xxx.liquid` 片段。 + +### 表单相关标签 +- `{% form_tag 'feedback', page: page %} ... {% endform_tag %}`:渲染反馈表单。 +- `{% form_tag 'search' %} ... {% endform_tag %}`:渲染搜索表单。 +- `{% form_field_tag 'color', ... %}`:渲染颜色选择字段。 + +### 分页标签 +- `{% paginate_tag search.pages, as: 'pages', per: 10 %} ... {% endpaginate_tag %}`:分页渲染。 + +### 资源引用过滤器 +- `{{ 'images/logo.png' | asset_url }}`:获取资源 URL。 +- `{{ 'main.css' | asset_url | stylesheet_tag }}`:引用样式表。 +- `{{ 'main.js' | asset_url | script_tag }}`:引用脚本。 + +### 国际化过滤器 +- `{{ 'generic.back' | t }}`:多语言翻译。 + +### 其他常用过滤器 +- `date`:日期格式化,如 `{{ page.published_at | date: "%Y-%m-%d" }}` +- `truncate`:字符串截断 +- `default`:默认值 +- `size`:数组长度 +- `order_by`:排序 + +## 6. 动态表单与 settings_schema.json + +主题的可配置项和页面的可配置项,均通过动态表单(DynamicForm)机制实现。支持丰富的字段类型、校验、默认值、只读、必填、多选等。 + +- 字段类型参考: + - `text`:文本 + - `textarea`:多行文本 + - `checkbox`:勾选框 + - `radio`:单选 + - `image_picker`:图片选择 + - `tag_picker`:标签选择 + - `richtext`:富文本 + - `html`:自定义 HTML +- 字段属性: + - `id`:唯一标识 + - `label`:显示名称 + - `default`:默认值 + - `readonly`:只读 + - `required`:必填 + - `multiple`:多选 + - `info`:说明 + +## 7. 主题开发最佳实践与常见问题 + +### 最佳实践 +- 合理拆分片段(snippets),提升复用性和可维护性。 +- 善用 schema 和 settings,提升主题的灵活性和可配置性。 +- 使用国际化过滤器 `t`,支持多语言。 +- 资源引用统一用 `asset_url`,避免路径硬编码。 +- 布局文件建议只做全局骨架,页面内容用 `{{ content_for_layout }}` 插槽。 +- 充分利用 `form_tag`、`form_field_tag` 等扩展标签,提升表单交互体验。 + +### 常见问题 +- 变量未生效:请确认变量名拼写、作用域和注入时机。 +- 片段未渲染:请确认 `render` 标签参数和文件名。 +- 资源 404:请确认资源已放在 `assets/` 目录并正确引用。 +- 配置项未生效:请检查 `settings_schema.json` 或模板 schema 是否正确。 + +--- + +如需更多帮助,请访问 [Baklib 主题开发文档](https://help.baklib.cn/themes/wiki) 或联系技术支持。 + +## 8. 自定义表单标签与字段 + +Baklib 主题系统扩展了丰富的表单标签和字段类型,方便开发者在模板中灵活实现各种交互。 + +### 8.1 表单标签(form_tag) + +| 表单类型 | 用途说明 | 常用参数(示例) | 说明 | +|------------------------|-------------------|-------------------------|------| +| `feedback` | 反馈表单 | `page: page` | 用于页面底部反馈,自动带上页面信息 | +| `search` | 搜索表单 | 无/`class: '...'` | 用于站点内搜索,输入框名为 `q` | +| `sign_in_with_password`| 密码登录表单 | 无 | 用户名/密码登录 | +| `sign_in_with_baklib` | Baklib 账号登录 | 无 | 第三方登录 | +| `sign_in_with_sso` | SSO 单点登录 | `provider: 'sso'` | 支持多种 SSO 方式 | +| `sign_out` | 退出登录表单 | 无 | 退出当前用户 | +| `page` | 新建页面表单 | 无 | 用于创建新页面 | +| `edit_page` | 编辑页面表单 | `page: page` | 编辑指定页面 | +| `delete_page` | 删除页面表单 | `page: page` | 删除指定页面 | +| `reply` | 评论/回复表单 | `reply: reply` | 用于页面评论、回复 | + +**用法示例:** +```liquid +{% form_tag 'feedback', page: page %} + ...表单内容... +{% endform_tag %} + +{% form_tag 'search', class: 'w-full' %} + ...表单内容... +{% endform_tag %} +``` + +- 所有表单标签都支持 `class`、`style` 等 HTML 属性参数。 +- 表单标签会自动处理 CSRF、method、action 等表单安全和路由细节。 +- 支持嵌套自定义内容和片段渲染。 + +### 8.2 字段标签(form_field_tag) + +| 字段类型 | 用途说明 | 常用参数(示例) | 说明 | +|--------------|-----------------|--------------------------------------|------| +| `color` | 颜色选择器 | `field_name, value, class: '...'` | 支持取色器交互 | +| `tag` | 标签选择 | `field_name, value, multiple: true` | 支持多选标签 | +| `dam_image` | 图片上传 | `field_name, value, width, height` | 支持 DAM 资源管理 | +| `dam_video` | 视频上传 | `field_name, value, width, height` | 支持 DAM 资源管理 | +| `range` | 范围滑块 | `field_name, value, min, max, step, unit` | 支持滑动选择数值 | +| `richtext` | 富文本编辑器 | `field_name, value, editable: true` | 支持富文本内容编辑 | + +**用法示例:** +```liquid +{% form_field_tag 'color', 'page[theme_color]', page.settings.theme_color %} +{% form_field_tag 'tag', 'page[tags]', page.settings.tags, multiple: true %} +{% form_field_tag 'dam_image', 'page[cover_image]', page.settings.cover_image, width: 200, height: 100 %} +{% form_field_tag 'range', 'page[score]', page.settings.score, min: 0, max: 100, step: 1, unit: '分' %} +{% form_field_tag 'richtext', 'page[content]', page.settings.content %} +``` + +- 字段标签支持所有标准 HTML 属性参数。 +- 可与 `form_tag` 组合使用,实现复杂表单。 + +## 9. settings_schema.json 文件内容规范(优化版) + +参考 `themes/wiki/wiki/config/settings_schema.json`,推荐如下结构和最佳实践: + +### 9.1 顶层结构 +- 文件为 JSON 数组,每个元素为一个分组(section)。 +- 每个分组包含 `name`(分组名/分组 key,推荐用国际化 key),`settings`(字段数组)等。 +- 支持主题元信息(如 theme_info),图片路径可用 `${lang}` 占位符,便于多语言切换。 + +### 9.2 字段定义 +- `id`:字段唯一标识,必填。 +- `type`:字段类型,支持 `text`、`checkbox`、`radio`、`image_picker`、`html`、`tag_picker`、`richtext`、`color_background`、`range` 等。 +- `label`、`info`、`default`、`choices` 等全部推荐用 `t:` 前缀引用多语言 key,**key 命名规范为 `t:schema.<分组>.settings.<字段名>.label`**,如 `t:schema.generic.settings.logo_url.label`。 +- `choices`:单选/多选的选项数组,label 也推荐用国际化 key。 +- `when`:条件表达式,控制字段的显示(如 `"when": "hero_bg_type === '2'"`)。 +- 其他属性:如 `ratio`、`width`、`rows`、`multiple`、`readonly`、`required` 等。 + +### 9.3 示例 +```json +[ + { + "name": "t:schema.generic.name", + "settings": [ + { + "id": "logo_url", + "type": "image_picker", + "ratio": "3:1", + "width": 240, + "label": "t:schema.generic.settings.logo_url.label", + "info": "t:schema.generic.settings.logo_url.info" + }, + { + "id": "screen_width", + "type": "radio", + "label": "t:schema.generic.settings.screen_width.label", + "choices": [ + { "label": "t:schema.generic.settings.screen_width.choices.narrow", "value":"1024px" }, + { "label": "t:schema.generic.settings.screen_width.choices.medium", "value":"1280px" }, + { "label": "t:schema.generic.settings.screen_width.choices.wide", "value":"1536px" }, + { "label": "t:schema.generic.settings.screen_width.choices.full", "value":"100%" } + ], + "default": "1280px" + } + ] + } +] +``` + +### 9.4 字段详细说明 + +| 字段名 | 类型 | 是否必填 | 说明 | 特殊格式/要求 | +|----------------|-----------|----------|--------------------------------------------------------------|--------------------------------------| +| id | string | 是 | 字段唯一标识,建议小写字母+下划线 | 必须唯一,正则:^[a-z][a-z0-9_]*$ | +| type | string | 是 | 字段类型,如 text、checkbox、radio、image_picker 等 | 详见下表"支持的 type" | +| label | string | 是 | 字段显示名称,强烈建议国际化 | 建议用 t:schema.xxx.settings.xxx.label| +| info | string | 否 | 字段说明,建议国际化 | | +| default | any | 否 | 默认值,类型需与 type 匹配 | | +| required | boolean | 否 | 是否必填,默认 false | | +| readonly | boolean | 否 | 是否只读,默认 false | | +| multiple | boolean | 否 | 是否多选,适用于 tag_picker、select 等 | | +| choices | array | 部分必填 | radio/select/tag_picker 必填,选项数组 | 每项需有 label(建议国际化)、value | +| ratio | string | 否 | 图片宽高比,适用于 image_picker | 如 "3:1"、"1:1" | +| width | number | 否 | 图片宽度/输入框宽度等 | 单位 px | +| rows | number | 否 | 多行文本/HTML 字段的行数 | | +| when | string | 否 | 字段显示条件,JS 表达式 | 依赖其他字段 id | +| placeholder | string | 否 | 占位符,适用于 text/textarea/html 等 | | +| min/max/step | number | 否 | 适用于 range/number 类型 | | + +#### 支持的 type 及说明 + +| type | 说明 | 典型用法/特殊要求 | +|----------------|------------------------|-----------------------------| +| text | 单行文本 | default: string | +| textarea | 多行文本 | rows: number | +| checkbox | 勾选框 | default: boolean | +| radio | 单选 | choices: array | +| select | 下拉选择 | choices: array | +| image_picker | 图片选择 | ratio/width | +| tag_picker | 标签选择 | choices/multiple | +| richtext | 富文本编辑器 | | +| html | HTML 代码块 | rows/placeholder | +| color_background| 颜色选择/背景色 | | +| range | 滑块/数值范围选择 | min/max/step/unit | + +> ⚠️ **注意**:如 type 为 radio/select/tag_picker,`choices` 字段为必填,且每个选项需有 label(建议国际化)和 value。 + +## 10. 多语言文件内容规范 + +主题的多语言文件位于 `locales/` 目录下,支持多种语言(如 `zh-CN.json`、`en.json`、`fr.json` 等)。 + +### 10.1 主多语言文件 +- 文件为 JSON 格式,顶层为 key-value 结构。 +- 支持分组(如 `generic`、`buttons`、`feedback` 等),便于模板和 schema 引用。 +- 示例: +```json +{ + "theme_label": "Wiki Demo", + "generic": { + "close": "关闭", + "back": "返回" + }, + "buttons": { + "submit": "提交" + } +} +``` + +### 10.2 schema 多语言文件 +- 文件名为 `xx.schema.json`,用于 settings_schema.json 的 label/info/default 等字段国际化。 +- 结构为多层嵌套,分为 `generic`/`page` > `settings` > 字段名。 +- 示例: +```json +{ + "generic": { + "name": "站点基本信息设置", + "settings": { + "logo_url": { + "label": "Logo", + "info": "页头显示的 logo 图片" + }, + "company_name": { + "label": "公司名称", + "default": "Baklib.cn" + } + } + } +} +``` + +### 10.3 国际化引用方法 +- 在 settings_schema.json、模板 schema、模板内容中,均可通过 `t:xxx` 方式引用多语言 key。 +- 例如:`"label": "t:schema.generic.settings.logo_url.label"` 会自动查找当前语言下的 schema 多语言文件。 + +### 10.4 最佳实践 +- 建议所有用户可见的 label、info、default 等均使用国际化 key,便于多语言切换。 +- 多语言 key 命名建议分组、层级清晰,避免重复。 + +## 11. 模板 schema 数据结构规范(推荐) + +每个模板文件底部建议包含 `{% schema %} ... {% endschema %}`,内容为 JSON 对象,推荐字段如下: + +- `name`:模板名称,推荐用国际化 key +- `description`:模板描述,推荐用国际化 key +- `thumb_url`:缩略图路径,支持 `${lang}` 占位符 +- `preview_image_urls`:预览图数组 +- `sub_page_templates`:可用的子页面模板 +- `settings`:本模板可配置项,结构与 settings_schema.json 字段一致,支持 `when` 条件 + +### 字段国际化与动态条件 +- `label`、`info`、`choices` 等全部推荐用国际化 key +- 支持 `when` 字段,控制字段的显示条件 + +### 示例 +```liquid +{% schema %} + { + "name": "t:schema.templates.index.docs.name", + "description": "t:schema.templates.index.docs.description", + "thumb_url": "images/schema/${lang}/index-docs.png", + "preview_image_urls": [ + "images/schema/${lang}/index-docs.png" + ], + "sub_page_templates": ["page"], + "settings": [ + { + "id": "hero_bg_type", + "type": "radio", + "label": "t:schema.templates.index.docs.settings.hero_bg_type.label", + "choices": [ + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.none", "value": "0" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.color", "value": "1" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.image", "value": "2" } + ], + "default": "0", + "info": "t:schema.templates.index.docs.settings.hero_bg_type.info" + }, + { + "id": "hero_image_url", + "type": "image_picker", + "ratio": "4:1", + "label": "t:schema.templates.index.docs.settings.hero_image_url.label", + "info": "t:schema.templates.index.docs.settings.hero_image_url.info", + "when": "hero_bg_type === '2'" + } + ] + } +{% endschema %} +``` + +--- + +**最佳实践** +- 所有分组名、字段 label、info、choices、description 等均用国际化 key,便于多语言主题开发。 +- 合理使用 `when` 字段实现动态表单配置。 +- 图片路径、thumb_url 推荐用 `${lang}` 占位符,便于多语言切换。 + +## 12. 常见 schema 问题与校验建议 + +在实际主题/模版开发中,settings_schema.json 常见问题包括: + +- 字段缺少 `label`,导致界面无显示名或国际化失效 +- 缺少 `info`、`default`、`required` 等辅助属性,影响表单体验和可维护性 +- `radio`、`select`、`tag_picker` 等类型缺少 `choices`,导致前端渲染异常 +- `label`、`info`、`choices` 未使用国际化 key,影响多语言支持 +- 字段类型与默认值、choices 不兼容(如 type 为 radio 但 default 不在 choices 内) +- 忽略 `when` 字段,导致动态表单逻辑失效 + +### 校验器行为 + +系统内置的校验器(如 ThemeEngine::Validators::SettingsSchema)会自动校验: +- 每个字段必须有 `id`、`type`、`label`(推荐国际化) +- choices 类型字段必须有 `choices` 数组 +- 字段类型、默认值、choices 的兼容性 +- 分组 name 唯一且非空 +- settings 必须为数组 + +### 开发建议 + +- **强烈建议**每个字段都补全 `label`、`info`、`default`、`required`、`readonly`、`multiple` 等属性,并全部国际化 +- `choices` 的 label 也应国际化 +- 充分利用 `when` 字段实现动态表单 +- 开发主题时可用内置校验器或单元测试提前发现 schema 问题 + +**示例(推荐字段齐全):** +```json +{ + "id": "blog_title", + "type": "text", + "label": "t:schema.generic.settings.blog_title.label", + "info": "t:schema.generic.settings.blog_title.info", + "default": "我的博客", + "required": true +} +``` + +### 11.1 模板 schema 字段详细说明 + +每个模板文件底部的 `{% schema %}` 区块为 JSON 对象,推荐字段如下: + +| 字段名 | 类型 | 是否必填 | 说明 | 特殊格式/要求 | +|----------------------|-----------|----------|--------------------------------------------------------------|--------------------------------------| +| name | string | 是 | 模板名称,建议国际化 key | 如 t:schema.templates.xxx.name | +| description | string | 否 | 模板描述,建议国际化 key | | +| thumb_url | string | 否 | 模板缩略图路径 | 支持 ${lang} 占位符 | +| preview_image_urls | array | 否 | 预览图数组 | | +| sub_page_templates | array | 否 | 可用的子页面模板 | 如 ["page"] | +| settings | array | 否 | 本模板可配置项,结构与 settings_schema.json 字段一致 | 支持 when 条件 | + +#### settings 字段说明(与 settings_schema.json 相同) +详见上文 9.4 字段详细说明。 + +**示例:** +```liquid +{% schema %} + { + "name": "t:schema.templates.index.docs.name", + "description": "t:schema.templates.index.docs.description", + "thumb_url": "images/schema/${lang}/index-docs.png", + "preview_image_urls": [ + "images/schema/${lang}/index-docs.png" + ], + "sub_page_templates": ["page"], + "settings": [ + { + "id": "hero_bg_type", + "type": "radio", + "label": "t:schema.templates.index.docs.settings.hero_bg_type.label", + "choices": [ + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.none", "value": "0" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.color", "value": "1" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.image", "value": "2" } + ], + "default": "0", + "info": "t:schema.templates.index.docs.settings.hero_bg_type.info" + }, + { + "id": "hero_image_url", + "type": "image_picker", + "ratio": "4:1", + "label": "t:schema.templates.index.docs.settings.hero_image_url.label", + "info": "t:schema.templates.index.docs.settings.hero_image_url.info", + "when": "hero_bg_type === '2'" + } + ] + } +{% endschema %} +``` + +> ⚠️ **注意**:模板 schema 的 settings 字段结构、校验规则与 settings_schema.json 完全一致,详见 9.4 字段详细说明。 diff --git a/.gitignore b/.gitignore index ae3932715b6e3e7895b8ea0c7406cc31efd27882..833b2821bbb1fd7ea013c87fcf348bcf47879969 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /assets/builds /node_modules +/yarn-error.log \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..d0b3f162e54c3685f4e11616033c6e90d5065eaf --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "plugins": ["prettier-plugin-tailwindcss"] +} \ No newline at end of file diff --git a/.theme/settings_schema.schema.json b/.theme/settings_schema.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..07b5127f8a80519d90ed42011db3a9acc260a5ee --- /dev/null +++ b/.theme/settings_schema.schema.json @@ -0,0 +1,117 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Baklib Theme Settings Schema", + "type": "array", + "description": "Baklib 主题 settings_schema.json 配置文件结构,详见 theme-dev.md。第一个元素为 theme_info,申明主题元信息。其余为普通分组。", + "items": { + "oneOf": [ + { + "title": "主题元信息(theme_info)", + "type": "object", + "properties": { + "name": { "const": "theme_info", "description": "必须为 theme_info,代表主题元信息分组。" }, + "theme_name": { "type": "string", "description": "主题英文名/唯一标识,建议唯一。" }, + "theme_label": { "type": "string", "description": "主题显示名,建议国际化 key。" }, + "theme_version": { "type": "string", "description": "主题版本号。" }, + "theme_scope": { "type": "string", "description": "主题适用范围,如 wiki/community/cms。" }, + "theme_author": { "type": "string", "description": "主题作者。" }, + "theme_description": { "type": "string", "description": "主题描述,建议国际化 key。" }, + "theme_documentation_url": { "type": "string", "description": "主题文档链接。" }, + "theme_support_url": { "type": "string", "description": "主题支持链接。" }, + "theme_demo_url": { "type": "string", "description": "主题演示链接。" }, + "theme_thumb_url": { "type": "string", "description": "主题缩略图路径。" }, + "theme_preview_images": { + "type": "array", + "description": "主题预览图数组。", + "items": { "type": "string" } + }, + "theme_languages": { + "type": "array", + "description": "主题支持的语言数组。", + "items": { + "type": "object", + "properties": { + "name": { "type": "string", "description": "语言显示名。" }, + "value": { "type": "string", "description": "语言代码。" } + }, + "required": ["name", "value"], + "additionalProperties": false + } + }, + "recommendations": { + "type": "object", + "description": "主题推荐配置,如配色方案等。", + "properties": { + "color_schemas": { + "type": "object", + "description": "推荐配色方案。", + "additionalProperties": { + "type": "object", + "properties": { + "name": { "type": "string", "description": "配色名称。" }, + "colors": { + "type": "object", + "description": "配色变量。", + "additionalProperties": { "type": "string" } + } + }, + "required": ["name", "colors"], + "additionalProperties": false + } + } + }, + "additionalProperties": false + } + }, + "required": ["name", "theme_name", "theme_label", "theme_version", "theme_scope", "theme_author", "theme_description", "theme_thumb_url"], + "additionalProperties": false + }, + { + "title": "普通分组", + "type": "object", + "properties": { + "name": { "type": "string", "not": {"const": "theme_info"}, "description": "分组名/分组 key,推荐用国际化 key。" }, + "settings": { + "type": "array", + "description": "本分组下的字段数组。", + "items": { + "type": "object", + "properties": { + "id": { "type": "string", "description": "字段唯一标识。" }, + "type": { "type": "string", "description": "字段类型。" }, + "label": { "type": "string", "description": "字段显示名称。" }, + "info": { "type": "string", "description": "字段说明。" }, + "default": { "description": "默认值。" }, + "required": { "type": "boolean", "description": "是否必填。" }, + "readonly": { "type": "boolean", "description": "是否只读。" }, + "multiple": { "type": "boolean", "description": "是否多选。" }, + "choices": { + "type": "array", + "description": "选项数组。radio/select/tag_picker 类型必填。", + "items": { + "type": "object", + "properties": { + "label": { "type": "string", "description": "选项显示名。" }, + "value": { "description": "选项值。" } + }, + "required": ["label", "value"], + "additionalProperties": false + } + }, + "ratio": { "type": "string", "description": "图片宽高比。" }, + "width": { "type": "number", "description": "图片宽度/输入框宽度。" }, + "rows": { "type": "number", "description": "多行文本/HTML 字段的行数。" }, + "when": { "type": "string", "description": "字段显示条件。" }, + "placeholder": { "type": "string", "description": "占位符。" } + }, + "required": ["id", "type", "label"], + "additionalProperties": false + } + } + }, + "required": ["name", "settings"], + "additionalProperties": false + } + ] + } +} diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000000000000000000000000000000000..50b7fab94351d66f2965b706d88f8e064cc163c4 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 23.10.0 diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000000000000000000000000000000000000..21d6b73c228fffd78180a502c1275b38597dc906 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" + +gem "guard-livereload", "~> 2.5" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000000000000000000000000000000000..64c738fb1fbdf0f5d9ddc0f5ec76e52ccc0b0c64 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,77 @@ +GEM + remote: https://rubygems.org/ + specs: + coderay (1.1.3) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.17.2) + ffi (1.17.2-aarch64-linux-gnu) + ffi (1.17.2-aarch64-linux-musl) + ffi (1.17.2-arm-linux-gnu) + ffi (1.17.2-arm-linux-musl) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86-linux-gnu) + ffi (1.17.2-x86-linux-musl) + ffi (1.17.2-x86_64-darwin) + ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.2-x86_64-linux-musl) + formatador (1.1.0) + guard (2.19.1) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + logger (~> 1.6) + lumberjack (>= 1.0.12, < 2.0) + nenv (~> 0.1) + notiffany (~> 0.0) + ostruct (~> 0.6) + pry (>= 0.13.0) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-compat (1.2.1) + guard-livereload (2.5.2) + em-websocket (~> 0.5) + guard (~> 2.8) + guard-compat (~> 1.0) + multi_json (~> 1.8) + http_parser.rb (0.8.0) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + lumberjack (1.2.10) + method_source (1.1.0) + multi_json (1.15.0) + nenv (0.3.0) + notiffany (0.1.3) + nenv (~> 0.1) + shellany (~> 0.0) + ostruct (0.6.1) + pry (0.15.2) + coderay (~> 1.1) + method_source (~> 1.0) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + shellany (0.0.1) + thor (1.3.2) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin + ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + guard-livereload (~> 2.5) + +BUNDLED WITH + 2.5.16 diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000000000000000000000000000000000000..8f2213d3adb1af9f1b461708048222ab914d0828 --- /dev/null +++ b/Guardfile @@ -0,0 +1,26 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +## Uncomment and set this to only include directories you want to watch +# directories %w(app lib config test spec features) \ +# .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")} + +## Note: if you are using the `directories` clause above and you are not +## watching the project directory ('.'), then you will want to move +## the Guardfile to a watched dir and symlink it back, e.g. +# +# $ mkdir config +# $ mv Guardfile config/ +# $ ln -s config/Guardfile . +# +# and, you'll have to watch "config/Guardfile" instead of "Guardfile" + +guard 'livereload' do + watch(%r{assets/.*}) + watch(%r{layout/.*\.liquid}) + watch(%r{snippets/.*\.liquid}) + watch(%r{locales/.*\.json}) + watch(%r{snippets/.*\.liquid}) + watch(%r{statics/.*\.liquid}) + watch(%r{templates/.*\.liquid}) +end diff --git a/README.md b/README.md index a8a7340e9f3605c9257a844623c541671a242191..5596c65946cfd400cb9c052edef059b7009e7680 100644 --- a/README.md +++ b/README.md @@ -8,52 +8,6 @@ Knowledge base template deployed by Baklib WIKI. ![Baklib CMS based page theme](./assets/images/theme/index-docs.png) ![Baklib CMS based page theme](./assets/images/theme/page.png) -## 🚀 Project Structure - -``` - . - ├── README.md - ├── config - │   └── settings_schema.json - ├── layout - │   ├── error.liquid - │   └── theme.liquid - ├── package-lock.json - ├── package.json - ├── snippets - │   ├── _breadcrumb copy.liquid - │   ├── _breadcrumb.liquid - │   ├── _custom_menu.liquid - │   ├── _export_page.liquid - │   ├── _export_tree.liquid - │   ├── _feedback_form.liquid - │   ├── _footer.liquid - │   ├── _header.liquid - │   ├── _index_tree.liquid - │   ├── _page.liquid - │   ├── _page_list.liquid - │   ├── _paginate.liquid - │   ├── _plugins.liquid - │   ├── _sidebar.liquid - │   ├── _tag.liquid - │   └── _tree.liquid - ├── statics - │   └── about.liquid - ├── tailwind.config.js - ├── templates - │   ├── index.docs.liquid - │   ├── index.help_center.liquid - │   ├── index.list.liquid - │   ├── nav_tree.liquid - │   ├── page.export.liquid - │   ├── page.liquid - │   ├── search.liquid - │   └── tag.liquid - ├── yarn-error.log - └── yarn.lock -``` - - ## 🧞 Install guide - The Template install Guide: https://help.baklib.cn/themes/wiki @@ -62,97 +16,37 @@ Knowledge base template deployed by Baklib WIKI. ## 开发 -```bash -npm run dev +```shell +# 安装 npm 包 +yarn install +# 执行此命令,可在实时把 src 目录的 js/css 代码编译到 assets 目录 +yarn dev ``` -### 安装配置TailwindCSS -[TailwindCSS官网](https://www.tailwindcss.cn/docs/installation) - -#### 1.安装Tailwindcss -通过`npm`安装`tailwindcss`,然后创建`tailwind.config.js`配置文件 -```bash -npm add -D tailwindcss -npx tailwindcss init -``` -#### 2.配置模板文件的路径和自定义样式 -```javascript -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./templates/**/*.liquid", "./snippets/**/*.liquid", "./layout/**/*.liquid", "./statics/**/*.liquid"], - darkMode: 'class', - theme: { - extend: { - colors: () => { - return { - slate: { - 150: "#E9EEF5" - }, - ...["primary", "secondary", "accent", "info", "success", "warning"].reduce((map, name) => { - return { - ...map, - [name]: { - DEFAULT: `hsl(var(--theme-color-${name}) / )`, - lighten: `hsl(var(--theme-color-${name}-hsl-h) var(--theme-color-${name}-hsl-s) calc(var(--theme-color-${name}-hsl-l) + 15%))`, - darken: `hsl(var(--theme-color-${name}-hsl-h) var(--theme-color-${name}-hsl-s) calc(var(--theme-color-${name}-hsl-l) - 15%))`, - ...[50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950].reduce((map,lightness) => { - return { - ...map, - [lightness]: `hsl(var(--theme-color-${name}-hsl-h) var(--theme-color-${name}-hsl-s) ${100 - lightness/10*0.8}%)` - } - }, {}) - } - } - }, {}), - // 错误色永远是红色,饱和度与主色调保持一致 - error: { - DEFAULT: `hsl(355 75% var(--theme-color-primary-hsl-l) / )`, - lighten: `hsl(355 75% calc(var(--theme-color-primary-hsl-l) + 15%))`, - darken: `hsl(355 75% calc(var(--theme-color-primary-hsl-l) - 15%))`, - ...[50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950].reduce((map,lightness) => { - return { - ...map, - [lightness]: `hsl(355 75% ${100 - lightness/10*0.8}%)` - } - }, {}) - } - } - }, - spacing: { - 4.5: "1.125rem", - 5.5: "1.375rem", - 18: "4.5rem", - }, - }, - }, - plugins: [], -} +> 需要本地开发环境 +```shell +# 安装 guard-livereload,浏览器安装 livereload 插件,可实现代码改动,浏览器页面自动刷新 +bundle install +bundle exec guard ``` -#### 3.引入Tailwindcss到css文件中 -例如:`./src/main.css` -```css -@tailwind base; -@tailwind components; -@tailwind utilities; -@config '../tailwind.config.js' -``` -#### 4.在`package.json`中配置css编译路径 -```json -"scripts": { - "build": "npm-run-all --parallel build:css build:js", - "build:css": "npx tailwindcss -i ./src/main.css -o ./assets/css/main.css", - ...... - "dev": "npm-run-all --parallel 'build:css -- --watch' 'build:js -- --watch'" -} -``` -#### 5.在`theme.liquid`文件中引入css -```html -{{ 'css/main.css' | asset_url | stylesheet_tag: data-turbo-track: 'reload' }} -``` - ## 编译&发布 ```bash yarn build ``` + + +## 其他 + +- 按语言自动切换预览图 +```bash +# config/settings_schema.json 中使用 ${lang} 变量拼接 项目中预览图路径 +"theme_preview_images": [ + "images/schema/${lang}/wiki.png", + "images/schema/${lang}/index-help-center.png", + "images/schema/${lang}/index-list.png", + "images/schema/${lang}/index-docs.png", + "images/schema/${lang}/page.png" +], +``` \ No newline at end of file diff --git a/assets/css/main.css b/assets/css/main.css deleted file mode 100644 index 9378b8ec84d3675a04c64cd277f1809c390ad7fc..0000000000000000000000000000000000000000 --- a/assets/css/main.css +++ /dev/null @@ -1,3908 +0,0 @@ -/* -! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #e5e7eb; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -6. Use the user's configured `sans` font-variation-settings by default. -7. Disable tap highlights on iOS -*/ - -html, -:host { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - /* 4 */ - font-feature-settings: normal; - /* 5 */ - font-variation-settings: normal; - /* 6 */ - -webkit-tap-highlight-color: transparent; - /* 7 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font-family by default. -2. Use the user's configured `mono` font-feature-settings by default. -3. Use the user's configured `mono` font-variation-settings by default. -4. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - /* 1 */ - font-feature-settings: normal; - /* 2 */ - font-variation-settings: normal; - /* 3 */ - font-size: 1em; - /* 4 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-feature-settings: inherit; - /* 1 */ - font-variation-settings: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - letter-spacing: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -input:where([type='button']), -input:where([type='reset']), -input:where([type='submit']) { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Reset default styling for dialogs. -*/ - -dialog { - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9ca3af; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -.container { - width: 100%; -} - -@media (min-width: 640px) { - .container { - max-width: 640px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 768px; - } -} - -@media (min-width: 1024px) { - .container { - max-width: 1024px; - } -} - -@media (min-width: 1280px) { - .container { - max-width: 1280px; - } -} - -@media (min-width: 1536px) { - .container { - max-width: 1536px; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} - -.pointer-events-none { - pointer-events: none; -} - -.static { - position: static; -} - -.fixed { - position: fixed; -} - -.absolute { - position: absolute; -} - -.relative { - position: relative; -} - -.inset-0 { - inset: 0px; -} - -.inset-x-0 { - left: 0px; - right: 0px; -} - -.inset-y-0 { - top: 0px; - bottom: 0px; -} - -.-bottom-0 { - bottom: -0px; -} - -.-left-1 { - left: -0.25rem; -} - -.-right-0 { - right: -0px; -} - -.-right-5 { - right: -1.25rem; -} - -.-top-10 { - top: -2.5rem; -} - -.-top-40 { - top: -10rem; -} - -.bottom-0 { - bottom: 0px; -} - -.bottom-24 { - bottom: 6rem; -} - -.bottom-4 { - bottom: 1rem; -} - -.left-0 { - left: 0px; -} - -.left-1\/2 { - left: 50%; -} - -.left-\[calc\(50\%\+3rem\)\] { - left: calc(50% + 3rem); -} - -.left-\[calc\(50\%-11rem\)\] { - left: calc(50% - 11rem); -} - -.right-0 { - right: 0px; -} - -.right-4 { - right: 1rem; -} - -.top-0 { - top: 0px; -} - -.top-12 { - top: 3rem; -} - -.top-2 { - top: 0.5rem; -} - -.top-20 { - top: 5rem; -} - -.top-24 { - top: 6rem; -} - -.top-5 { - top: 1.25rem; -} - -.top-\[calc\(100\%-13rem\)\] { - top: calc(100% - 13rem); -} - -.isolate { - isolation: isolate; -} - -.-z-10 { - z-index: -10; -} - -.z-0 { - z-index: 0; -} - -.z-10 { - z-index: 10; -} - -.z-20 { - z-index: 20; -} - -.z-50 { - z-index: 50; -} - -.col-span-6 { - grid-column: span 6 / span 6; -} - -.col-span-8 { - grid-column: span 8 / span 8; -} - -.mx-2 { - margin-left: 0.5rem; - margin-right: 0.5rem; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.my-4 { - margin-top: 1rem; - margin-bottom: 1rem; -} - -.my-8 { - margin-top: 2rem; - margin-bottom: 2rem; -} - -.-mt-8 { - margin-top: -2rem; -} - -.mb-0 { - margin-bottom: 0px; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mb-12 { - margin-bottom: 3rem; -} - -.mb-2 { - margin-bottom: 0.5rem; -} - -.mb-3 { - margin-bottom: 0.75rem; -} - -.mb-4 { - margin-bottom: 1rem; -} - -.mb-6 { - margin-bottom: 1.5rem; -} - -.mb-8 { - margin-bottom: 2rem; -} - -.mb-\[3px\] { - margin-bottom: 3px; -} - -.ml-1 { - margin-left: 0.25rem; -} - -.ml-2 { - margin-left: 0.5rem; -} - -.ml-3 { - margin-left: 0.75rem; -} - -.ml-4 { - margin-left: 1rem; -} - -.mr-0 { - margin-right: 0px; -} - -.mr-1 { - margin-right: 0.25rem; -} - -.mr-2 { - margin-right: 0.5rem; -} - -.mr-3 { - margin-right: 0.75rem; -} - -.mr-4 { - margin-right: 1rem; -} - -.mr-auto { - margin-right: auto; -} - -.mt-1 { - margin-top: 0.25rem; -} - -.mt-10 { - margin-top: 2.5rem; -} - -.mt-12 { - margin-top: 3rem; -} - -.mt-2 { - margin-top: 0.5rem; -} - -.mt-20 { - margin-top: 5rem; -} - -.mt-3 { - margin-top: 0.75rem; -} - -.mt-4 { - margin-top: 1rem; -} - -.mt-5 { - margin-top: 1.25rem; -} - -.mt-6 { - margin-top: 1.5rem; -} - -.mt-8 { - margin-top: 2rem; -} - -.line-clamp-1 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; -} - -.line-clamp-2 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.line-clamp-3 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 3; -} - -.block { - display: block; -} - -.inline-block { - display: inline-block; -} - -.flex { - display: flex; -} - -.inline-flex { - display: inline-flex; -} - -.flow-root { - display: flow-root; -} - -.grid { - display: grid; -} - -.hidden { - display: none; -} - -.aspect-\[1155\/678\] { - aspect-ratio: 1155/678; -} - -.aspect-\[1200\/800\] { - aspect-ratio: 1200/800; -} - -.size-10 { - width: 2.5rem; - height: 2.5rem; -} - -.size-5 { - width: 1.25rem; - height: 1.25rem; -} - -.size-6 { - width: 1.5rem; - height: 1.5rem; -} - -.size-8 { - width: 2rem; - height: 2rem; -} - -.size-full { - width: 100%; - height: 100%; -} - -.h-0 { - height: 0px; -} - -.h-0\.5 { - height: 0.125rem; -} - -.h-1 { - height: 0.25rem; -} - -.h-1\.5 { - height: 0.375rem; -} - -.h-10 { - height: 2.5rem; -} - -.h-12 { - height: 3rem; -} - -.h-14 { - height: 3.5rem; -} - -.h-16 { - height: 4rem; -} - -.h-3 { - height: 0.75rem; -} - -.h-4 { - height: 1rem; -} - -.h-4\.5 { - height: 1.125rem; -} - -.h-5 { - height: 1.25rem; -} - -.h-6 { - height: 1.5rem; -} - -.h-8 { - height: 2rem; -} - -.h-\[250px\] { - height: 250px; -} - -.h-\[680px\] { - height: 680px; -} - -.h-\[calc\(100vh-theme\(spacing\.16\)\)\] { - height: calc(100vh - 4rem); -} - -.h-auto { - height: auto; -} - -.h-full { - height: 100%; -} - -.max-h-20 { - max-height: 5rem; -} - -.max-h-\[calc\(100vh-120px\)\] { - max-height: calc(100vh - 120px); -} - -.max-h-\[calc\(100vh-160px\)\] { - max-height: calc(100vh - 160px); -} - -.max-h-full { - max-height: 100%; -} - -.min-h-\[calc\(100vh-120px\)\] { - min-height: calc(100vh - 120px); -} - -.min-h-screen { - min-height: 100vh; -} - -.w-0 { - width: 0px; -} - -.w-0\.5 { - width: 0.125rem; -} - -.w-1 { - width: 0.25rem; -} - -.w-1\.5 { - width: 0.375rem; -} - -.w-10 { - width: 2.5rem; -} - -.w-11\/12 { - width: 91.666667%; -} - -.w-12 { - width: 3rem; -} - -.w-14 { - width: 3.5rem; -} - -.w-16 { - width: 4rem; -} - -.w-3 { - width: 0.75rem; -} - -.w-4 { - width: 1rem; -} - -.w-4\.5 { - width: 1.125rem; -} - -.w-40 { - width: 10rem; -} - -.w-48 { - width: 12rem; -} - -.w-5 { - width: 1.25rem; -} - -.w-6 { - width: 1.5rem; -} - -.w-72 { - width: 18rem; -} - -.w-8 { - width: 2rem; -} - -.w-\[36\.125rem\] { - width: 36.125rem; -} - -.w-full { - width: 100%; -} - -.min-w-0 { - min-width: 0px; -} - -.min-w-12 { - min-width: 3rem; -} - -.min-w-64 { - min-width: 16rem; -} - -.min-w-\[10rem\] { - min-width: 10rem; -} - -.max-w-2xl { - max-width: 42rem; -} - -.max-w-3xl { - max-width: 48rem; -} - -.max-w-5xl { - max-width: 64rem; -} - -.max-w-72 { - max-width: 18rem; -} - -.max-w-7xl { - max-width: 80rem; -} - -.max-w-screen-2xl { - max-width: 1536px; -} - -.max-w-screen-lg { - max-width: 1024px; -} - -.max-w-screen-xl { - max-width: 1280px; -} - -.max-w-sm { - max-width: 24rem; -} - -.flex-1 { - flex: 1 1 0%; -} - -.flex-auto { - flex: 1 1 auto; -} - -.flex-initial { - flex: 0 1 auto; -} - -.flex-none { - flex: none; -} - -.flex-shrink-0 { - flex-shrink: 0; -} - -.shrink-0 { - flex-shrink: 0; -} - -.flex-grow { - flex-grow: 1; -} - -.grow { - flex-grow: 1; -} - -.origin-top { - transform-origin: top; -} - -.origin-top-right { - transform-origin: top right; -} - -.-translate-x-1\/2 { - --tw-translate-x: -50%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-0 { - --tw-translate-y: 0px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-12 { - --tw-translate-y: 3rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-y-\[-10\%\] { - --tw-translate-y: -10%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rotate-180 { - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rotate-90 { - --tw-rotate: 90deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rotate-\[30deg\] { - --tw-rotate: 30deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.scale-100 { - --tw-scale-x: 1; - --tw-scale-y: 1; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.scale-75 { - --tw-scale-x: .75; - --tw-scale-y: .75; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.scale-95 { - --tw-scale-x: .95; - --tw-scale-y: .95; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.transform-gpu { - transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.cursor-pointer { - cursor: pointer; -} - -.resize-none { - resize: none; -} - -.list-none { - list-style-type: none; -} - -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} - -.grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); -} - -.grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.grid-cols-6 { - grid-template-columns: repeat(6, minmax(0, 1fr)); -} - -.grid-cols-8 { - grid-template-columns: repeat(8, minmax(0, 1fr)); -} - -.flex-col { - flex-direction: column; -} - -.flex-wrap { - flex-wrap: wrap; -} - -.items-start { - align-items: flex-start; -} - -.items-center { - align-items: center; -} - -.justify-start { - justify-content: flex-start; -} - -.justify-end { - justify-content: flex-end; -} - -.justify-center { - justify-content: center; -} - -.justify-between { - justify-content: space-between; -} - -.gap-2 { - gap: 0.5rem; -} - -.gap-3 { - gap: 0.75rem; -} - -.gap-4 { - gap: 1rem; -} - -.gap-6 { - gap: 1.5rem; -} - -.gap-8 { - gap: 2rem; -} - -.gap-x-2 { - -moz-column-gap: 0.5rem; - column-gap: 0.5rem; -} - -.gap-x-5 { - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; -} - -.gap-x-6 { - -moz-column-gap: 1.5rem; - column-gap: 1.5rem; -} - -.gap-y-0 { - row-gap: 0px; -} - -.gap-y-4 { - row-gap: 1rem; -} - -.gap-y-5 { - row-gap: 1.25rem; -} - -.-space-x-px > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(-1px * var(--tw-space-x-reverse)); - margin-left: calc(-1px * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-0 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0px * var(--tw-space-x-reverse)); - margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.25rem * var(--tw-space-x-reverse)); - margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-2 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.5rem * var(--tw-space-x-reverse)); - margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1rem * var(--tw-space-x-reverse)); - margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-5 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1.25rem * var(--tw-space-x-reverse)); - margin-left: calc(1.25rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1.5rem * var(--tw-space-x-reverse)); - margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-y-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); -} - -.space-y-12 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(3rem * var(--tw-space-y-reverse)); -} - -.space-y-2 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); -} - -.space-y-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); -} - -.space-y-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1rem * var(--tw-space-y-reverse)); -} - -.space-y-5 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); -} - -.space-y-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); -} - -.divide-y > :not([hidden]) ~ :not([hidden]) { - --tw-divide-y-reverse: 0; - border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); - border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); -} - -.divide-y-2 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-y-reverse: 0; - border-top-width: calc(2px * calc(1 - var(--tw-divide-y-reverse))); - border-bottom-width: calc(2px * var(--tw-divide-y-reverse)); -} - -.divide-gray-100 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-divide-opacity)); -} - -.divide-gray-200 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-divide-opacity)); -} - -.divide-gray-400 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-divide-opacity)); -} - -.self-center { - align-self: center; -} - -.overflow-auto { - overflow: auto; -} - -.overflow-hidden { - overflow: hidden; -} - -.overflow-x-auto { - overflow-x: auto; -} - -.overflow-y-auto { - overflow-y: auto; -} - -.overflow-y-hidden { - overflow-y: hidden; -} - -.overflow-y-scroll { - overflow-y: scroll; -} - -.scroll-smooth { - scroll-behavior: smooth; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.whitespace-nowrap { - white-space: nowrap; -} - -.break-words { - overflow-wrap: break-word; -} - -.break-all { - word-break: break-all; -} - -.rounded { - border-radius: 0.25rem; -} - -.rounded-2xl { - border-radius: 1rem; -} - -.rounded-full { - border-radius: 9999px; -} - -.rounded-lg { - border-radius: 0.5rem; -} - -.rounded-md { - border-radius: 0.375rem; -} - -.rounded-xl { - border-radius: 0.75rem; -} - -.rounded-b { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.rounded-l-md { - border-top-left-radius: 0.375rem; - border-bottom-left-radius: 0.375rem; -} - -.rounded-r-full { - border-top-right-radius: 9999px; - border-bottom-right-radius: 9999px; -} - -.rounded-r-md { - border-top-right-radius: 0.375rem; - border-bottom-right-radius: 0.375rem; -} - -.rounded-t-xl { - border-top-left-radius: 0.75rem; - border-top-right-radius: 0.75rem; -} - -.border { - border-width: 1px; -} - -.border-0 { - border-width: 0px; -} - -.border-2 { - border-width: 2px; -} - -.border-b { - border-bottom-width: 1px; -} - -.border-l { - border-left-width: 1px; -} - -.border-l-2 { - border-left-width: 2px; -} - -.border-r { - border-right-width: 1px; -} - -.border-t { - border-top-width: 1px; -} - -.border-t-2 { - border-top-width: 2px; -} - -.border-t-4 { - border-top-width: 4px; -} - -.border-none { - border-style: none; -} - -.border-accent { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-accent) / var(--tw-border-opacity)); -} - -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} - -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - -.border-gray-400 { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} - -.border-primary { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-primary) / var(--tw-border-opacity)); -} - -.border-primary-300 { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-primary-hsl-h) var(--theme-color-primary-hsl-s) 76% / var(--tw-border-opacity)); -} - -.border-red-400 { - --tw-border-opacity: 1; - border-color: rgb(248 113 113 / var(--tw-border-opacity)); -} - -.border-slate-150 { - --tw-border-opacity: 1; - border-color: rgb(233 238 245 / var(--tw-border-opacity)); -} - -.border-slate-200 { - --tw-border-opacity: 1; - border-color: rgb(226 232 240 / var(--tw-border-opacity)); -} - -.border-slate-300 { - --tw-border-opacity: 1; - border-color: rgb(203 213 225 / var(--tw-border-opacity)); -} - -.border-teal-500 { - --tw-border-opacity: 1; - border-color: rgb(20 184 166 / var(--tw-border-opacity)); -} - -.border-transparent { - border-color: transparent; -} - -.bg-accent-100 { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-accent-hsl-h) var(--theme-color-accent-hsl-s) 92% / var(--tw-bg-opacity)); -} - -.bg-blue-500 { - --tw-bg-opacity: 1; - background-color: rgb(59 130 246 / var(--tw-bg-opacity)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-gray-400 { - --tw-bg-opacity: 1; - background-color: rgb(156 163 175 / var(--tw-bg-opacity)); -} - -.bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.bg-gray-600 { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); -} - -.bg-gray-700 { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); -} - -.bg-green-500 { - --tw-bg-opacity: 1; - background-color: rgb(34 197 94 / var(--tw-bg-opacity)); -} - -.bg-indigo-500 { - --tw-bg-opacity: 1; - background-color: rgb(99 102 241 / var(--tw-bg-opacity)); -} - -.bg-indigo-600 { - --tw-bg-opacity: 1; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)); -} - -.bg-indigo-800 { - --tw-bg-opacity: 1; - background-color: rgb(55 48 163 / var(--tw-bg-opacity)); -} - -.bg-indigo-900 { - --tw-bg-opacity: 1; - background-color: rgb(49 46 129 / var(--tw-bg-opacity)); -} - -.bg-primary { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.bg-primary\/40 { - background-color: hsl(var(--theme-color-primary) / 0.4); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} - -.bg-slate-100 { - --tw-bg-opacity: 1; - background-color: rgb(241 245 249 / var(--tw-bg-opacity)); -} - -.bg-slate-400 { - --tw-bg-opacity: 1; - background-color: rgb(148 163 184 / var(--tw-bg-opacity)); -} - -.bg-slate-50 { - --tw-bg-opacity: 1; - background-color: rgb(248 250 252 / var(--tw-bg-opacity)); -} - -.bg-slate-900\/60 { - background-color: rgb(15 23 42 / 0.6); -} - -.bg-teal-100 { - --tw-bg-opacity: 1; - background-color: rgb(204 251 241 / var(--tw-bg-opacity)); -} - -.bg-transparent { - background-color: transparent; -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.bg-opacity-70 { - --tw-bg-opacity: 0.7; -} - -.bg-opacity-75 { - --tw-bg-opacity: 0.75; -} - -.bg-gradient-to-b { - background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); -} - -.bg-gradient-to-tr { - background-image: linear-gradient(to top right, var(--tw-gradient-stops)); -} - -.from-\[\#ff80b5\] { - --tw-gradient-from: #ff80b5 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(255 128 181 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-primary { - --tw-gradient-from: hsl(var(--theme-color-primary) / 1) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-primary) / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-primary\/15 { - --tw-gradient-from: hsl(var(--theme-color-primary) / 0.15) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-primary) / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-primary\/35 { - --tw-gradient-from: hsl(var(--theme-color-primary) / 0.35) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-primary) / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-secondary-100 { - --tw-gradient-from: hsl(var(--theme-color-secondary-hsl-h) var(--theme-color-secondary-hsl-s) 92%) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-secondary-hsl-h) var(--theme-color-secondary-hsl-s) 92% / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-5\% { - --tw-gradient-from-position: 5%; -} - -.via-white { - --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to); -} - -.via-20\% { - --tw-gradient-via-position: 20%; -} - -.to-\[\#9089fc\] { - --tw-gradient-to: #9089fc var(--tw-gradient-to-position); -} - -.to-accent\/15 { - --tw-gradient-to: hsl(var(--theme-color-accent) / 0.15) var(--tw-gradient-to-position); -} - -.to-accent\/35 { - --tw-gradient-to: hsl(var(--theme-color-accent) / 0.35) var(--tw-gradient-to-position); -} - -.to-primary-50\/80 { - --tw-gradient-to: hsl(var(--theme-color-primary-hsl-h) var(--theme-color-primary-hsl-s) 96% / 0.8) var(--tw-gradient-to-position); -} - -.to-secondary { - --tw-gradient-to: hsl(var(--theme-color-secondary) / 1) var(--tw-gradient-to-position); -} - -.to-80\% { - --tw-gradient-to-position: 80%; -} - -.to-85\% { - --tw-gradient-to-position: 85%; -} - -.bg-cover { - background-size: cover; -} - -.bg-center { - background-position: center; -} - -.bg-no-repeat { - background-repeat: no-repeat; -} - -.fill-current { - fill: currentColor; -} - -.fill-purple-400 { - fill: #c084fc; -} - -.fill-purple-600 { - fill: #9333ea; -} - -.fill-sky-400 { - fill: #38bdf8; -} - -.fill-sky-600 { - fill: #0284c7; -} - -.fill-slate-400 { - fill: #94a3b8; -} - -.fill-white { - fill: #fff; -} - -.object-cover { - -o-object-fit: cover; - object-fit: cover; -} - -.p-0 { - padding: 0px; -} - -.p-1 { - padding: 0.25rem; -} - -.p-12 { - padding: 3rem; -} - -.p-2 { - padding: 0.5rem; -} - -.p-2\.5 { - padding: 0.625rem; -} - -.p-24 { - padding: 6rem; -} - -.p-3 { - padding: 0.75rem; -} - -.p-4 { - padding: 1rem; -} - -.p-5 { - padding: 1.25rem; -} - -.p-6 { - padding: 1.5rem; -} - -.px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; -} - -.px-16 { - padding-left: 4rem; - padding-right: 4rem; -} - -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} - -.px-3\.5 { - padding-left: 0.875rem; - padding-right: 0.875rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.px-5 { - padding-left: 1.25rem; - padding-right: 1.25rem; -} - -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.py-0 { - padding-top: 0px; - padding-bottom: 0px; -} - -.py-0\.5 { - padding-top: 0.125rem; - padding-bottom: 0.125rem; -} - -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -.py-1\.5 { - padding-top: 0.375rem; - padding-bottom: 0.375rem; -} - -.py-10 { - padding-top: 2.5rem; - padding-bottom: 2.5rem; -} - -.py-12 { - padding-top: 3rem; - padding-bottom: 3rem; -} - -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.py-2\.5 { - padding-top: 0.625rem; - padding-bottom: 0.625rem; -} - -.py-24 { - padding-top: 6rem; - padding-bottom: 6rem; -} - -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; -} - -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} - -.pb-12 { - padding-bottom: 3rem; -} - -.pb-20 { - padding-bottom: 5rem; -} - -.pb-3 { - padding-bottom: 0.75rem; -} - -.pb-4 { - padding-bottom: 1rem; -} - -.pb-8 { - padding-bottom: 2rem; -} - -.pl-3 { - padding-left: 0.75rem; -} - -.pl-4 { - padding-left: 1rem; -} - -.pl-6 { - padding-left: 1.5rem; -} - -.pr-10 { - padding-right: 2.5rem; -} - -.pr-2 { - padding-right: 0.5rem; -} - -.pr-3 { - padding-right: 0.75rem; -} - -.pt-10 { - padding-top: 2.5rem; -} - -.pt-12 { - padding-top: 3rem; -} - -.pt-20 { - padding-top: 5rem; -} - -.pt-3 { - padding-top: 0.75rem; -} - -.pt-4 { - padding-top: 1rem; -} - -.pt-44 { - padding-top: 11rem; -} - -.pt-5 { - padding-top: 1.25rem; -} - -.pt-8 { - padding-top: 2rem; -} - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-2xl { - font-size: 1.5rem; - line-height: 2rem; -} - -.text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; -} - -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - -.text-5xl { - font-size: 3rem; - line-height: 1; -} - -.text-6xl { - font-size: 3.75rem; - line-height: 1; -} - -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - -.text-lg { - font-size: 1.125rem; - line-height: 1.75rem; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem; -} - -.text-xs { - font-size: 0.75rem; - line-height: 1rem; -} - -.font-\[650\] { - font-weight: 650; -} - -.font-bold { - font-weight: 700; -} - -.font-medium { - font-weight: 500; -} - -.font-normal { - font-weight: 400; -} - -.font-semibold { - font-weight: 600; -} - -.uppercase { - text-transform: uppercase; -} - -.not-italic { - font-style: normal; -} - -.leading-5 { - line-height: 1.25rem; -} - -.leading-6 { - line-height: 1.5rem; -} - -.leading-8 { - line-height: 2rem; -} - -.leading-none { - line-height: 1; -} - -.tracking-tight { - letter-spacing: -0.025em; -} - -.tracking-tighter { - letter-spacing: -0.05em; -} - -.tracking-wide { - letter-spacing: 0.025em; -} - -.text-amber-400 { - --tw-text-opacity: 1; - color: rgb(251 191 36 / var(--tw-text-opacity)); -} - -.text-blue-600 { - --tw-text-opacity: 1; - color: rgb(37 99 235 / var(--tw-text-opacity)); -} - -.text-gray-300 { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} - -.text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); -} - -.text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} - -.text-gray-800 { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); -} - -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} - -.text-indigo-100 { - --tw-text-opacity: 1; - color: rgb(224 231 255 / var(--tw-text-opacity)); -} - -.text-inherit { - color: inherit; -} - -.text-primary { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-primary) / var(--tw-text-opacity)); -} - -.text-red-500 { - --tw-text-opacity: 1; - color: rgb(239 68 68 / var(--tw-text-opacity)); -} - -.text-red-700 { - --tw-text-opacity: 1; - color: rgb(185 28 28 / var(--tw-text-opacity)); -} - -.text-slate-400 { - --tw-text-opacity: 1; - color: rgb(148 163 184 / var(--tw-text-opacity)); -} - -.text-slate-600 { - --tw-text-opacity: 1; - color: rgb(71 85 105 / var(--tw-text-opacity)); -} - -.text-slate-800 { - --tw-text-opacity: 1; - color: rgb(30 41 59 / var(--tw-text-opacity)); -} - -.text-slate-900 { - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} - -.text-teal-500 { - --tw-text-opacity: 1; - color: rgb(20 184 166 / var(--tw-text-opacity)); -} - -.text-teal-900 { - --tw-text-opacity: 1; - color: rgb(19 78 74 / var(--tw-text-opacity)); -} - -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.opacity-0 { - opacity: 0; -} - -.opacity-100 { - opacity: 1; -} - -.opacity-20 { - opacity: 0.2; -} - -.opacity-30 { - opacity: 0.3; -} - -.opacity-60 { - opacity: 0.6; -} - -.opacity-75 { - opacity: 0.75; -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.outline-none { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.ring-1 { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.ring-inset { - --tw-ring-inset: inset; -} - -.ring-gray-300 { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)); -} - -.blur-3xl { - --tw-blur: blur(64px); - 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, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-all { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-colors { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-transform { - transition-property: transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-200 { - transition-duration: 200ms; -} - -.duration-300 { - transition-duration: 300ms; -} - -.duration-500 { - transition-duration: 500ms; -} - -.duration-700 { - transition-duration: 700ms; -} - -.ease-in { - transition-timing-function: cubic-bezier(0.4, 0, 1, 1); -} - -.ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} - -.ease-out { - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); -} - -:is(.dark .page--article__link) { - border-bottom: 1px solid #374151; -} - -.page--article__link:hover { - text-decoration: none !important; -} - -.page--article__link::after { - position: absolute; - content: ''; - transition: 0.3s; - width: 0; - left: 50%; - bottom: -0.5px; - height: 1px; - background: rgb(var(--theme-color-primary)); -} - -.page--article__link:hover::after { - width: 100%; - left: 0; -} - -.breadcrumb { - display: flex; - flex-wrap: wrap; - padding: 0.5rem 0; - margin-bottom: 0; - list-style: none; -} - -.breadcrumb-item { - font-size: 0.8rem; - color: rgb(158, 158, 158); -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.25rem; -} - -.breadcrumb-item + .breadcrumb-item::before { - display: inline-block; - padding-right: 0.25rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; - text-decoration: none; -} - -.scrollbar-hide::-webkit-scrollbar, -.scrollbar-hide::-webkit-scrollbar-thumb { - display: none -} - -#page-tree li.active { - text-shadow: 0 0 rgba(0, 0, 0, 0); -} - -#page-tree::-webkit-scrollbar, -#page-tree::-webkit-scrollbar-thumb { - display: none -} - -#page-tree::-webkit-scrollbar{ - /* width: 7px; - background-color: #f6f6f6; */ - display: none -} - -#page-tree::-webkit-scrollbar-thumb { - /* box-shadow: inset 0 0 0 10px; */ - display: none -} - -.page-tree--node { - padding: 0.25rem 0; -} - -.page-tree--node > a { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.page-tree--node.article > a { - padding-left: 1.5rem; -} - -.active div > div > a.current { - /* color: var(--color-primary); */ - color: blue; -} - -.page-tree--node.active > a > .page-tree--nav__article_point { - display: flex; -} - -/* 搜索关键词高亮 */ - -.search-highlight-block b { - color: hsl(var(--theme-color-primary)); -} - -/* wiki保持跟editor样式同步,去掉了 tailwind prose */ - -.ProseMirror { - width: 100%; - max-width: 56rem; - overflow-wrap: break-word; - /* 使分栏的宽度固定 */ - [data-block-column-width="flex-1"] { - width: 50%; - } - table { - width: 100%; - } - table { - min-width: 640px !important; - } - table { - table-layout: auto; - } - table { - /* daisyui: @apply table table-pin-rows table-pin-cols; */ - /* baklib editor: @apply table-auto w-full table; */ - } -} - -.placeholder\:text-slate-400\/70::-moz-placeholder { - color: rgb(148 163 184 / 0.7); -} - -.placeholder\:text-slate-400\/70::placeholder { - color: rgb(148 163 184 / 0.7); -} - -.before\:pointer-events-none::before { - content: var(--tw-content); - pointer-events: none; -} - -.before\:absolute::before { - content: var(--tw-content); - position: absolute; -} - -.before\:inset-0::before { - content: var(--tw-content); - inset: 0px; -} - -.before\:-z-10::before { - content: var(--tw-content); - z-index: -10; -} - -.before\:hidden::before { - content: var(--tw-content); - display: none; -} - -.before\:rounded::before { - content: var(--tw-content); - border-radius: 0.25rem; -} - -.before\:bg-gradient-to-tr::before { - content: var(--tw-content); - background-image: linear-gradient(to top right, var(--tw-gradient-stops)); -} - -.before\:from-blue-400::before { - content: var(--tw-content); - --tw-gradient-from: #60a5fa var(--tw-gradient-from-position); - --tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.before\:to-purple-500::before { - content: var(--tw-content); - --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); -} - -.before\:opacity-20::before { - content: var(--tw-content); - opacity: 0.2; -} - -.hover\:-translate-y-\[2px\]:hover { - --tw-translate-y: -2px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.hover\:overflow-y-auto:hover { - overflow-y: auto; -} - -.hover\:rounded-xl:hover { - border-radius: 0.75rem; -} - -.hover\:border-slate-400:hover { - --tw-border-opacity: 1; - border-color: rgb(148 163 184 / var(--tw-border-opacity)); -} - -.hover\:bg-accent-100:hover { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-accent-hsl-h) var(--theme-color-accent-hsl-s) 92% / var(--tw-bg-opacity)); -} - -.hover\:bg-blue-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-300:hover { - --tw-bg-opacity: 1; - background-color: rgb(209 213 219 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); -} - -.hover\:bg-indigo-500:hover { - --tw-bg-opacity: 1; - background-color: rgb(99 102 241 / var(--tw-bg-opacity)); -} - -.hover\:bg-primary:hover { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.hover\:bg-primary-50:hover { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary-hsl-h) var(--theme-color-primary-hsl-s) 96% / var(--tw-bg-opacity)); -} - -.hover\:bg-slate-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(241 245 249 / var(--tw-bg-opacity)); -} - -.hover\:bg-slate-150:hover { - --tw-bg-opacity: 1; - background-color: rgb(233 238 245 / var(--tw-bg-opacity)); -} - -.hover\:bg-slate-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(226 232 240 / var(--tw-bg-opacity)); -} - -.hover\:bg-opacity-50:hover { - --tw-bg-opacity: 0.5; -} - -.hover\:from-secondary-100:hover { - --tw-gradient-from: hsl(var(--theme-color-secondary-hsl-h) var(--theme-color-secondary-hsl-s) 92%) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-secondary-hsl-h) var(--theme-color-secondary-hsl-s) 92% / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.hover\:to-primary-100:hover { - --tw-gradient-to: hsl(var(--theme-color-primary-hsl-h) var(--theme-color-primary-hsl-s) 92%) var(--tw-gradient-to-position); -} - -.hover\:text-gray-400:hover { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} - -.hover\:text-gray-500:hover { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.hover\:text-primary:hover { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-primary) / var(--tw-text-opacity)); -} - -.hover\:text-secondary:hover { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-secondary) / var(--tw-text-opacity)); -} - -.hover\:underline:hover { - text-decoration-line: underline; -} - -.hover\:shadow-md:hover { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.focus\:z-20:focus { - z-index: 20; -} - -.focus\:border-primary:focus { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-primary) / var(--tw-border-opacity)); -} - -.focus\:bg-gray-50:focus { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.focus\:bg-slate-300\/20:focus { - background-color: rgb(203 213 225 / 0.2); -} - -.focus\:bg-opacity-90:focus { - --tw-bg-opacity: 0.9; -} - -.focus\:shadow-md:focus { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.focus\:outline-offset-0:focus { - outline-offset: 0px; -} - -.focus\:ring:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus\:ring-0:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus-visible\:outline:focus-visible { - outline-style: solid; -} - -.focus-visible\:outline-2:focus-visible { - outline-width: 2px; -} - -.focus-visible\:outline-offset-2:focus-visible { - outline-offset: 2px; -} - -.focus-visible\:outline-indigo-600:focus-visible { - outline-color: #4f46e5; -} - -.active\:bg-slate-300\/25:active { - background-color: rgb(203 213 225 / 0.25); -} - -.disabled\:pointer-events-none:disabled { - pointer-events: none; -} - -.disabled\:opacity-50:disabled { - opacity: 0.5; -} - -.group:hover .group-hover\:translate-x-3 { - --tw-translate-x: 0.75rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.group:hover .group-hover\:scale-105 { - --tw-scale-x: 1.05; - --tw-scale-y: 1.05; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.group:hover .group-hover\:bg-primary { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.group:hover .group-hover\:text-blue-600 { - --tw-text-opacity: 1; - color: rgb(37 99 235 / var(--tw-text-opacity)); -} - -.group:hover .group-hover\:text-primary { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-primary) / var(--tw-text-opacity)); -} - -.group:hover .group-hover\:opacity-100 { - opacity: 1; -} - -.peer:focus ~ .peer-focus\:text-primary { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-primary) / var(--tw-text-opacity)); -} - -.dark\:block:is(.dark *) { - display: block; -} - -.dark\:hidden:is(.dark *) { - display: none; -} - -.dark\:border-gray-700:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); -} - -.dark\:border-navy-500:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(56 71 102 / var(--tw-border-opacity)); -} - -.dark\:border-primary:is(.dark *) { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-primary) / var(--tw-border-opacity)); -} - -.dark\:border-slate-800:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(30 41 59 / var(--tw-border-opacity)); -} - -.dark\:bg-gray-600:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); -} - -.dark\:bg-gray-700:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); -} - -.dark\:bg-navy-500:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(56 71 102 / var(--tw-bg-opacity)); -} - -.dark\:bg-navy-700:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(38 51 77 / var(--tw-bg-opacity)); -} - -.dark\:bg-primary:is(.dark *) { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.dark\:bg-slate-600:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(71 85 105 / var(--tw-bg-opacity)); -} - -.dark\:bg-slate-700:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(51 65 85 / var(--tw-bg-opacity)); -} - -.dark\:bg-slate-800:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(30 41 59 / var(--tw-bg-opacity)); -} - -.dark\:bg-slate-900:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(15 23 42 / var(--tw-bg-opacity)); -} - -.dark\:from-primary:is(.dark *) { - --tw-gradient-from: hsl(var(--theme-color-primary) / 1) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-primary) / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.dark\:from-secondary:is(.dark *) { - --tw-gradient-from: hsl(var(--theme-color-secondary) / 1) var(--tw-gradient-from-position); - --tw-gradient-to: hsl(var(--theme-color-secondary) / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.dark\:to-accent:is(.dark *) { - --tw-gradient-to: hsl(var(--theme-color-accent) / 1) var(--tw-gradient-to-position); -} - -.dark\:to-primary:is(.dark *) { - --tw-gradient-to: hsl(var(--theme-color-primary) / 1) var(--tw-gradient-to-position); -} - -.dark\:fill-slate-800:is(.dark *) { - fill: #1e293b; -} - -.dark\:text-gray-100:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} - -.dark\:text-gray-300:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} - -.dark\:text-gray-400:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} - -.dark\:text-gray-500:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.dark\:text-primary:is(.dark *) { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-primary) / var(--tw-text-opacity)); -} - -.dark\:text-slate-200:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(226 232 240 / var(--tw-text-opacity)); -} - -.dark\:text-slate-400:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(148 163 184 / var(--tw-text-opacity)); -} - -.dark\:text-slate-50:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(248 250 252 / var(--tw-text-opacity)); -} - -.dark\:text-slate-500:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(100 116 139 / var(--tw-text-opacity)); -} - -.dark\:text-white:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.dark\:hover\:border-navy-400:hover:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(92 107 138 / var(--tw-border-opacity)); -} - -.dark\:hover\:bg-gray-600:hover:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); -} - -.dark\:hover\:bg-gray-800:hover:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); -} - -.dark\:hover\:bg-primary:hover:is(.dark *) { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.dark\:focus\:border-accent:focus:is(.dark *) { - --tw-border-opacity: 1; - border-color: hsl(var(--theme-color-accent) / var(--tw-border-opacity)); -} - -.dark\:focus\:bg-primary:focus:is(.dark *) { - --tw-bg-opacity: 1; - background-color: hsl(var(--theme-color-primary) / var(--tw-bg-opacity)); -} - -.peer:focus ~ .dark\:peer-focus\:text-accent:is(.dark *) { - --tw-text-opacity: 1; - color: hsl(var(--theme-color-accent) / var(--tw-text-opacity)); -} - -@media (min-width: 640px) { - .sm\:-top-80 { - top: -20rem; - } - - .sm\:left-\[calc\(50\%\+36rem\)\] { - left: calc(50% + 36rem); - } - - .sm\:left-\[calc\(50\%-20rem\)\] { - left: calc(50% - 20rem); - } - - .sm\:left-\[calc\(50\%-30rem\)\] { - left: calc(50% - 30rem); - } - - .sm\:right-auto { - right: auto; - } - - .sm\:top-\[calc\(100\%-30rem\)\] { - top: calc(100% - 30rem); - } - - .sm\:mb-0 { - margin-bottom: 0px; - } - - .sm\:mt-0 { - margin-top: 0px; - } - - .sm\:inline { - display: inline; - } - - .sm\:flex { - display: flex; - } - - .sm\:hidden { - display: none; - } - - .sm\:w-1\/2 { - width: 50%; - } - - .sm\:w-\[72\.1875rem\] { - width: 72.1875rem; - } - - .sm\:w-\[82\.1875rem\] { - width: 82.1875rem; - } - - .sm\:flex-1 { - flex: 1 1 0%; - } - - .sm\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .sm\:flex-nowrap { - flex-wrap: nowrap; - } - - .sm\:items-center { - align-items: center; - } - - .sm\:justify-center { - justify-content: center; - } - - .sm\:justify-between { - justify-content: space-between; - } - - .sm\:gap-6 { - gap: 1.5rem; - } - - .sm\:border-b-0 { - border-bottom-width: 0px; - } - - .sm\:p-6 { - padding: 1.5rem; - } - - .sm\:px-0 { - padding-left: 0px; - padding-right: 0px; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .sm\:py-32 { - padding-top: 8rem; - padding-bottom: 8rem; - } - - .sm\:pl-12 { - padding-left: 3rem; - } - - .sm\:text-center { - text-align: center; - } - - .sm\:text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; - } - - .sm\:text-5xl { - font-size: 3rem; - line-height: 1; - } - - .sm\:text-lg { - font-size: 1.125rem; - line-height: 1.75rem; - } -} - -@media (min-width: 768px) { - .md\:col-span-3 { - grid-column: span 3 / span 3; - } - - .md\:-mx-8 { - margin-left: -2rem; - margin-right: -2rem; - } - - .md\:my-4 { - margin-top: 1rem; - margin-bottom: 1rem; - } - - .md\:my-8 { - margin-top: 2rem; - margin-bottom: 2rem; - } - - .md\:-mt-18 { - margin-top: -4.5rem; - } - - .md\:mb-0 { - margin-bottom: 0px; - } - - .md\:mb-8 { - margin-bottom: 2rem; - } - - .md\:ml-0 { - margin-left: 0px; - } - - .md\:ml-72 { - margin-left: 18rem; - } - - .md\:ml-8 { - margin-left: 2rem; - } - - .md\:mt-0 { - margin-top: 0px; - } - - .md\:mt-8 { - margin-top: 2rem; - } - - .md\:block { - display: block; - } - - .md\:inline-block { - display: inline-block; - } - - .md\:flex { - display: flex; - } - - .md\:grid { - display: grid; - } - - .md\:hidden { - display: none; - } - - .md\:h-12 { - height: 3rem; - } - - .md\:h-16 { - height: 4rem; - } - - .md\:h-40 { - height: 10rem; - } - - .md\:h-44 { - height: 11rem; - } - - .md\:h-8 { - height: 2rem; - } - - .md\:h-\[300px\] { - height: 300px; - } - - .md\:h-\[500px\] { - height: 500px; - } - - .md\:w-1\/2 { - width: 50%; - } - - .md\:w-2\/3 { - width: 66.666667%; - } - - .md\:w-auto { - width: auto; - } - - .md\:max-w-md { - max-width: 28rem; - } - - .md\:max-w-xs { - max-width: 20rem; - } - - .md\:flex-1 { - flex: 1 1 0%; - } - - .md\:transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - - .md\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .md\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .md\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .md\:grid-cols-6 { - grid-template-columns: repeat(6, minmax(0, 1fr)); - } - - .md\:grid-cols-9 { - grid-template-columns: repeat(9, minmax(0, 1fr)); - } - - .md\:flex-row { - flex-direction: row; - } - - .md\:flex-col { - flex-direction: column; - } - - .md\:items-start { - align-items: flex-start; - } - - .md\:gap-12 { - gap: 3rem; - } - - .md\:gap-4 { - gap: 1rem; - } - - .md\:gap-8 { - gap: 2rem; - } - - .md\:space-x-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1.5rem * var(--tw-space-x-reverse)); - margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); - } - - .md\:space-y-0 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0px * var(--tw-space-y-reverse)); - } - - .md\:space-y-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); - } - - .md\:divide-x-2 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-x-reverse: 0; - border-right-width: calc(2px * var(--tw-divide-x-reverse)); - border-left-width: calc(2px * calc(1 - var(--tw-divide-x-reverse))); - } - - .md\:divide-y-0 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-y-reverse: 0; - border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse))); - border-bottom-width: calc(0px * var(--tw-divide-y-reverse)); - } - - .md\:self-center { - align-self: center; - } - - .md\:border-b-0 { - border-bottom-width: 0px; - } - - .md\:border-l-2 { - border-left-width: 2px; - } - - .md\:border-r { - border-right-width: 1px; - } - - .md\:p-0 { - padding: 0px; - } - - .md\:p-24 { - padding: 6rem; - } - - .md\:p-4 { - padding: 1rem; - } - - .md\:p-5 { - padding: 1.25rem; - } - - .md\:p-6 { - padding: 1.5rem; - } - - .md\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - - .md\:py-0 { - padding-top: 0px; - padding-bottom: 0px; - } - - .md\:pb-0 { - padding-bottom: 0px; - } - - .md\:pt-16 { - padding-top: 4rem; - } - - .md\:pt-5 { - padding-top: 1.25rem; - } - - .md\:text-left { - text-align: left; - } - - .md\:text-right { - text-align: right; - } - - .md\:text-2xl { - font-size: 1.5rem; - line-height: 2rem; - } - - .md\:text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; - } - - .md\:text-sm { - font-size: 0.875rem; - line-height: 1.25rem; - } - - .md\:text-xl { - font-size: 1.25rem; - line-height: 1.75rem; - } - - .md\:font-semibold { - font-weight: 600; - } -} - -@media (min-width: 1024px) { - .lg\:fixed { - position: fixed; - } - - .lg\:inset-y-0 { - top: 0px; - bottom: 0px; - } - - .lg\:z-50 { - z-index: 50; - } - - .lg\:col-span-2 { - grid-column: span 2 / span 2; - } - - .lg\:col-span-3 { - grid-column: span 3 / span 3; - } - - .lg\:mb-16 { - margin-bottom: 4rem; - } - - .lg\:mt-0 { - margin-top: 0px; - } - - .lg\:mt-10 { - margin-top: 2.5rem; - } - - .lg\:mt-12 { - margin-top: 3rem; - } - - .lg\:mt-14 { - margin-top: 3.5rem; - } - - .lg\:inline { - display: inline; - } - - .lg\:flex { - display: flex; - } - - .lg\:inline-flex { - display: inline-flex; - } - - .lg\:h-10 { - height: 2.5rem; - } - - .lg\:h-14 { - height: 3.5rem; - } - - .lg\:h-7 { - height: 1.75rem; - } - - .lg\:w-1\/2 { - width: 50%; - } - - .lg\:w-7 { - width: 1.75rem; - } - - .lg\:w-80 { - width: 20rem; - } - - .lg\:max-w-none { - max-width: none; - } - - .lg\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .lg\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .lg\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .lg\:grid-cols-5 { - grid-template-columns: repeat(5, minmax(0, 1fr)); - } - - .lg\:grid-cols-8 { - grid-template-columns: repeat(8, minmax(0, 1fr)); - } - - .lg\:flex-col { - flex-direction: column; - } - - .lg\:justify-end { - justify-content: flex-end; - } - - .lg\:gap-2 { - gap: 0.5rem; - } - - .lg\:gap-x-12 { - -moz-column-gap: 3rem; - column-gap: 3rem; - } - - .lg\:gap-x-8 { - -moz-column-gap: 2rem; - column-gap: 2rem; - } - - .lg\:gap-y-16 { - row-gap: 4rem; - } - - .lg\:space-x-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1rem * var(--tw-space-x-reverse)); - margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); - } - - .lg\:space-y-0 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0px * var(--tw-space-y-reverse)); - } - - .lg\:divide-x-2 > :not([hidden]) ~ :not([hidden]) { - --tw-divide-x-reverse: 0; - border-right-width: calc(2px * var(--tw-divide-x-reverse)); - border-left-width: calc(2px * calc(1 - var(--tw-divide-x-reverse))); - } - - .lg\:rounded-full { - border-radius: 9999px; - } - - .lg\:border-l-0 { - border-left-width: 0px; - } - - .lg\:p-8 { - padding: 2rem; - } - - .lg\:px-4 { - padding-left: 1rem; - padding-right: 1rem; - } - - .lg\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .lg\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - - .lg\:py-12 { - padding-top: 3rem; - padding-bottom: 3rem; - } - - .lg\:py-8 { - padding-top: 2rem; - padding-bottom: 2rem; - } - - .lg\:pb-12 { - padding-bottom: 3rem; - } - - .lg\:pl-6 { - padding-left: 1.5rem; - } - - .lg\:pl-80 { - padding-left: 20rem; - } - - .lg\:pr-6 { - padding-right: 1.5rem; - } - - .lg\:pt-14 { - padding-top: 3.5rem; - } - - .lg\:pt-24 { - padding-top: 6rem; - } - - .lg\:text-right { - text-align: right; - } - - .lg\:text-2xl { - font-size: 1.5rem; - line-height: 2rem; - } - - .lg\:text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; - } -} - -@media (min-width: 1280px) { - .xl\:block { - display: block; - } - - .xl\:h-10 { - height: 2.5rem; - } - - .xl\:h-16 { - height: 4rem; - } - - .xl\:h-auto { - height: auto; - } - - .xl\:w-16 { - width: 4rem; - } - - .xl\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .xl\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .xl\:gap-y-20 { - row-gap: 5rem; - } - - .xl\:space-x-12 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(3rem * var(--tw-space-x-reverse)); - margin-left: calc(3rem * calc(1 - var(--tw-space-x-reverse))); - } - - .xl\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .xl\:pr-0 { - padding-right: 0px; - } - - .xl\:text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; - } -} - -@media (min-width: 1536px) { - .\32xl\:top-28 { - top: 7rem; - } -} - -@media print { - .print\:hidden { - display: none; - } -} - -.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb { - border-radius: 9999px; -} - -.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-gray-300::-webkit-scrollbar-thumb { - --tw-bg-opacity: 1; - background-color: rgb(209 213 219 / var(--tw-bg-opacity)); -} - -.dark\:\[\&\:\:-webkit-scrollbar-thumb\]\:bg-neutral-500:is(.dark *)::-webkit-scrollbar-thumb { - --tw-bg-opacity: 1; - background-color: rgb(115 115 115 / var(--tw-bg-opacity)); -} - -.\[\&\:\:-webkit-scrollbar-track\]\:rounded-full::-webkit-scrollbar-track { - border-radius: 9999px; -} - -.\[\&\:\:-webkit-scrollbar-track\]\:bg-gray-100::-webkit-scrollbar-track { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.dark\:\[\&\:\:-webkit-scrollbar-track\]\:bg-neutral-700:is(.dark *)::-webkit-scrollbar-track { - --tw-bg-opacity: 1; - background-color: rgb(64 64 64 / var(--tw-bg-opacity)); -} - -.\[\&\:\:-webkit-scrollbar\]\:w-2::-webkit-scrollbar { - width: 0.5rem; -} \ No newline at end of file diff --git a/assets/css/viewer.min.css b/assets/css/viewer.min.css deleted file mode 100644 index f3fad6b26ee33e4decc7d43d83fe24803e28387a..0000000000000000000000000000000000000000 --- a/assets/css/viewer.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Viewer.js v1.11.6 - * https://fengyuanchen.github.io/viewerjs - * - * Copyright 2015-present Chen Fengyuan - * Released under the MIT license - * - * Date: 2023-09-17T03:16:35.830Z - */.viewer-close:before,.viewer-flip-horizontal:before,.viewer-flip-vertical:before,.viewer-fullscreen-exit:before,.viewer-fullscreen:before,.viewer-next:before,.viewer-one-to-one:before,.viewer-play:before,.viewer-prev:before,.viewer-reset:before,.viewer-rotate-left:before,.viewer-rotate-right:before,.viewer-zoom-in:before,.viewer-zoom-out:before{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-size:280px;color:transparent;display:block;font-size:0;height:20px;line-height:0;width:20px}.viewer-zoom-in:before{background-position:0 0;content:"Zoom In"}.viewer-zoom-out:before{background-position:-20px 0;content:"Zoom Out"}.viewer-one-to-one:before{background-position:-40px 0;content:"One to One"}.viewer-reset:before{background-position:-60px 0;content:"Reset"}.viewer-prev:before{background-position:-80px 0;content:"Previous"}.viewer-play:before{background-position:-100px 0;content:"Play"}.viewer-next:before{background-position:-120px 0;content:"Next"}.viewer-rotate-left:before{background-position:-140px 0;content:"Rotate Left"}.viewer-rotate-right:before{background-position:-160px 0;content:"Rotate Right"}.viewer-flip-horizontal:before{background-position:-180px 0;content:"Flip Horizontal"}.viewer-flip-vertical:before{background-position:-200px 0;content:"Flip Vertical"}.viewer-fullscreen:before{background-position:-220px 0;content:"Enter Full Screen"}.viewer-fullscreen-exit:before{background-position:-240px 0;content:"Exit Full Screen"}.viewer-close:before{background-position:-260px 0;content:"Close"}.viewer-container{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;bottom:0;direction:ltr;font-size:0;left:0;line-height:0;overflow:hidden;position:absolute;right:0;top:0;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.viewer-container ::-moz-selection,.viewer-container::-moz-selection{background-color:transparent}.viewer-container ::selection,.viewer-container::selection{background-color:transparent}.viewer-container:focus{outline:0}.viewer-container img{display:block;height:auto;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.viewer-canvas{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}.viewer-canvas>img{height:auto;margin:15px auto;max-width:90%!important;width:auto}.viewer-footer{bottom:0;left:0;overflow:hidden;position:absolute;right:0;text-align:center}.viewer-navbar{background-color:rgba(0,0,0,.5);overflow:hidden}.viewer-list{box-sizing:content-box;height:50px;margin:0;overflow:hidden;padding:1px 0}.viewer-list>li{color:transparent;cursor:pointer;float:left;font-size:0;height:50px;line-height:0;opacity:.5;overflow:hidden;transition:opacity .15s;width:30px}.viewer-list>li:focus,.viewer-list>li:hover{opacity:.75}.viewer-list>li:focus{outline:0}.viewer-list>li+li{margin-left:1px}.viewer-list>.viewer-loading{position:relative}.viewer-list>.viewer-loading:after{border-width:2px;height:20px;margin-left:-10px;margin-top:-10px;width:20px}.viewer-list>.viewer-active,.viewer-list>.viewer-active:focus,.viewer-list>.viewer-active:hover{opacity:1}.viewer-player{background-color:#000;bottom:0;cursor:none;display:none;right:0;z-index:1}.viewer-player,.viewer-player>img{left:0;position:absolute;top:0}.viewer-toolbar>ul{display:inline-block;margin:0 auto 5px;overflow:hidden;padding:6px 3px}.viewer-toolbar>ul>li{background-color:rgba(0,0,0,.5);border-radius:50%;cursor:pointer;float:left;height:24px;overflow:hidden;transition:background-color .15s;width:24px}.viewer-toolbar>ul>li:focus,.viewer-toolbar>ul>li:hover{background-color:rgba(0,0,0,.8)}.viewer-toolbar>ul>li:focus{box-shadow:0 0 3px #fff;outline:0;position:relative;z-index:1}.viewer-toolbar>ul>li:before{margin:2px}.viewer-toolbar>ul>li+li{margin-left:1px}.viewer-toolbar>ul>.viewer-small{height:18px;margin-bottom:3px;margin-top:3px;width:18px}.viewer-toolbar>ul>.viewer-small:before{margin:-1px}.viewer-toolbar>ul>.viewer-large{height:30px;margin-bottom:-3px;margin-top:-3px;width:30px}.viewer-toolbar>ul>.viewer-large:before{margin:5px}.viewer-tooltip{background-color:rgba(0,0,0,.8);border-radius:10px;color:#fff;display:none;font-size:12px;height:20px;left:50%;line-height:20px;margin-left:-25px;margin-top:-10px;position:absolute;text-align:center;top:50%;width:50px}.viewer-title{color:#ccc;display:inline-block;font-size:12px;line-height:1.2;margin:5px 5%;max-width:90%;min-height:14px;opacity:.8;overflow:hidden;text-overflow:ellipsis;transition:opacity .15s;white-space:nowrap}.viewer-title:hover{opacity:1}.viewer-button{-webkit-app-region:no-drag;background-color:rgba(0,0,0,.5);border-radius:50%;cursor:pointer;height:80px;overflow:hidden;position:absolute;right:-40px;top:-40px;transition:background-color .15s;width:80px}.viewer-button:focus,.viewer-button:hover{background-color:rgba(0,0,0,.8)}.viewer-button:focus{box-shadow:0 0 3px #fff;outline:0}.viewer-button:before{bottom:15px;left:15px;position:absolute}.viewer-fixed{position:fixed}.viewer-open{overflow:hidden}.viewer-show{display:block}.viewer-hide{display:none}.viewer-backdrop{background-color:rgba(0,0,0,.5)}.viewer-invisible{visibility:hidden}.viewer-move{cursor:move;cursor:grab}.viewer-fade{opacity:0}.viewer-in{opacity:1}.viewer-transition{transition:all .3s}@keyframes viewer-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.viewer-loading:after{animation:viewer-spinner 1s linear infinite;border:4px solid hsla(0,0%,100%,.1);border-left-color:hsla(0,0%,100%,.5);border-radius:50%;content:"";display:inline-block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:1}@media (max-width:767px){.viewer-hide-xs-down{display:none}}@media (max-width:991px){.viewer-hide-sm-down{display:none}}@media (max-width:1199px){.viewer-hide-md-down{display:none}} \ No newline at end of file diff --git a/assets/images/.DS_Store b/assets/images/.DS_Store deleted file mode 100644 index d023a2b31f5c0d2d652d034454a4a4d0fd50eb31..0000000000000000000000000000000000000000 Binary files a/assets/images/.DS_Store and /dev/null differ diff --git a/assets/images/theme/index-docs.png b/assets/images/schema/index-docs.png similarity index 100% rename from assets/images/theme/index-docs.png rename to assets/images/schema/index-docs.png diff --git a/assets/images/theme/index-help-center.png b/assets/images/schema/index-help-center.png similarity index 100% rename from assets/images/theme/index-help-center.png rename to assets/images/schema/index-help-center.png diff --git a/assets/images/theme/index-list.png b/assets/images/schema/index-list.png similarity index 100% rename from assets/images/theme/index-list.png rename to assets/images/schema/index-list.png diff --git a/assets/images/schema/page-export.png b/assets/images/schema/page-export.png new file mode 100644 index 0000000000000000000000000000000000000000..19a135a03dfbefee718ab182ff6499680585af44 Binary files /dev/null and b/assets/images/schema/page-export.png differ diff --git a/assets/images/schema/page-videos.png b/assets/images/schema/page-videos.png new file mode 100644 index 0000000000000000000000000000000000000000..20c867500d8ab7eca58f92e1360a1f5038a33517 Binary files /dev/null and b/assets/images/schema/page-videos.png differ diff --git a/assets/images/theme/page.png b/assets/images/schema/page.png similarity index 100% rename from assets/images/theme/page.png rename to assets/images/schema/page.png diff --git a/assets/images/theme/thumb.png b/assets/images/schema/thumb.png similarity index 100% rename from assets/images/theme/thumb.png rename to assets/images/schema/thumb.png diff --git a/assets/images/theme/wiki.png b/assets/images/schema/wiki.png similarity index 100% rename from assets/images/theme/wiki.png rename to assets/images/schema/wiki.png diff --git a/assets/javascripts/application.js b/assets/javascripts/application.js new file mode 100644 index 0000000000000000000000000000000000000000..83e28b940cbeb0f523cd404958723427f8d05ab0 --- /dev/null +++ b/assets/javascripts/application.js @@ -0,0 +1,62 @@ +(()=>{var Ru=Object.create;var Fn=Object.defineProperty;var Pu=Object.getOwnPropertyDescriptor;var ku=Object.getOwnPropertyNames;var Iu=Object.getPrototypeOf,Du=Object.prototype.hasOwnProperty;var Fu=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Nu=(t,e)=>{for(var r in e)Fn(t,r,{get:e[r],enumerable:!0})},Bu=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ku(e))!Du.call(t,n)&&n!==r&&Fn(t,n,{get:()=>e[n],enumerable:!(i=Pu(e,n))||i.enumerable});return t};var Vu=(t,e,r)=>(r=t!=null?Ru(Iu(t)):{},Bu(e||!t||!t.__esModule?Fn(r,"default",{value:t,enumerable:!0}):r,t));var Pc=Fu((Bo,Vo)=>{(function(t,e){typeof Bo=="object"&&typeof Vo<"u"?Vo.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.Viewer=e())})(Bo,function(){"use strict";function t(f,a){var d=Object.keys(f);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(f);a&&(c=c.filter(function(p){return Object.getOwnPropertyDescriptor(f,p).enumerable})),d.push.apply(d,c)}return d}function e(f){for(var a=1;a
',M=typeof window<"u"&&typeof window.document<"u",x=M?window:{},L=M&&x.document.documentElement?"ontouchstart"in x.document.documentElement:!1,P=M?"PointerEvent"in x:!1,O="viewer",S="move",C="switch",b="zoom",T="".concat(O,"-active"),h="".concat(O,"-close"),y="".concat(O,"-fade"),E="".concat(O,"-fixed"),_="".concat(O,"-fullscreen"),R="".concat(O,"-fullscreen-exit"),F="".concat(O,"-hide"),j="".concat(O,"-hide-md-down"),W="".concat(O,"-hide-sm-down"),J="".concat(O,"-hide-xs-down"),U="".concat(O,"-in"),G="".concat(O,"-invisible"),ve="".concat(O,"-loading"),Oe="".concat(O,"-move"),Ee="".concat(O,"-open"),ie="".concat(O,"-show"),X="".concat(O,"-transition"),Re="click",Ge="dblclick",He="dragstart",ct="focusin",$e="keydown",ne="load",Pe="error",Tt=L?"touchend touchcancel":"mouseup",Ze=L?"touchmove":"mousemove",xt=L?"touchstart":"mousedown",Qe=P?"pointerdown":xt,pt=P?"pointermove":Ze,Wt=P?"pointerup pointercancel":Tt,Ot="resize",Ie="transitionend",zt="wheel",Ct="ready",_t="show",Ut="shown",Kt="hide",We="hidden",et="view",tt="viewed",ut="move",Lt="moved",Yt="rotate",Xt="rotated",Jt="scale",Gt="scaled",wi="zoom",Ei="zoomed",Si="play",Ai="stop",Er="".concat(O,"Action"),A=/\s\s*/,V=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function q(f){return typeof f=="string"}var Z=Number.isNaN||x.isNaN;function H(f){return typeof f=="number"&&!Z(f)}function ue(f){return typeof f>"u"}function Se(f){return r(f)==="object"&&f!==null}var Mt=Object.prototype.hasOwnProperty;function mt(f){if(!Se(f))return!1;try{var a=f.constructor,d=a.prototype;return a&&d&&Mt.call(d,"isPrototypeOf")}catch{return!1}}function K(f){return typeof f=="function"}function ee(f,a){if(f&&K(a))if(Array.isArray(f)||H(f.length)){var d=f.length,c;for(c=0;c1?d-1:0),p=1;p0&&c.forEach(function(v){Se(v)&&Object.keys(v).forEach(function(w){a[w]=v[w]})}),a},Rt=/^(?:width|height|left|top|marginLeft|marginTop)$/;function qe(f,a){var d=f.style;ee(a,function(c,p){Rt.test(p)&&H(c)&&(c+="px"),d[p]=c})}function zr(f){return q(f)?f.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">"):f}function rt(f,a){return!f||!a?!1:f.classList?f.classList.contains(a):f.className.indexOf(a)>-1}function $(f,a){if(!(!f||!a)){if(H(f.length)){ee(f,function(c){$(c,a)});return}if(f.classList){f.classList.add(a);return}var d=f.className.trim();d?d.indexOf(a)<0&&(f.className="".concat(d," ").concat(a)):f.className=a}}function Q(f,a){if(!(!f||!a)){if(H(f.length)){ee(f,function(d){Q(d,a)});return}if(f.classList){f.classList.remove(a);return}f.className.indexOf(a)>=0&&(f.className=f.className.replace(a,""))}}function Ur(f,a,d){if(a){if(H(f.length)){ee(f,function(c){Ur(c,a,d)});return}d?$(f,a):Q(f,a)}}var yu=/([a-z\d])([A-Z])/g;function kn(f){return f.replace(yu,"$1-$2").toLowerCase()}function Sr(f,a){return Se(f[a])?f[a]:f.dataset?f.dataset[a]:f.getAttribute("data-".concat(kn(a)))}function In(f,a,d){Se(d)?f[a]=d:f.dataset?f.dataset[a]=d:f.setAttribute("data-".concat(kn(a)),d)}var la=function(){var f=!1;if(M){var a=!1,d=function(){},c=Object.defineProperty({},"once",{get:function(){return f=!0,a},set:function(v){a=v}});x.addEventListener("test",d,c),x.removeEventListener("test",d,c)}return f}();function te(f,a,d){var c=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},p=d;a.trim().split(A).forEach(function(v){if(!la){var w=f.listeners;w&&w[v]&&w[v][d]&&(p=w[v][d],delete w[v][d],Object.keys(w[v]).length===0&&delete w[v],Object.keys(w).length===0&&delete f.listeners)}f.removeEventListener(v,p,c)})}function z(f,a,d){var c=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},p=d;a.trim().split(A).forEach(function(v){if(c.once&&!la){var w=f.listeners,I=w===void 0?{}:w;p=function(){delete I[v][d],f.removeEventListener(v,p,c);for(var D=arguments.length,k=new Array(D),B=0;BI?De=I/me:ae=N*me,he=H(he)?he:.9,ae=Math.min(ae*he,B),De=Math.min(De*he,Y);var Be=(I-ae)/2,Ve=(N-De)/2,se={left:Be,top:Ve,x:Be,y:Ve,width:ae,height:De,oldRatio:1,ratio:ae/B,aspectRatio:me,naturalWidth:B,naturalHeight:Y},gt=Ce({},se);c.rotatable&&(se.rotate=D.rotate||0,gt.rotate=0),c.scalable&&(se.scaleX=D.scaleX||1,se.scaleY=D.scaleY||1,gt.scaleX=1,gt.scaleY=1),d.imageData=se,d.initialImageData=gt,a&&a()})},renderImage:function(a){var d=this,c=this.image,p=this.imageData;if(qe(c,Ce({width:p.width,height:p.height,marginLeft:p.x,marginTop:p.y},Ti(p))),a)if((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&rt(c,X)){var v=function(){d.imageRendering=!1,a()};this.imageRendering={abort:function(){te(c,Ie,v)}},z(c,Ie,v,{once:!0})}else a()},resetImage:function(){var a=this.image;a&&(this.viewing&&this.viewing.abort(),a.parentNode.removeChild(a),this.image=null,this.title.innerHTML="")}},xu={bind:function(){var a=this.options,d=this.viewer,c=this.canvas,p=this.element.ownerDocument;z(d,Re,this.onClick=this.click.bind(this)),z(d,He,this.onDragStart=this.dragstart.bind(this)),z(c,Qe,this.onPointerDown=this.pointerdown.bind(this)),z(p,pt,this.onPointerMove=this.pointermove.bind(this)),z(p,Wt,this.onPointerUp=this.pointerup.bind(this)),z(p,$e,this.onKeyDown=this.keydown.bind(this)),z(window,Ot,this.onResize=this.resize.bind(this)),a.zoomable&&a.zoomOnWheel&&z(d,zt,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),a.toggleOnDblclick&&z(c,Ge,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var a=this.options,d=this.viewer,c=this.canvas,p=this.element.ownerDocument;te(d,Re,this.onClick),te(d,He,this.onDragStart),te(c,Qe,this.onPointerDown),te(p,pt,this.onPointerMove),te(p,Wt,this.onPointerUp),te(p,$e,this.onKeyDown),te(window,Ot,this.onResize),a.zoomable&&a.zoomOnWheel&&te(d,zt,this.onWheel,{passive:!1,capture:!0}),a.toggleOnDblclick&&te(c,Ge,this.onDblclick)}},Ou={click:function(a){var d=this.options,c=this.imageData,p=a.target,v=Sr(p,Er);switch(!v&&p.localName==="img"&&p.parentElement.localName==="li"&&(p=p.parentElement,v=Sr(p,Er)),L&&a.isTrusted&&p===this.canvas&&clearTimeout(this.clickCanvasTimeout),v){case"mix":this.played?this.stop():d.inline?this.fulled?this.exit():this.full():this.hide();break;case"hide":this.pointerMoved||this.hide();break;case"view":this.view(Sr(p,"index"));break;case"zoom-in":this.zoom(.1,!0);break;case"zoom-out":this.zoom(-.1,!0);break;case"one-to-one":this.toggle();break;case"reset":this.reset();break;case"prev":this.prev(d.loop);break;case"play":this.play(d.fullscreen);break;case"next":this.next(d.loop);break;case"rotate-left":this.rotate(-90);break;case"rotate-right":this.rotate(90);break;case"flip-horizontal":this.scaleX(-c.scaleX||-1);break;case"flip-vertical":this.scaleY(-c.scaleY||-1);break;default:this.played&&this.stop()}},dblclick:function(a){a.preventDefault(),this.viewed&&a.target===this.image&&(L&&a.isTrusted&&clearTimeout(this.doubleClickImageTimeout),this.toggle(a.isTrusted?a:a.detail&&a.detail.originalEvent))},load:function(){var a=this;this.timeout&&(clearTimeout(this.timeout),this.timeout=!1);var d=this.element,c=this.options,p=this.image,v=this.index,w=this.viewerData;Q(p,G),c.loading&&Q(this.canvas,ve),p.style.cssText="height:0;"+"margin-left:".concat(w.width/2,"px;")+"margin-top:".concat(w.height/2,"px;")+"max-width:none!important;position:relative;width:0;",this.initImage(function(){Ur(p,Oe,c.movable),Ur(p,X,c.transition),a.renderImage(function(){a.viewed=!0,a.viewing=!1,K(c.viewed)&&z(d,tt,c.viewed,{once:!0}),pe(d,tt,{originalImage:a.images[v],index:v,image:p},{cancelable:!1})})})},loadImage:function(a){var d=a.target,c=d.parentNode,p=c.offsetWidth||30,v=c.offsetHeight||50,w=!!Sr(d,"filled");ca(d,this.options,function(I,N){var D=I/N,k=p,B=v;v*D>p?w?k=v*D:B=p/D:w?B=p/D:k=v*D,qe(d,Ce({width:k,height:B},Ti({translateX:(p-k)/2,translateY:(v-B)/2})))})},keydown:function(a){var d=this.options;if(d.keyboard){var c=a.keyCode||a.which||a.charCode;switch(c){case 13:this.viewer.contains(a.target)&&this.click(a);break}if(this.fulled)switch(c){case 27:this.played?this.stop():d.inline?this.fulled&&this.exit():this.hide();break;case 32:this.played&&this.stop();break;case 37:this.played&&this.playing?this.playing.prev():this.prev(d.loop);break;case 38:a.preventDefault(),this.zoom(d.zoomRatio,!0);break;case 39:this.played&&this.playing?this.playing.next():this.next(d.loop);break;case 40:a.preventDefault(),this.zoom(-d.zoomRatio,!0);break;case 48:case 49:a.ctrlKey&&(a.preventDefault(),this.toggle());break}}},dragstart:function(a){a.target.localName==="img"&&a.preventDefault()},pointerdown:function(a){var d=this.options,c=this.pointers,p=a.buttons,v=a.button;if(this.pointerMoved=!1,!(!this.viewed||this.showing||this.viewing||this.hiding||(a.type==="mousedown"||a.type==="pointerdown"&&a.pointerType==="mouse")&&(H(p)&&p!==1||H(v)&&v!==0||a.ctrlKey))){a.preventDefault(),a.changedTouches?ee(a.changedTouches,function(I){c[I.identifier]=Oi(I)}):c[a.pointerId||0]=Oi(a);var w=d.movable?S:!1;d.zoomOnTouch&&d.zoomable&&Object.keys(c).length>1?w=b:d.slideOnTouch&&(a.pointerType==="touch"||a.type==="touchstart")&&this.isSwitchable()&&(w=C),d.transition&&(w===S||w===b)&&Q(this.image,X),this.action=w}},pointermove:function(a){var d=this.pointers,c=this.action;!this.viewed||!c||(a.preventDefault(),a.changedTouches?ee(a.changedTouches,function(p){Ce(d[p.identifier]||{},Oi(p,!0))}):Ce(d[a.pointerId||0]||{},Oi(a,!0)),this.change(a))},pointerup:function(a){var d=this,c=this.options,p=this.action,v=this.pointers,w;a.changedTouches?ee(a.changedTouches,function(I){w=v[I.identifier],delete v[I.identifier]}):(w=v[a.pointerId||0],delete v[a.pointerId||0]),p&&(a.preventDefault(),c.transition&&(p===S||p===b)&&$(this.image,X),this.action=!1,L&&p!==b&&w&&Date.now()-w.timeStamp<500&&(clearTimeout(this.clickCanvasTimeout),clearTimeout(this.doubleClickImageTimeout),c.toggleOnDblclick&&this.viewed&&a.target===this.image?this.imageClicked?(this.imageClicked=!1,this.doubleClickImageTimeout=setTimeout(function(){pe(d.image,Ge,{originalEvent:a})},50)):(this.imageClicked=!0,this.doubleClickImageTimeout=setTimeout(function(){d.imageClicked=!1},500)):(this.imageClicked=!1,c.backdrop&&c.backdrop!=="static"&&a.target===this.canvas&&(this.clickCanvasTimeout=setTimeout(function(){pe(d.canvas,Re,{originalEvent:a})},50)))))},resize:function(){var a=this;if(!(!this.isShown||this.hiding)&&(this.fulled&&(this.close(),this.initBody(),this.open()),this.initContainer(),this.initViewer(),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){a.renderImage()}),this.played)){if(this.options.fullscreen&&this.fulled&&!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)){this.stop();return}ee(this.player.getElementsByTagName("img"),function(d){z(d,ne,a.loadImage.bind(a),{once:!0}),pe(d,ne)})}},wheel:function(a){var d=this;if(this.viewed&&(a.preventDefault(),!this.wheeling)){this.wheeling=!0,setTimeout(function(){d.wheeling=!1},50);var c=Number(this.options.zoomRatio)||.1,p=1;a.deltaY?p=a.deltaY>0?1:-1:a.wheelDelta?p=-a.wheelDelta/120:a.detail&&(p=a.detail>0?1:-1),this.zoom(-p*c,!0,null,a)}}},Cu={show:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,d=this.element,c=this.options;if(c.inline||this.showing||this.isShown||this.showing)return this;if(!this.ready)return this.build(),this.ready&&this.show(a),this;if(K(c.show)&&z(d,_t,c.show,{once:!0}),pe(d,_t)===!1||!this.ready)return this;this.hiding&&this.transitioning.abort(),this.showing=!0,this.open();var p=this.viewer;if(Q(p,F),p.setAttribute("role","dialog"),p.setAttribute("aria-labelledby",this.title.id),p.setAttribute("aria-modal",!0),p.removeAttribute("aria-hidden"),c.transition&&!a){var v=this.shown.bind(this);this.transitioning={abort:function(){te(p,Ie,v),Q(p,U)}},$(p,X),p.initialOffsetWidth=p.offsetWidth,z(p,Ie,v,{once:!0}),$(p,U)}else $(p,U),this.shown();return this},hide:function(){var a=this,d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,c=this.element,p=this.options;if(p.inline||this.hiding||!(this.isShown||this.showing))return this;if(K(p.hide)&&z(c,Kt,p.hide,{once:!0}),pe(c,Kt)===!1)return this;this.showing&&this.transitioning.abort(),this.hiding=!0,this.played?this.stop():this.viewing&&this.viewing.abort();var v=this.viewer,w=this.image,I=function(){Q(v,U),a.hidden()};if(p.transition&&!d){var N=function k(B){B&&B.target===v&&(te(v,Ie,k),a.hidden())},D=function(){rt(v,X)?(z(v,Ie,N),Q(v,U)):I()};this.transitioning={abort:function(){a.viewed&&rt(w,X)?te(w,Ie,D):rt(v,X)&&te(v,Ie,N)}},this.viewed&&rt(w,X)?(z(w,Ie,D,{once:!0}),this.zoomTo(0,!1,null,null,!0)):D()}else I();return this},view:function(){var a=this,d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.initialViewIndex;if(d=Number(d)||0,this.hiding||this.played||d<0||d>=this.length||this.viewed&&d===this.index)return this;if(!this.isShown)return this.index=d,this.show();this.viewing&&this.viewing.abort();var c=this.element,p=this.options,v=this.title,w=this.canvas,I=this.items[d],N=I.querySelector("img"),D=Sr(N,"originalUrl"),k=N.getAttribute("alt"),B=document.createElement("img");if(ee(p.inheritedAttributes,function(De){var Be=N.getAttribute(De);Be!==null&&B.setAttribute(De,Be)}),B.src=D,B.alt=k,K(p.view)&&z(c,et,p.view,{once:!0}),pe(c,et,{originalImage:this.images[d],index:d,image:B})===!1||!this.isShown||this.hiding||this.played)return this;var Y=this.items[this.index];Y&&(Q(Y,T),Y.removeAttribute("aria-selected")),$(I,T),I.setAttribute("aria-selected",!0),p.focus&&I.focus(),this.image=B,this.viewed=!1,this.index=d,this.imageData={},$(B,G),p.loading&&$(w,ve),w.innerHTML="",w.appendChild(B),this.renderList(),v.innerHTML="";var me=function(){var Be=a.imageData,Ve=Array.isArray(p.title)?p.title[1]:p.title;v.innerHTML=zr(K(Ve)?Ve.call(a,B,Be):"".concat(k," (").concat(Be.naturalWidth," \xD7 ").concat(Be.naturalHeight,")"))},he,ae;return z(c,tt,me,{once:!0}),this.viewing={abort:function(){te(c,tt,me),B.complete?a.imageRendering?a.imageRendering.abort():a.imageInitializing&&a.imageInitializing.abort():(B.src="",te(B,ne,he),a.timeout&&clearTimeout(a.timeout))}},B.complete?this.load():(z(B,ne,he=function(){te(B,Pe,ae),a.load()},{once:!0}),z(B,Pe,ae=function(){te(B,ne,he),a.timeout&&(clearTimeout(a.timeout),a.timeout=!1),Q(B,G),p.loading&&Q(a.canvas,ve)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){Q(B,G),a.timeout=!1},1e3)),this},prev:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,d=this.index-1;return d<0&&(d=a?this.length-1:0),this.view(d),this},next:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,d=this.length-1,c=this.index+1;return c>d&&(c=a?0:d),this.view(c),this},move:function(a){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:a,c=this.imageData;return this.moveTo(ue(a)?a:c.x+Number(a),ue(d)?d:c.y+Number(d)),this},moveTo:function(a){var d=this,c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:a,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,v=this.element,w=this.options,I=this.imageData;if(a=Number(a),c=Number(c),this.viewed&&!this.played&&w.movable){var N=I.x,D=I.y,k=!1;if(H(a)?k=!0:a=N,H(c)?k=!0:c=D,k){if(K(w.move)&&z(v,ut,w.move,{once:!0}),pe(v,ut,{x:a,y:c,oldX:N,oldY:D,originalEvent:p})===!1)return this;I.x=a,I.y=c,I.left=a,I.top=c,this.moving=!0,this.renderImage(function(){d.moving=!1,K(w.moved)&&z(v,Lt,w.moved,{once:!0}),pe(v,Lt,{x:a,y:c,oldX:N,oldY:D,originalEvent:p},{cancelable:!1})})}}return this},rotate:function(a){return this.rotateTo((this.imageData.rotate||0)+Number(a)),this},rotateTo:function(a){var d=this,c=this.element,p=this.options,v=this.imageData;if(a=Number(a),H(a)&&this.viewed&&!this.played&&p.rotatable){var w=v.rotate;if(K(p.rotate)&&z(c,Yt,p.rotate,{once:!0}),pe(c,Yt,{degree:a,oldDegree:w})===!1)return this;v.rotate=a,this.rotating=!0,this.renderImage(function(){d.rotating=!1,K(p.rotated)&&z(c,Xt,p.rotated,{once:!0}),pe(c,Xt,{degree:a,oldDegree:w},{cancelable:!1})})}return this},scaleX:function(a){return this.scale(a,this.imageData.scaleY),this},scaleY:function(a){return this.scale(this.imageData.scaleX,a),this},scale:function(a){var d=this,c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:a,p=this.element,v=this.options,w=this.imageData;if(a=Number(a),c=Number(c),this.viewed&&!this.played&&v.scalable){var I=w.scaleX,N=w.scaleY,D=!1;if(H(a)?D=!0:a=I,H(c)?D=!0:c=N,D){if(K(v.scale)&&z(p,Jt,v.scale,{once:!0}),pe(p,Jt,{scaleX:a,scaleY:c,oldScaleX:I,oldScaleY:N})===!1)return this;w.scaleX=a,w.scaleY=c,this.scaling=!0,this.renderImage(function(){d.scaling=!1,K(v.scaled)&&z(p,Gt,v.scaled,{once:!0}),pe(p,Gt,{scaleX:a,scaleY:c,oldScaleX:I,oldScaleY:N},{cancelable:!1})})}}return this},zoom:function(a){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,p=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,v=this.imageData;return a=Number(a),a<0?a=1/(1-a):a=1+a,this.zoomTo(v.width*a/v.naturalWidth,d,c,p),this},zoomTo:function(a){var d=this,c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,w=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,I=this.element,N=this.options,D=this.pointers,k=this.imageData,B=k.x,Y=k.y,me=k.width,he=k.height,ae=k.naturalWidth,De=k.naturalHeight;if(a=Math.max(0,a),H(a)&&this.viewed&&!this.played&&(w||N.zoomable)){if(!w){var Be=Math.max(.01,N.minZoomRatio),Ve=Math.min(100,N.maxZoomRatio);a=Math.min(Math.max(a,Be),Ve)}if(v)switch(v.type){case"wheel":N.zoomRatio>=.055&&a>.95&&a<1.05&&(a=1);break;case"pointermove":case"touchmove":case"mousemove":a>.99&&a<1.01&&(a=1);break}var se=ae*a,gt=De*a,Zt=se-me,ht=gt-he,Qt=k.ratio;if(K(N.zoom)&&z(I,wi,N.zoom,{once:!0}),pe(I,wi,{ratio:a,oldRatio:Qt,originalEvent:v})===!1)return this;if(this.zooming=!0,v){var Kr=wu(this.viewer),Ar=D&&Object.keys(D).length>0?Au(D):{pageX:v.pageX,pageY:v.pageY};k.x-=Zt*((Ar.pageX-Kr.left-B)/me),k.y-=ht*((Ar.pageY-Kr.top-Y)/he)}else mt(p)&&H(p.x)&&H(p.y)?(k.x-=Zt*((p.x-B)/me),k.y-=ht*((p.y-Y)/he)):(k.x-=Zt/2,k.y-=ht/2);k.left=k.x,k.top=k.y,k.width=se,k.height=gt,k.oldRatio=Qt,k.ratio=a,this.renderImage(function(){d.zooming=!1,K(N.zoomed)&&z(I,Ei,N.zoomed,{once:!0}),pe(I,Ei,{ratio:a,oldRatio:Qt,originalEvent:v},{cancelable:!1})}),c&&this.tooltip()}return this},play:function(){var a=this,d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!this.isShown||this.played)return this;var c=this.element,p=this.options;if(K(p.play)&&z(c,Si,p.play,{once:!0}),pe(c,Si)===!1)return this;var v=this.player,w=this.loadImage.bind(this),I=[],N=0,D=0;if(this.played=!0,this.onLoadWhenPlay=w,d&&this.requestFullscreen(d),$(v,ie),ee(this.items,function(Y,me){var he=Y.querySelector("img"),ae=document.createElement("img");ae.src=Sr(he,"originalUrl"),ae.alt=he.getAttribute("alt"),ae.referrerPolicy=he.referrerPolicy,N+=1,$(ae,y),Ur(ae,X,p.transition),rt(Y,T)&&($(ae,U),D=me),I.push(ae),z(ae,ne,w,{once:!0}),v.appendChild(ae)}),H(p.interval)&&p.interval>0){var k=function Y(){clearTimeout(a.playing.timeout),Q(I[D],U),D-=1,D=D>=0?D:N-1,$(I[D],U),a.playing.timeout=setTimeout(Y,p.interval)},B=function Y(){clearTimeout(a.playing.timeout),Q(I[D],U),D+=1,D=D1&&(this.playing={prev:k,next:B,timeout:setTimeout(B,p.interval)})}return this},stop:function(){var a=this;if(!this.played)return this;var d=this.element,c=this.options;if(K(c.stop)&&z(d,Ai,c.stop,{once:!0}),pe(d,Ai)===!1)return this;var p=this.player;return clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,ee(p.getElementsByTagName("img"),function(v){te(v,ne,a.onLoadWhenPlay)}),Q(p,ie),p.innerHTML="",this.exitFullscreen(),this},full:function(){var a=this,d=this.options,c=this.viewer,p=this.image,v=this.list;return!this.isShown||this.played||this.fulled||!d.inline?this:(this.fulled=!0,this.open(),$(this.button,R),d.transition&&(Q(v,X),this.viewed&&Q(p,X)),$(c,E),c.setAttribute("role","dialog"),c.setAttribute("aria-labelledby",this.title.id),c.setAttribute("aria-modal",!0),c.removeAttribute("style"),qe(c,{zIndex:d.zIndex}),d.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=Ce({},this.containerData),this.renderList(),this.viewed&&this.initImage(function(){a.renderImage(function(){d.transition&&setTimeout(function(){$(p,X),$(v,X)},0)})}),this)},exit:function(){var a=this,d=this.options,c=this.viewer,p=this.image,v=this.list;return!this.isShown||this.played||!this.fulled||!d.inline?this:(this.fulled=!1,this.close(),Q(this.button,R),d.transition&&(Q(v,X),this.viewed&&Q(p,X)),d.focus&&this.clearEnforceFocus(),c.removeAttribute("role"),c.removeAttribute("aria-labelledby"),c.removeAttribute("aria-modal"),Q(c,E),qe(c,{zIndex:d.zIndexInline}),this.viewerData=Ce({},this.parentData),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){a.renderImage(function(){d.transition&&setTimeout(function(){$(p,X),$(v,X)},0)})}),this)},tooltip:function(){var a=this,d=this.options,c=this.tooltipBox,p=this.imageData;return!this.viewed||this.played||!d.tooltip?this:(c.textContent="".concat(Math.round(p.ratio*100),"%"),this.tooltipping?clearTimeout(this.tooltipping):d.transition?(this.fading&&pe(c,Ie),$(c,ie),$(c,y),$(c,X),c.removeAttribute("aria-hidden"),c.initialOffsetWidth=c.offsetWidth,$(c,U)):($(c,ie),c.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){d.transition?(z(c,Ie,function(){Q(c,ie),Q(c,y),Q(c,X),c.setAttribute("aria-hidden",!0),a.fading=!1},{once:!0}),Q(c,U),a.fading=!0):(Q(c,ie),c.setAttribute("aria-hidden",!0)),a.tooltipping=!1},1e3),this)},toggle:function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null;return this.imageData.ratio===1?this.zoomTo(this.imageData.oldRatio,!0,null,a):this.zoomTo(1,!0,null,a),this},reset:function(){return this.viewed&&!this.played&&(this.imageData=Ce({},this.initialImageData),this.renderImage()),this},update:function(){var a=this,d=this.element,c=this.options,p=this.isImg;if(p&&!d.parentNode)return this.destroy();var v=[];if(ee(p?[d]:d.querySelectorAll("img"),function(D){K(c.filter)?c.filter.call(a,D)&&v.push(D):a.getImageURL(D)&&v.push(D)}),!v.length)return this;if(this.images=v,this.length=v.length,this.ready){var w=[];if(ee(this.items,function(D,k){var B=D.querySelector("img"),Y=v[k];Y&&B?(Y.src!==B.src||Y.alt!==B.alt)&&w.push(k):w.push(k)}),qe(this.list,{width:"auto"}),this.initList(),this.isShown)if(this.length){if(this.viewed){var I=w.indexOf(this.index);if(I>=0)this.viewed=!1,this.view(Math.max(Math.min(this.index-I,this.length-1),0));else{var N=this.items[this.index];$(N,T),N.setAttribute("aria-selected",!0)}}}else this.image=null,this.viewed=!1,this.index=0,this.imageData={},this.canvas.innerHTML="",this.title.innerHTML=""}else this.build();return this},destroy:function(){var a=this.element,d=this.options;return a[O]?(this.destroyed=!0,this.ready?(this.played&&this.stop(),d.inline?(this.fulled&&this.exit(),this.unbind()):this.isShown?(this.viewing&&(this.imageRendering?this.imageRendering.abort():this.imageInitializing&&this.imageInitializing.abort()),this.hiding&&this.transitioning.abort(),this.hidden()):this.showing&&(this.transitioning.abort(),this.hidden()),this.ready=!1,this.viewer.parentNode.removeChild(this.viewer)):d.inline&&(this.delaying?this.delaying.abort():this.initializing&&this.initializing.abort()),d.inline||te(a,Re,this.onStart),a[O]=void 0,this):this}},_u={getImageURL:function(a){var d=this.options.url;return q(d)?d=a.getAttribute(d):K(d)?d=d.call(this,a):d="",d},enforceFocus:function(){var a=this;this.clearEnforceFocus(),z(document,ct,this.onFocusin=function(d){var c=a.viewer,p=d.target;if(!(p===document||p===c||c.contains(p))){for(;p;){if(p.getAttribute("tabindex")!==null||p.getAttribute("aria-modal")==="true")return;p=p.parentElement}c.focus()}})},clearEnforceFocus:function(){this.onFocusin&&(te(document,ct,this.onFocusin),this.onFocusin=null)},open:function(){var a=this.body;$(a,Ee),this.scrollbarWidth>0&&(a.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var a=this.body;Q(a,Ee),this.scrollbarWidth>0&&(a.style.paddingRight=this.initialBodyPaddingRight)},shown:function(){var a=this.element,d=this.options,c=this.viewer;this.fulled=!0,this.isShown=!0,this.render(),this.bind(),this.showing=!1,d.focus&&(c.focus(),this.enforceFocus()),K(d.shown)&&z(a,Ut,d.shown,{once:!0}),pe(a,Ut)!==!1&&this.ready&&this.isShown&&!this.hiding&&this.view(this.index)},hidden:function(){var a=this.element,d=this.options,c=this.viewer;d.fucus&&this.clearEnforceFocus(),this.close(),this.unbind(),$(c,F),c.removeAttribute("role"),c.removeAttribute("aria-labelledby"),c.removeAttribute("aria-modal"),c.setAttribute("aria-hidden",!0),this.resetList(),this.resetImage(),this.fulled=!1,this.viewed=!1,this.isShown=!1,this.hiding=!1,this.destroyed||(K(d.hidden)&&z(a,We,d.hidden,{once:!0}),pe(a,We,null,{cancelable:!1}))},requestFullscreen:function(a){var d=this.element.ownerDocument;if(this.fulled&&!(d.fullscreenElement||d.webkitFullscreenElement||d.mozFullScreenElement||d.msFullscreenElement)){var c=d.documentElement;c.requestFullscreen?mt(a)?c.requestFullscreen(a):c.requestFullscreen():c.webkitRequestFullscreen?c.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):c.mozRequestFullScreen?c.mozRequestFullScreen():c.msRequestFullscreen&&c.msRequestFullscreen()}},exitFullscreen:function(){var a=this.element.ownerDocument;this.fulled&&(a.fullscreenElement||a.webkitFullscreenElement||a.mozFullScreenElement||a.msFullscreenElement)&&(a.exitFullscreen?a.exitFullscreen():a.webkitExitFullscreen?a.webkitExitFullscreen():a.mozCancelFullScreen?a.mozCancelFullScreen():a.msExitFullscreen&&a.msExitFullscreen())},change:function(a){var d=this.options,c=this.pointers,p=c[Object.keys(c)[0]];if(p){var v=p.endX-p.startX,w=p.endY-p.startY;switch(this.action){case S:(v!==0||w!==0)&&(this.pointerMoved=!0,this.move(v,w,a));break;case b:this.zoom(Su(c),!1,null,a);break;case C:{this.action="switched";var I=Math.abs(v);I>1&&I>Math.abs(w)&&(this.pointers={},v>1?this.prev(d.loop):v<-1&&this.next(d.loop));break}}ee(c,function(N){N.startX=N.endX,N.startY=N.endY})}},isSwitchable:function(){var a=this.imageData,d=this.viewerData;return this.length>1&&a.x>=0&&a.y>=0&&a.width<=d.width&&a.height<=d.height}},Lu=x.Viewer,Mu=function(f){return function(){return f+=1,f}}(-1),ua=function(){function f(a){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(i(this,f),!a||a.nodeType!==1)throw new Error("The first argument is required and must be an element.");this.element=a,this.options=Ce({},g,mt(d)&&d),this.action=!1,this.fading=!1,this.fulled=!1,this.hiding=!1,this.imageClicked=!1,this.imageData={},this.index=this.options.initialViewIndex,this.isImg=!1,this.isShown=!1,this.length=0,this.moving=!1,this.played=!1,this.playing=!1,this.pointers={},this.ready=!1,this.rotating=!1,this.scaling=!1,this.showing=!1,this.timeout=!1,this.tooltipping=!1,this.viewed=!1,this.viewing=!1,this.wheeling=!1,this.zooming=!1,this.pointerMoved=!1,this.id=Mu(),this.init()}return s(f,[{key:"init",value:function(){var d=this,c=this.element,p=this.options;if(!c[O]){c[O]=this,p.focus&&!p.keyboard&&(p.focus=!1);var v=c.localName==="img",w=[];if(ee(v?[c]:c.querySelectorAll("img"),function(D){K(p.filter)?p.filter.call(d,D)&&w.push(D):d.getImageURL(D)&&w.push(D)}),this.isImg=v,this.length=w.length,this.images=w,this.initBody(),ue(document.createElement(O).style.transition)&&(p.transition=!1),p.inline){var I=0,N=function(){if(I+=1,I===d.length){var k;d.initializing=!1,d.delaying={abort:function(){clearTimeout(k)}},k=setTimeout(function(){d.delaying=!1,d.build()},0)}};this.initializing={abort:function(){ee(w,function(k){k.complete||(te(k,ne,N),te(k,Pe,N))})}},ee(w,function(D){if(D.complete)N();else{var k,B;z(D,ne,k=function(){te(D,Pe,B),N()},{once:!0}),z(D,Pe,B=function(){te(D,ne,k),N()},{once:!0})}})}else z(c,Re,this.onStart=function(D){var k=D.target;k.localName==="img"&&(!K(p.filter)||p.filter.call(d,k))&&d.view(d.images.indexOf(k))})}}},{key:"build",value:function(){if(!this.ready){var d=this.element,c=this.options,p=d.parentNode,v=document.createElement("div");v.innerHTML=m;var w=v.querySelector(".".concat(O,"-container")),I=w.querySelector(".".concat(O,"-title")),N=w.querySelector(".".concat(O,"-toolbar")),D=w.querySelector(".".concat(O,"-navbar")),k=w.querySelector(".".concat(O,"-button")),B=w.querySelector(".".concat(O,"-canvas"));if(this.parent=p,this.viewer=w,this.title=I,this.toolbar=N,this.navbar=D,this.button=k,this.canvas=B,this.footer=w.querySelector(".".concat(O,"-footer")),this.tooltipBox=w.querySelector(".".concat(O,"-tooltip")),this.player=w.querySelector(".".concat(O,"-player")),this.list=w.querySelector(".".concat(O,"-list")),w.id="".concat(O).concat(this.id),I.id="".concat(O,"Title").concat(this.id),$(I,c.title?xi(Array.isArray(c.title)?c.title[0]:c.title):F),$(D,c.navbar?xi(c.navbar):F),Ur(k,F,!c.button),c.keyboard&&k.setAttribute("tabindex",0),c.backdrop&&($(w,"".concat(O,"-backdrop")),!c.inline&&c.backdrop!=="static"&&In(B,Er,"hide")),q(c.className)&&c.className&&c.className.split(A).forEach(function(se){$(w,se)}),c.toolbar){var Y=document.createElement("ul"),me=mt(c.toolbar),he=V.slice(0,3),ae=V.slice(7,9),De=V.slice(9);me||$(N,xi(c.toolbar)),ee(me?c.toolbar:V,function(se,gt){var Zt=me&&mt(se),ht=me?kn(gt):se,Qt=Zt&&!ue(se.show)?se.show:se;if(!(!Qt||!c.zoomable&&he.indexOf(ht)!==-1||!c.rotatable&&ae.indexOf(ht)!==-1||!c.scalable&&De.indexOf(ht)!==-1)){var Kr=Zt&&!ue(se.size)?se.size:se,Ar=Zt&&!ue(se.click)?se.click:se,vt=document.createElement("li");c.keyboard&&vt.setAttribute("tabindex",0),vt.setAttribute("role","button"),$(vt,"".concat(O,"-").concat(ht)),K(Ar)||In(vt,Er,ht),H(Qt)&&$(vt,xi(Qt)),["small","large"].indexOf(Kr)!==-1?$(vt,"".concat(O,"-").concat(Kr)):ht==="play"&&$(vt,"".concat(O,"-large")),K(Ar)&&z(vt,Re,Ar),Y.appendChild(vt)}}),N.appendChild(Y)}else $(N,F);if(!c.rotatable){var Be=N.querySelectorAll('li[class*="rotate"]');$(Be,G),ee(Be,function(se){N.appendChild(se)})}if(c.inline)$(k,_),qe(w,{zIndex:c.zIndexInline}),window.getComputedStyle(p).position==="static"&&qe(p,{position:"relative"}),p.insertBefore(w,d.nextSibling);else{$(k,h),$(w,E),$(w,y),$(w,F),qe(w,{zIndex:c.zIndex});var Ve=c.container;q(Ve)&&(Ve=d.ownerDocument.querySelector(Ve)),Ve||(Ve=this.body),Ve.appendChild(w)}if(c.inline&&(this.render(),this.bind(),this.isShown=!0),this.ready=!0,K(c.ready)&&z(d,Ct,c.ready,{once:!0}),pe(d,Ct)===!1){this.ready=!1;return}this.ready&&c.inline&&this.view(this.index)}}}],[{key:"noConflict",value:function(){return window.Viewer=Lu,f}},{key:"setDefaults",value:function(d){Ce(g,mt(d)&&d)}}]),f}();return Ce(ua.prototype,Tu,xu,Ou,Cu,_u),ua})});var As={};Nu(As,{FetchEnctype:()=>kt,FetchMethod:()=>je,FetchRequest:()=>Dt,FetchResponse:()=>_r,FrameElement:()=>Ue,FrameLoadingStyle:()=>tr,FrameRenderer:()=>Mr,PageRenderer:()=>Rr,PageSnapshot:()=>ze,StreamActions:()=>Ss,StreamElement:()=>Vi,StreamSourceElement:()=>Hi,cache:()=>Da,clearCache:()=>Ha,config:()=>Ae,connectStreamSource:()=>ws,disconnectStreamSource:()=>Es,fetch:()=>vs,fetchEnctypeFromString:()=>Ma,fetchMethodFromString:()=>qi,isSafe:()=>ji,navigator:()=>Fa,registerAdapter:()=>Na,renderStreamMessage:()=>Va,session:()=>de,setConfirmMethod:()=>ja,setFormMode:()=>$a,setProgressBarDelay:()=>qa,start:()=>ys,visit:()=>Ba});(function(t){if(typeof t.requestSubmit=="function")return;t.requestSubmit=function(i){i?(e(i,this),i.click()):(i=document.createElement("input"),i.type="submit",i.hidden=!0,this.appendChild(i),i.click(),this.removeChild(i))};function e(i,n){i instanceof HTMLElement||r(TypeError,"parameter 1 is not of type 'HTMLElement'"),i.type=="submit"||r(TypeError,"The specified element is not a submit button"),i.form==n||r(DOMException,"The specified element is not owned by this form element","NotFoundError")}function r(i,n,s){throw new i("Failed to execute 'requestSubmit' on 'HTMLFormElement': "+n+".",s)}})(HTMLFormElement.prototype);var ba=new WeakMap;function Hu(t){let e=t instanceof Element?t:t instanceof Node?t.parentElement:null,r=e?e.closest("input, button"):null;return r?.type=="submit"?r:null}function qu(t){let e=Hu(t.target);e&&e.form&&ba.set(e.form,e)}(function(){if("submitter"in Event.prototype)return;let t=window.Event.prototype;if("SubmitEvent"in window){let e=window.SubmitEvent.prototype;if(/Apple Computer/.test(navigator.vendor)&&!("submitter"in e))t=e;else return}addEventListener("click",qu,!0),Object.defineProperty(t,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return ba.get(this.target)}})})();var tr={eager:"eager",lazy:"lazy"},Ue=class t extends HTMLElement{static delegateConstructor=void 0;loaded=Promise.resolve();static get observedAttributes(){return["disabled","loading","src"]}constructor(){super(),this.delegate=new t.delegateConstructor(this)}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){return this.delegate.sourceURLReloaded()}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():e=="disabled"&&this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get refresh(){return this.getAttribute("refresh")}set refresh(e){e?this.setAttribute("refresh",e):this.removeAttribute("refresh")}get shouldReloadWithMorph(){return this.src&&this.refresh==="morph"}get loading(){return ju(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){return this.ownerDocument?.documentElement?.hasAttribute("data-turbo-preview")}};function ju(t){switch(t.toLowerCase()){case"lazy":return tr.lazy;default:return tr.eager}}var $u={enabled:!0,progressBarDelay:500,unvisitableExtensions:new Set([".7z",".aac",".apk",".avi",".bmp",".bz2",".css",".csv",".deb",".dmg",".doc",".docx",".exe",".gif",".gz",".heic",".heif",".ico",".iso",".jpeg",".jpg",".js",".json",".m4a",".mkv",".mov",".mp3",".mp4",".mpeg",".mpg",".msi",".ogg",".ogv",".pdf",".pkg",".png",".ppt",".pptx",".rar",".rtf",".svg",".tar",".tif",".tiff",".txt",".wav",".webm",".webp",".wma",".wmv",".xls",".xlsx",".xml",".zip"])};function Xr(t){if(t.getAttribute("data-turbo-eval")=="false")return t;{let e=document.createElement("script"),r=Ta();return r&&(e.nonce=r),e.textContent=t.textContent,e.async=!1,Wu(e,t),e}}function Wu(t,e){for(let{name:r,value:i}of e.attributes)t.setAttribute(r,i)}function zu(t){let e=document.createElement("template");return e.innerHTML=t,e.content}function le(t,{target:e,cancelable:r,detail:i}={}){let n=new CustomEvent(t,{cancelable:r,bubbles:!0,composed:!0,detail:i});return e&&e.isConnected?e.dispatchEvent(n):document.documentElement.dispatchEvent(n),n}function ha(t){t.preventDefault(),t.stopImmediatePropagation()}function Yr(){return document.visibilityState==="hidden"?wa():ya()}function ya(){return new Promise(t=>requestAnimationFrame(()=>t()))}function wa(){return new Promise(t=>setTimeout(()=>t(),0))}function Uu(){return Promise.resolve()}function Ea(t=""){return new DOMParser().parseFromString(t,"text/html")}function Sa(t,...e){let r=Ku(t,e).replace(/^\n/,"").split(` +`),i=r[0].match(/^\s+/),n=i?i[0].length:0;return r.map(s=>s.slice(n)).join(` +`)}function Ku(t,e){return t.reduce((r,i,n)=>{let s=e[n]==null?"":e[n];return r+i+s},"")}function It(){return Array.from({length:36}).map((t,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}function Li(t,...e){for(let r of e.map(i=>i?.getAttribute(t)))if(typeof r=="string")return r;return null}function Yu(t,...e){return e.some(r=>r&&r.hasAttribute(t))}function Mi(...t){for(let e of t)e.localName=="turbo-frame"&&e.setAttribute("busy",""),e.setAttribute("aria-busy","true")}function Ri(...t){for(let e of t)e.localName=="turbo-frame"&&e.removeAttribute("busy"),e.removeAttribute("aria-busy")}function Xu(t,e=2e3){return new Promise(r=>{let i=()=>{t.removeEventListener("error",i),t.removeEventListener("load",i),r()};t.addEventListener("load",i,{once:!0}),t.addEventListener("error",i,{once:!0}),setTimeout(r,e)})}function Aa(t){switch(t){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}function Ju(t){return t=="advance"||t=="replace"||t=="restore"}function rr(...t){let e=Li("data-turbo-action",...t);return Ju(e)?e:null}function ps(t){return document.querySelector(`meta[name="${t}"]`)}function Pi(t){let e=ps(t);return e&&e.content}function Ta(){let t=ps("csp-nonce");if(t){let{nonce:e,content:r}=t;return e==""?r:e}}function Gu(t,e){let r=ps(t);return r||(r=document.createElement("meta"),r.setAttribute("name",t),document.head.appendChild(r)),r.setAttribute("content",e),r}function Or(t,e){if(t instanceof Element)return t.closest(e)||Or(t.assignedSlot||t.getRootNode()?.host,e)}function ms(t){return!!t&&t.closest("[inert], :disabled, [hidden], details:not([open]), dialog:not([open])")==null&&typeof t.focus=="function"}function xa(t){return Array.from(t.querySelectorAll("[autofocus]")).find(ms)}async function Zu(t,e){let r=e();t(),await ya();let i=e();return[r,i]}function Oa(t){if(t==="_blank")return!1;if(t){for(let e of document.getElementsByName(t))if(e instanceof HTMLIFrameElement)return!1;return!0}else return!0}function Ca(t){return Or(t,"a[href]:not([target^=_]):not([download])")}function _a(t){return _e(t.getAttribute("href")||"")}function Qu(t,e){let r=null;return(...i)=>{let n=()=>t.apply(this,i);clearTimeout(r),r=setTimeout(n,e)}}var eh={"aria-disabled":{beforeSubmit:t=>{t.setAttribute("aria-disabled","true"),t.addEventListener("click",ha)},afterSubmit:t=>{t.removeAttribute("aria-disabled"),t.removeEventListener("click",ha)}},disabled:{beforeSubmit:t=>t.disabled=!0,afterSubmit:t=>t.disabled=!1}},Nn=class{#e=null;constructor(e){Object.assign(this,e)}get submitter(){return this.#e}set submitter(e){this.#e=eh[e]||e}},th=new Nn({mode:"on",submitter:"disabled"}),Ae={drive:$u,forms:th};function _e(t){return new URL(t.toString(),document.baseURI)}function ir(t){let e;if(t.hash)return t.hash.slice(1);if(e=t.href.match(/#(.*)$/))return e[1]}function gs(t,e){let r=e?.getAttribute("formaction")||t.getAttribute("action")||t.action;return _e(r)}function rh(t){return(oh(t).match(/\.[^.]*$/)||[])[0]||""}function ih(t,e){let r=ah(e);return t.href===_e(r).href||t.href.startsWith(r)}function Pt(t,e){return ih(t,e)&&!Ae.drive.unvisitableExtensions.has(rh(t))}function Bn(t){let e=ir(t);return e!=null?t.href.slice(0,-(e.length+1)):t.href}function Ci(t){return Bn(t)}function nh(t,e){return _e(t).href==_e(e).href}function sh(t){return t.pathname.split("/").slice(1)}function oh(t){return sh(t).slice(-1)[0]}function ah(t){return lh(t.origin+t.pathname)}function lh(t){return t.endsWith("/")?t:t+"/"}var _r=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return _e(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.clone().text()}get responseHTML(){return this.isHTML?this.response.clone().text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}},Vn=class extends Set{constructor(e){super(),this.maxSize=e}add(e){if(this.size>=this.maxSize){let i=this.values().next().value;this.delete(i)}super.add(e)}},La=new Vn(20),ch=window.fetch;function vs(t,e={}){let r=new Headers(e.headers||{}),i=It();return La.add(i),r.append("X-Turbo-Request-Id",i),ch(t,{...e,headers:r})}function qi(t){switch(t.toLowerCase()){case"get":return je.get;case"post":return je.post;case"put":return je.put;case"patch":return je.patch;case"delete":return je.delete}}var je={get:"get",post:"post",put:"put",patch:"patch",delete:"delete"};function Ma(t){switch(t.toLowerCase()){case kt.multipart:return kt.multipart;case kt.plain:return kt.plain;default:return kt.urlEncoded}}var kt={urlEncoded:"application/x-www-form-urlencoded",multipart:"multipart/form-data",plain:"text/plain"},Dt=class{abortController=new AbortController;#e=e=>{};constructor(e,r,i,n=new URLSearchParams,s=null,o=kt.urlEncoded){let[l,u]=da(_e(i),r,n,o);this.delegate=e,this.url=l,this.target=s,this.fetchOptions={credentials:"same-origin",redirect:"follow",method:r.toUpperCase(),headers:{...this.defaultHeaders},body:u,signal:this.abortSignal,referrer:this.delegate.referrer?.href},this.enctype=o}get method(){return this.fetchOptions.method}set method(e){let r=this.isSafe?this.url.searchParams:this.fetchOptions.body||new FormData,i=qi(e)||je.get;this.url.search="";let[n,s]=da(this.url,i,r,this.enctype);this.url=n,this.fetchOptions.body=s,this.fetchOptions.method=i.toUpperCase()}get headers(){return this.fetchOptions.headers}set headers(e){this.fetchOptions.headers=e}get body(){return this.isSafe?this.url.searchParams:this.fetchOptions.body}set body(e){this.fetchOptions.body=e}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){let{fetchOptions:e}=this;this.delegate.prepareRequest(this);let r=await this.#t(e);try{this.delegate.requestStarted(this),r.detail.fetchRequest?this.response=r.detail.fetchRequest.response:this.response=vs(this.url.href,e);let i=await this.response;return await this.receive(i)}catch(i){if(i.name!=="AbortError")throw this.#r(i)&&this.delegate.requestErrored(this,i),i}finally{this.delegate.requestFinished(this)}}async receive(e){let r=new _r(e);return le("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:r},target:this.target}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,r):r.succeeded?this.delegate.requestSucceededWithResponse(this,r):this.delegate.requestFailedWithResponse(this,r),r}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isSafe(){return ji(this.method)}get abortSignal(){return this.abortController.signal}acceptResponseType(e){this.headers.Accept=[e,this.headers.Accept].join(", ")}async#t(e){let r=new Promise(n=>this.#e=n),i=le("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url,resume:this.#e},target:this.target});return this.url=i.detail.url,i.defaultPrevented&&await r,i}#r(e){return!le("turbo:fetch-request-error",{target:this.target,cancelable:!0,detail:{request:this,error:e}}).defaultPrevented}};function ji(t){return qi(t)==je.get}function da(t,e,r,i){let n=Array.from(r).length>0?new URLSearchParams(Ra(r)):t.searchParams;return ji(e)?[uh(t,n),null]:i==kt.urlEncoded?[t,n]:[t,r]}function Ra(t){let e=[];for(let[r,i]of t)i instanceof File||e.push([r,i]);return e}function uh(t,e){let r=new URLSearchParams(Ra(e));return t.search=r.toString(),t}var Hn=class{started=!1;constructor(e,r){this.delegate=e,this.element=r,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}intersect=e=>{e.slice(-1)[0]?.isIntersecting&&this.delegate.elementAppearedInViewport(this.element)}},Ft=class{static contentType="text/vnd.turbo-stream.html";static wrap(e){return typeof e=="string"?new this(zu(e)):e}constructor(e){this.fragment=hh(e)}};function hh(t){for(let e of t.querySelectorAll("turbo-stream")){let r=document.importNode(e,!0);for(let i of r.templateElement.content.querySelectorAll("script"))i.replaceWith(Xr(i));e.replaceWith(r)}return t}var dh=100,qn=class{#e=null;#t=null;get(e){if(this.#t&&this.#t.url===e&&this.#t.expire>Date.now())return this.#t.request}setLater(e,r,i){this.clear(),this.#e=setTimeout(()=>{r.perform(),this.set(e,r,i),this.#e=null},dh)}set(e,r,i){this.#t={url:e,request:r,expire:new Date(new Date().getTime()+i)}}clear(){this.#e&&clearTimeout(this.#e),this.#t=null}},fh=10*1e3,xr=new qn,Tr={initialized:"initialized",requesting:"requesting",waiting:"waiting",receiving:"receiving",stopping:"stopping",stopped:"stopped"},ki=class t{state=Tr.initialized;static confirmMethod(e){return Promise.resolve(confirm(e))}constructor(e,r,i,n=!1){let s=yh(r,i),o=bh(vh(r,i),s),l=ph(r,i),u=wh(r,i);this.delegate=e,this.formElement=r,this.submitter=i,this.fetchRequest=new Dt(this,s,o,l,r,u),this.mustRedirect=n}get method(){return this.fetchRequest.method}set method(e){this.fetchRequest.method=e}get action(){return this.fetchRequest.url.toString()}set action(e){this.fetchRequest.url=_e(e)}get body(){return this.fetchRequest.body}get enctype(){return this.fetchRequest.enctype}get isSafe(){return this.fetchRequest.isSafe}get location(){return this.fetchRequest.url}async start(){let{initialized:e,requesting:r}=Tr,i=Li("data-turbo-confirm",this.submitter,this.formElement);if(!(typeof i=="string"&&!await(typeof Ae.forms.confirm=="function"?Ae.forms.confirm:t.confirmMethod)(i,this.formElement,this.submitter))&&this.state==e)return this.state=r,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:r}=Tr;if(this.state!=e&&this.state!=r)return this.state=e,this.fetchRequest.cancel(),!0}prepareRequest(e){if(!e.isSafe){let r=mh(Pi("csrf-param"))||Pi("csrf-token");r&&(e.headers["X-CSRF-Token"]=r)}this.requestAcceptsTurboStreamResponse(e)&&e.acceptResponseType(Ft.contentType)}requestStarted(e){this.state=Tr.waiting,this.submitter&&Ae.forms.submitter.beforeSubmit(this.submitter),this.setSubmitsWith(),Mi(this.formElement),le("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,r){xr.clear(),this.result={success:r.succeeded,fetchResponse:r}}requestSucceededWithResponse(e,r){if(r.clientError||r.serverError){this.delegate.formSubmissionFailedWithResponse(this,r);return}if(xr.clear(),this.requestMustRedirect(e)&&gh(r)){let i=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,i)}else this.state=Tr.receiving,this.result={success:!0,fetchResponse:r},this.delegate.formSubmissionSucceededWithResponse(this,r)}requestFailedWithResponse(e,r){this.result={success:!1,fetchResponse:r},this.delegate.formSubmissionFailedWithResponse(this,r)}requestErrored(e,r){this.result={success:!1,error:r},this.delegate.formSubmissionErrored(this,r)}requestFinished(e){this.state=Tr.stopped,this.submitter&&Ae.forms.submitter.afterSubmit(this.submitter),this.resetSubmitterText(),Ri(this.formElement),le("turbo:submit-end",{target:this.formElement,detail:{formSubmission:this,...this.result}}),this.delegate.formSubmissionFinished(this)}setSubmitsWith(){if(!(!this.submitter||!this.submitsWith)){if(this.submitter.matches("button"))this.originalSubmitText=this.submitter.innerHTML,this.submitter.innerHTML=this.submitsWith;else if(this.submitter.matches("input")){let e=this.submitter;this.originalSubmitText=e.value,e.value=this.submitsWith}}}resetSubmitterText(){if(!(!this.submitter||!this.originalSubmitText)){if(this.submitter.matches("button"))this.submitter.innerHTML=this.originalSubmitText;else if(this.submitter.matches("input")){let e=this.submitter;e.value=this.originalSubmitText}}}requestMustRedirect(e){return!e.isSafe&&this.mustRedirect}requestAcceptsTurboStreamResponse(e){return!e.isSafe||Yu("data-turbo-stream",this.submitter,this.formElement)}get submitsWith(){return this.submitter?.getAttribute("data-turbo-submits-with")}};function ph(t,e){let r=new FormData(t),i=e?.getAttribute("name"),n=e?.getAttribute("value");return i&&r.append(i,n||""),r}function mh(t){if(t!=null){let r=(document.cookie?document.cookie.split("; "):[]).find(i=>i.startsWith(t));if(r){let i=r.split("=").slice(1).join("=");return i?decodeURIComponent(i):void 0}}}function gh(t){return t.statusCode==200&&!t.redirected}function vh(t,e){let r=typeof t.action=="string"?t.action:null;return e?.hasAttribute("formaction")?e.getAttribute("formaction")||"":t.getAttribute("action")||r||""}function bh(t,e){let r=_e(t);return ji(e)&&(r.search=""),r}function yh(t,e){let r=e?.getAttribute("formmethod")||t.getAttribute("method")||"";return qi(r.toLowerCase())||je.get}function wh(t,e){return Ma(e?.getAttribute("formenctype")||t.enctype)}var Lr=class{constructor(e){this.element=e}get activeElement(){return this.element.ownerDocument.activeElement}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return xa(this.element)}get permanentElements(){return ka(this.element)}getPermanentElementById(e){return Pa(this.element,e)}getPermanentElementMapForSnapshot(e){let r={};for(let i of this.permanentElements){let{id:n}=i,s=e.getPermanentElementById(n);s&&(r[n]=[i,s])}return r}};function Pa(t,e){return t.querySelector(`#${e}[data-turbo-permanent]`)}function ka(t){return t.querySelectorAll("[id][data-turbo-permanent]")}var Jr=class{started=!1;constructor(e,r){this.delegate=e,this.eventTarget=r}start(){this.started||(this.eventTarget.addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}submitCaptured=()=>{this.eventTarget.removeEventListener("submit",this.submitBubbled,!1),this.eventTarget.addEventListener("submit",this.submitBubbled,!1)};submitBubbled=e=>{if(!e.defaultPrevented){let r=e.target instanceof HTMLFormElement?e.target:void 0,i=e.submitter||void 0;r&&Eh(r,i)&&Sh(r,i)&&this.delegate.willSubmitForm(r,i)&&(e.preventDefault(),e.stopImmediatePropagation(),this.delegate.formSubmitted(r,i))}}};function Eh(t,e){return(e?.getAttribute("formmethod")||t.getAttribute("method"))!="dialog"}function Sh(t,e){let r=e?.getAttribute("formtarget")||t.getAttribute("target");return Oa(r)}var Ii=class{#e=e=>{};#t=e=>{};constructor(e,r){this.delegate=e,this.element=r}scrollToAnchor(e){let r=this.snapshot.getElementForAnchor(e);r?(this.scrollToElement(r),this.focusElement(r)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(ir(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:r}){this.scrollRoot.scrollTo(e,r)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:r,shouldRender:i,willRender:n,newSnapshot:s}=e,o=n;if(i)try{this.renderPromise=new Promise(m=>this.#e=m),this.renderer=e,await this.prepareToRenderSnapshot(e);let l=new Promise(m=>this.#t=m),u={resume:this.#t,render:this.renderer.renderElement,renderMethod:this.renderer.renderMethod};this.delegate.allowsImmediateRender(s,u)||await l,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(s,r,this.renderer.renderMethod),this.delegate.preloadOnLoadLinksForView(this.element),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.#e(void 0),delete this.renderPromise}else o&&this.invalidate(e.reloadReason)}invalidate(e){this.delegate.viewInvalidated(e)}async prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),await e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}markVisitDirection(e){this.element.setAttribute("data-turbo-visit-direction",e)}unmarkVisitDirection(){this.element.removeAttribute("data-turbo-visit-direction")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},jn=class extends Ii{missing(){this.element.innerHTML='Content missing'}get snapshot(){return new Lr(this.element)}},Di=class{constructor(e,r){this.delegate=e,this.element=r}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}clickBubbled=e=>{this.clickEventIsSignificant(e)?this.clickEvent=e:delete this.clickEvent};linkClicked=e=>{this.clickEvent&&this.clickEventIsSignificant(e)&&this.delegate.shouldInterceptLinkClick(e.target,e.detail.url,e.detail.originalEvent)&&(this.clickEvent.preventDefault(),e.preventDefault(),this.delegate.linkClickIntercepted(e.target,e.detail.url,e.detail.originalEvent)),delete this.clickEvent};willVisit=e=>{delete this.clickEvent};clickEventIsSignificant(e){let r=e.composed?e.target?.parentElement:e.target,i=Ca(r)||r;return i instanceof Element&&i.closest("turbo-frame, html")==this.element}},Fi=class{started=!1;constructor(e,r){this.delegate=e,this.eventTarget=r}start(){this.started||(this.eventTarget.addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickCaptured=()=>{this.eventTarget.removeEventListener("click",this.clickBubbled,!1),this.eventTarget.addEventListener("click",this.clickBubbled,!1)};clickBubbled=e=>{if(e instanceof MouseEvent&&this.clickEventIsSignificant(e)){let r=e.composedPath&&e.composedPath()[0]||e.target,i=Ca(r);if(i&&Oa(i.target)){let n=_a(i);this.delegate.willFollowLinkToLocation(i,n,e)&&(e.preventDefault(),this.delegate.followedLinkToLocation(i,n))}}};clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}},Ni=class{constructor(e,r){this.delegate=e,this.linkInterceptor=new Fi(this,r)}start(){this.linkInterceptor.start()}stop(){this.linkInterceptor.stop()}canPrefetchRequestToLocation(e,r){return!1}prefetchAndCacheRequestToLocation(e,r){}willFollowLinkToLocation(e,r,i){return this.delegate.willSubmitFormLinkToLocation(e,r,i)&&(e.hasAttribute("data-turbo-method")||e.hasAttribute("data-turbo-stream"))}followedLinkToLocation(e,r){let i=document.createElement("form"),n="hidden";for(let[M,x]of r.searchParams)i.append(Object.assign(document.createElement("input"),{type:n,name:M,value:x}));let s=Object.assign(r,{search:""});i.setAttribute("data-turbo","true"),i.setAttribute("action",s.href),i.setAttribute("hidden","");let o=e.getAttribute("data-turbo-method");o&&i.setAttribute("method",o);let l=e.getAttribute("data-turbo-frame");l&&i.setAttribute("data-turbo-frame",l);let u=rr(e);u&&i.setAttribute("data-turbo-action",u);let g=e.getAttribute("data-turbo-confirm");g&&i.setAttribute("data-turbo-confirm",g),e.hasAttribute("data-turbo-stream")&&i.setAttribute("data-turbo-stream",""),this.delegate.submittedFormLinkToLocation(e,r,i),document.body.appendChild(i),i.addEventListener("turbo:submit-end",()=>i.remove(),{once:!0}),requestAnimationFrame(()=>i.requestSubmit())}},Bi=class{static async preservingPermanentElements(e,r,i){let n=new this(e,r);n.enter(),await i(),n.leave()}constructor(e,r){this.delegate=e,this.permanentElementMap=r}enter(){for(let e in this.permanentElementMap){let[r,i]=this.permanentElementMap[e];this.delegate.enteringBardo(r,i),this.replaceNewPermanentElementWithPlaceholder(i)}}leave(){for(let e in this.permanentElementMap){let[r]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(r),this.replacePlaceholderWithPermanentElement(r),this.delegate.leavingBardo(r)}}replaceNewPermanentElementWithPlaceholder(e){let r=Ah(e);e.replaceWith(r)}replaceCurrentPermanentElementWithClone(e){let r=e.cloneNode(!0);e.replaceWith(r)}replacePlaceholderWithPermanentElement(e){this.getPlaceholderById(e.id)?.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(r=>r.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function Ah(t){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",t.id),e}var Gr=class{#e=null;static renderElement(e,r){}constructor(e,r,i,n=!0){this.currentSnapshot=e,this.newSnapshot=r,this.isPreview=i,this.willRender=n,this.renderElement=this.constructor.renderElement,this.promise=new Promise((s,o)=>this.resolvingFunctions={resolve:s,reject:o})}get shouldRender(){return!0}get shouldAutofocus(){return!0}get reloadReason(){}prepareToRender(){}render(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}async preservingPermanentElements(e){await Bi.preservingPermanentElements(this,this.permanentElementMap,e)}focusFirstAutofocusableElement(){if(this.shouldAutofocus){let e=this.connectedSnapshot.firstAutofocusableElement;e&&e.focus()}}enteringBardo(e){this.#e||e.contains(this.currentSnapshot.activeElement)&&(this.#e=this.currentSnapshot.activeElement)}leavingBardo(e){e.contains(this.#e)&&this.#e instanceof HTMLElement&&(this.#e.focus(),this.#e=null)}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get renderMethod(){return"replace"}},Mr=class extends Gr{static renderElement(e,r){let i=document.createRange();i.selectNodeContents(e),i.deleteContents();let n=r,s=n.ownerDocument?.createRange();s&&(s.selectNodeContents(n),e.appendChild(s.extractContents()))}constructor(e,r,i,n,s,o=!0){super(r,i,n,s,o),this.delegate=e}get shouldRender(){return!0}async render(){await Yr(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await Yr(),this.focusFirstAutofocusableElement(),await Yr(),this.activateScriptElements()}loadFrameElement(){this.delegate.willRenderFrame(this.currentElement,this.newElement),this.renderElement(this.currentElement,this.newElement)}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,r=Th(this.currentElement.getAttribute("data-autoscroll-block"),"end"),i=xh(this.currentElement.getAttribute("data-autoscroll-behavior"),"auto");if(e)return e.scrollIntoView({block:r,behavior:i}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let r=Xr(e);e.replaceWith(r)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function Th(t,e){return t=="end"||t=="start"||t=="center"||t=="nearest"?t:e}function xh(t,e){return t=="auto"||t=="smooth"?t:e}var Oh=function(){let t=()=>{},e={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:t,afterNodeAdded:t,beforeNodeMorphed:t,afterNodeMorphed:t,beforeNodeRemoved:t,afterNodeRemoved:t,beforeAttributeUpdated:t},head:{style:"merge",shouldPreserve:x=>x.getAttribute("im-preserve")==="true",shouldReAppend:x=>x.getAttribute("im-re-append")==="true",shouldRemove:t,afterHeadMorphed:t},restoreFocus:!0};function r(x,L,P={}){x=m(x);let O=M(L),S=g(x,O,P),C=n(S,()=>l(S,x,O,b=>b.morphStyle==="innerHTML"?(s(b,x,O),Array.from(x.childNodes)):i(b,x,O)));return S.pantry.remove(),C}function i(x,L,P){let O=M(L),S=Array.from(O.childNodes),C=S.indexOf(L),b=S.length-(C+1);return s(x,O,P,L,L.nextSibling),S=Array.from(O.childNodes),S.slice(C,S.length-b)}function n(x,L){if(!x.config.restoreFocus)return L();let P=document.activeElement;if(!(P instanceof HTMLInputElement||P instanceof HTMLTextAreaElement))return L();let{id:O,selectionStart:S,selectionEnd:C}=P,b=L();return O&&O!==document.activeElement?.id&&(P=x.target.querySelector(`#${O}`),P?.focus()),P&&!P.selectionEnd&&C&&P.setSelectionRange(S,C),b}let s=function(){function x(h,y,E,_=null,R=null){y instanceof HTMLTemplateElement&&E instanceof HTMLTemplateElement&&(y=y.content,E=E.content),_||=y.firstChild;for(let F of E.childNodes){if(_&&_!=R){let W=P(h,F,_,R);if(W){W!==_&&S(h,_,W),o(W,F,h),_=W.nextSibling;continue}}if(F instanceof Element&&h.persistentIds.has(F.id)){let W=C(y,F.id,_,h);o(W,F,h),_=W.nextSibling;continue}let j=L(y,F,_,h);j&&(_=j.nextSibling)}for(;_&&_!=R;){let F=_;_=_.nextSibling,O(h,F)}}function L(h,y,E,_){if(_.callbacks.beforeNodeAdded(y)===!1)return null;if(_.idMap.has(y)){let R=document.createElement(y.tagName);return h.insertBefore(R,E),o(R,y,_),_.callbacks.afterNodeAdded(R),R}else{let R=document.importNode(y,!0);return h.insertBefore(R,E),_.callbacks.afterNodeAdded(R),R}}let P=function(){function h(_,R,F,j){let W=null,J=R.nextSibling,U=0,G=F;for(;G&&G!=j;){if(E(G,R)){if(y(_,G,R))return G;W===null&&(_.idMap.has(G)||(W=G))}if(W===null&&J&&E(G,J)&&(U++,J=J.nextSibling,U>=2&&(W=void 0)),G.contains(document.activeElement))break;G=G.nextSibling}return W||null}function y(_,R,F){let j=_.idMap.get(R),W=_.idMap.get(F);if(!W||!j)return!1;for(let J of j)if(W.has(J))return!0;return!1}function E(_,R){let F=_,j=R;return F.nodeType===j.nodeType&&F.tagName===j.tagName&&(!F.id||F.id===j.id)}return h}();function O(h,y){if(h.idMap.has(y))T(h.pantry,y,null);else{if(h.callbacks.beforeNodeRemoved(y)===!1)return;y.parentNode?.removeChild(y),h.callbacks.afterNodeRemoved(y)}}function S(h,y,E){let _=y;for(;_&&_!==E;){let R=_;_=_.nextSibling,O(h,R)}return _}function C(h,y,E,_){let R=_.target.querySelector(`#${y}`)||_.pantry.querySelector(`#${y}`);return b(R,_),T(h,R,E),R}function b(h,y){let E=h.id;for(;h=h.parentNode;){let _=y.idMap.get(h);_&&(_.delete(E),_.size||y.idMap.delete(h))}}function T(h,y,E){if(h.moveBefore)try{h.moveBefore(y,E)}catch{h.insertBefore(y,E)}else h.insertBefore(y,E)}return x}(),o=function(){function x(b,T,h){return h.ignoreActive&&b===document.activeElement?null:(h.callbacks.beforeNodeMorphed(b,T)===!1||(b instanceof HTMLHeadElement&&h.head.ignore||(b instanceof HTMLHeadElement&&h.head.style!=="morph"?u(b,T,h):(L(b,T,h),C(b,h)||s(h,b,T))),h.callbacks.afterNodeMorphed(b,T)),b)}function L(b,T,h){let y=T.nodeType;if(y===1){let E=b,_=T,R=E.attributes,F=_.attributes;for(let j of F)S(j.name,E,"update",h)||E.getAttribute(j.name)!==j.value&&E.setAttribute(j.name,j.value);for(let j=R.length-1;0<=j;j--){let W=R[j];if(W&&!_.hasAttribute(W.name)){if(S(W.name,E,"remove",h))continue;E.removeAttribute(W.name)}}C(E,h)||P(E,_,h)}(y===8||y===3)&&b.nodeValue!==T.nodeValue&&(b.nodeValue=T.nodeValue)}function P(b,T,h){if(b instanceof HTMLInputElement&&T instanceof HTMLInputElement&&T.type!=="file"){let y=T.value,E=b.value;O(b,T,"checked",h),O(b,T,"disabled",h),T.hasAttribute("value")?E!==y&&(S("value",b,"update",h)||(b.setAttribute("value",y),b.value=y)):S("value",b,"remove",h)||(b.value="",b.removeAttribute("value"))}else if(b instanceof HTMLOptionElement&&T instanceof HTMLOptionElement)O(b,T,"selected",h);else if(b instanceof HTMLTextAreaElement&&T instanceof HTMLTextAreaElement){let y=T.value,E=b.value;if(S("value",b,"update",h))return;y!==E&&(b.value=y),b.firstChild&&b.firstChild.nodeValue!==y&&(b.firstChild.nodeValue=y)}}function O(b,T,h,y){let E=T[h],_=b[h];if(E!==_){let R=S(h,b,"update",y);R||(b[h]=T[h]),E?R||b.setAttribute(h,""):S(h,b,"remove",y)||b.removeAttribute(h)}}function S(b,T,h,y){return b==="value"&&y.ignoreActiveValue&&T===document.activeElement?!0:y.callbacks.beforeAttributeUpdated(b,T,h)===!1}function C(b,T){return!!T.ignoreActiveValue&&b===document.activeElement&&b!==document.body}return x}();function l(x,L,P,O){if(x.head.block){let S=L.querySelector("head"),C=P.querySelector("head");if(S&&C){let b=u(S,C,x);return Promise.all(b).then(()=>{let T=Object.assign(x,{head:{block:!1,ignore:!0}});return O(T)})}}return O(x)}function u(x,L,P){let O=[],S=[],C=[],b=[],T=new Map;for(let y of L.children)T.set(y.outerHTML,y);for(let y of x.children){let E=T.has(y.outerHTML),_=P.head.shouldReAppend(y),R=P.head.shouldPreserve(y);E||R?_?S.push(y):(T.delete(y.outerHTML),C.push(y)):P.head.style==="append"?_&&(S.push(y),b.push(y)):P.head.shouldRemove(y)!==!1&&S.push(y)}b.push(...T.values());let h=[];for(let y of b){let E=document.createRange().createContextualFragment(y.outerHTML).firstChild;if(P.callbacks.beforeNodeAdded(E)!==!1){if("href"in E&&E.href||"src"in E&&E.src){let _,R=new Promise(function(F){_=F});E.addEventListener("load",function(){_()}),h.push(R)}x.appendChild(E),P.callbacks.afterNodeAdded(E),O.push(E)}}for(let y of S)P.callbacks.beforeNodeRemoved(y)!==!1&&(x.removeChild(y),P.callbacks.afterNodeRemoved(y));return P.head.afterHeadMorphed(x,{added:O,kept:C,removed:S}),h}let g=function(){function x(T,h,y){let{persistentIds:E,idMap:_}=C(T,h),R=L(y),F=R.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(F))throw`Do not understand how to morph style ${F}`;return{target:T,newContent:h,config:R,morphStyle:F,ignoreActive:R.ignoreActive,ignoreActiveValue:R.ignoreActiveValue,restoreFocus:R.restoreFocus,idMap:_,persistentIds:E,pantry:P(),callbacks:R.callbacks,head:R.head}}function L(T){let h=Object.assign({},e);return Object.assign(h,T),h.callbacks=Object.assign({},e.callbacks,T.callbacks),h.head=Object.assign({},e.head,T.head),h}function P(){let T=document.createElement("div");return T.hidden=!0,document.body.insertAdjacentElement("afterend",T),T}function O(T){let h=Array.from(T.querySelectorAll("[id]"));return T.id&&h.push(T),h}function S(T,h,y,E){for(let _ of E)if(h.has(_.id)){let R=_;for(;R;){let F=T.get(R);if(F==null&&(F=new Set,T.set(R,F)),F.add(_.id),R===y)break;R=R.parentElement}}}function C(T,h){let y=O(T),E=O(h),_=b(y,E),R=new Map;S(R,_,T,y);let F=h.__idiomorphRoot||h;return S(R,_,F,E),{persistentIds:_,idMap:R}}function b(T,h){let y=new Set,E=new Map;for(let{id:R,tagName:F}of T)E.has(R)?y.add(R):E.set(R,F);let _=new Set;for(let{id:R,tagName:F}of h)_.has(R)?y.add(R):E.get(R)===F&&_.add(R);for(let R of y)_.delete(R);return _}return x}(),{normalizeElement:m,normalizeParent:M}=function(){let x=new WeakSet;function L(C){return C instanceof Document?C.documentElement:C}function P(C){if(C==null)return document.createElement("div");if(typeof C=="string")return P(S(C));if(x.has(C))return C;if(C instanceof Node){if(C.parentNode)return O(C);{let b=document.createElement("div");return b.append(C),b}}else{let b=document.createElement("div");for(let T of[...C])b.append(T);return b}}function O(C){return{childNodes:[C],querySelectorAll:b=>{let T=C.querySelectorAll(b);return C.matches(b)?[C,...T]:T},insertBefore:(b,T)=>C.parentNode.insertBefore(b,T),moveBefore:(b,T)=>C.parentNode.moveBefore(b,T),get __idiomorphRoot(){return C}}}function S(C){let b=new DOMParser,T=C.replace(/]*>|>)([\s\S]*?)<\/svg>/gim,"");if(T.match(/<\/html>/)||T.match(/<\/head>/)||T.match(/<\/body>/)){let h=b.parseFromString(C,"text/html");if(T.match(/<\/html>/))return x.add(h),h;{let y=h.firstChild;return y&&x.add(y),y}}else{let y=b.parseFromString("","text/html").body.querySelector("template").content;return x.add(y),y}}return{normalizeElement:L,normalizeParent:P}}();return{morph:r,defaults:e}}();function bs(t,e,{callbacks:r,...i}={}){Oh.morph(t,e,{...i,callbacks:new $n(r)})}function Ia(t,e){bs(t,e.childNodes,{morphStyle:"innerHTML"})}var $n=class{#e;constructor({beforeNodeMorphed:e}={}){this.#e=e||(()=>!0)}beforeNodeAdded=e=>!(e.id&&e.hasAttribute("data-turbo-permanent")&&document.getElementById(e.id));beforeNodeMorphed=(e,r)=>{if(e instanceof Element)return!e.hasAttribute("data-turbo-permanent")&&this.#e(e,r)?!le("turbo:before-morph-element",{cancelable:!0,target:e,detail:{currentElement:e,newElement:r}}).defaultPrevented:!1};beforeAttributeUpdated=(e,r,i)=>!le("turbo:before-morph-attribute",{cancelable:!0,target:r,detail:{attributeName:e,mutationType:i}}).defaultPrevented;beforeNodeRemoved=e=>this.beforeNodeMorphed(e);afterNodeMorphed=(e,r)=>{e instanceof Element&&le("turbo:morph-element",{target:e,detail:{currentElement:e,newElement:r}})}},Wn=class extends Mr{static renderElement(e,r){le("turbo:before-frame-morph",{target:e,detail:{currentElement:e,newElement:r}}),Ia(e,r)}async preservingPermanentElements(e){return await e()}},zn=class t{static animationDuration=300;static get defaultCSS(){return Sa` + .turbo-progress-bar { + position: fixed; + display: block; + top: 0; + left: 0; + height: 3px; + background: #0076ff; + z-index: 2147483647; + transition: + width ${t.animationDuration}ms ease-out, + opacity ${t.animationDuration/2}ms ${t.animationDuration/2}ms ease-in; + transform: translate3d(0, 0, 0); + } + `}hiding=!1;value=0;visible=!1;constructor(){this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,t.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,t.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}trickle=()=>{this.setValue(this.value+Math.random()/100)};refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");e.type="text/css",e.textContent=t.defaultCSS;let r=Ta();return r&&(e.nonce=r),e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}},Un=class extends Lr{detailsByOuterHTML=this.children.filter(e=>!Mh(e)).map(e=>kh(e)).reduce((e,r)=>{let{outerHTML:i}=r,n=i in e?e[i]:{type:Ch(r),tracked:_h(r),elements:[]};return{...e,[i]:{...n,elements:[...n.elements,r]}}},{});get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,r){return Object.keys(this.detailsByOuterHTML).filter(i=>!(i in r.detailsByOuterHTML)).map(i=>this.detailsByOuterHTML[i]).filter(({type:i})=>i==e).map(({elements:[i]})=>i)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,r)=>{let{type:i,tracked:n,elements:s}=this.detailsByOuterHTML[r];return i==null&&!n?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let r=this.findMetaElementByName(e);return r?r.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((r,i)=>{let{elements:[n]}=this.detailsByOuterHTML[i];return Ph(n,e)?n:r},void 0|void 0)}};function Ch(t){if(Lh(t))return"script";if(Rh(t))return"stylesheet"}function _h(t){return t.getAttribute("data-turbo-track")=="reload"}function Lh(t){return t.localName=="script"}function Mh(t){return t.localName=="noscript"}function Rh(t){let e=t.localName;return e=="style"||e=="link"&&t.getAttribute("rel")=="stylesheet"}function Ph(t,e){return t.localName=="meta"&&t.getAttribute("name")==e}function kh(t){return t.hasAttribute("nonce")&&t.setAttribute("nonce",""),t}var ze=class t extends Lr{static fromHTMLString(e=""){return this.fromDocument(Ea(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({documentElement:e,body:r,head:i}){return new this(e,r,new Un(i))}constructor(e,r,i){super(r),this.documentElement=e,this.headSnapshot=i}clone(){let e=this.element.cloneNode(!0),r=this.element.querySelectorAll("select"),i=e.querySelectorAll("select");for(let[n,s]of r.entries()){let o=i[n];for(let l of o.selectedOptions)l.selected=!1;for(let l of s.selectedOptions)o.options[l.index].selected=!0}for(let n of e.querySelectorAll('input[type="password"]'))n.value="";return new t(this.documentElement,e,this.headSnapshot)}get lang(){return this.documentElement.getAttribute("lang")}get headElement(){return this.headSnapshot.element}get rootLocation(){let e=this.getSetting("root")??"/";return _e(e)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}get prefersViewTransitions(){return this.headSnapshot.getMetaValue("view-transition")==="same-origin"}get shouldMorphPage(){return this.getSetting("refresh-method")==="morph"}get shouldPreserveScrollPosition(){return this.getSetting("refresh-scroll")==="preserve"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},Kn=class{#e=!1;#t=Promise.resolve();renderChange(e,r){return e&&this.viewTransitionsAvailable&&!this.#e?(this.#e=!0,this.#t=this.#t.then(async()=>{await document.startViewTransition(r).finished})):this.#t=this.#t.then(r),this.#t}get viewTransitionsAvailable(){return document.startViewTransition}},Ih={action:"advance",historyChanged:!1,visitCachedSnapshot:()=>{},willRender:!0,updateHistory:!0,shouldCacheSnapshot:!0,acceptsStreamResponse:!1},_i={visitStart:"visitStart",requestStart:"requestStart",requestEnd:"requestEnd",visitEnd:"visitEnd"},bt={initialized:"initialized",started:"started",canceled:"canceled",failed:"failed",completed:"completed"},Cr={networkFailure:0,timeoutFailure:-1,contentTypeMismatch:-2},Dh={advance:"forward",restore:"back",replace:"none"},Yn=class{identifier=It();timingMetrics={};followedRedirect=!1;historyChanged=!1;scrolled=!1;shouldCacheSnapshot=!0;acceptsStreamResponse=!1;snapshotCached=!1;state=bt.initialized;viewTransitioner=new Kn;constructor(e,r,i,n={}){this.delegate=e,this.location=r,this.restorationIdentifier=i||It();let{action:s,historyChanged:o,referrer:l,snapshot:u,snapshotHTML:g,response:m,visitCachedSnapshot:M,willRender:x,updateHistory:L,shouldCacheSnapshot:P,acceptsStreamResponse:O,direction:S}={...Ih,...n};this.action=s,this.historyChanged=o,this.referrer=l,this.snapshot=u,this.snapshotHTML=g,this.response=m,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action),this.isPageRefresh=this.view.isPageRefresh(this),this.visitCachedSnapshot=M,this.willRender=x,this.updateHistory=L,this.scrolled=!x,this.shouldCacheSnapshot=P,this.acceptsStreamResponse=O,this.direction=S||Dh[s]}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==bt.initialized&&(this.recordTimingMetric(_i.visitStart),this.state=bt.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==bt.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=bt.canceled)}complete(){this.state==bt.started&&(this.recordTimingMetric(_i.visitEnd),this.adapter.visitCompleted(this),this.state=bt.completed,this.followRedirect(),this.followedRedirect||this.delegate.visitCompleted(this))}fail(){this.state==bt.started&&(this.state=bt.failed,this.adapter.visitFailed(this),this.delegate.visitCompleted(this))}changeHistory(){if(!this.historyChanged&&this.updateHistory){let e=this.location.href===this.referrer?.href?"replace":this.action,r=Aa(e);this.history.update(r,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new Dt(this,je.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(_i.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:r}=e;fa(r)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,r)}}finishRequest(){this.recordTimingMetric(_i.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:r}=this.response;this.render(async()=>{if(this.shouldCacheSnapshot&&this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,fa(e)&&r!=null){let i=ze.fromHTMLString(r);await this.renderPageSnapshot(i,!1),this.adapter.visitRendered(this),this.complete()}else await this.view.renderError(ze.fromHTMLString(r),this),this.adapter.visitRendered(this),this.fail()})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!ir(this.location)||e.hasAnchor(ir(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return ze.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let r=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage||this.isPageRefresh?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.renderPageSnapshot(e,r),this.adapter.visitRendered(this),r||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&this.response?.redirected&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response,shouldCacheSnapshot:!1,willRender:!1}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.performScroll(),this.changeHistory(),this.adapter.visitRendered(this)})}prepareRequest(e){this.acceptsStreamResponse&&e.acceptResponseType(Ft.contentType)}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,r){}async requestSucceededWithResponse(e,r){let i=await r.responseHTML,{redirected:n,statusCode:s}=r;i==null?this.recordResponse({statusCode:Cr.contentTypeMismatch,redirected:n}):(this.redirectedToLocation=r.redirected?r.location:void 0,this.recordResponse({statusCode:s,responseHTML:i,redirected:n}))}async requestFailedWithResponse(e,r){let i=await r.responseHTML,{redirected:n,statusCode:s}=r;i==null?this.recordResponse({statusCode:Cr.contentTypeMismatch,redirected:n}):this.recordResponse({statusCode:s,responseHTML:i,redirected:n})}requestErrored(e,r){this.recordResponse({statusCode:Cr.networkFailure,redirected:!1})}requestFinished(){this.finishRequest()}performScroll(){!this.scrolled&&!this.view.forceReloaded&&!this.view.shouldPreserveScrollPosition(this)&&(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=ir(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return{...this.timingMetrics}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():this.willRender}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(this.snapshot).then(e=>e&&this.visitCachedSnapshot(e)),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(r=>{this.frame=document.visibilityState==="hidden"?setTimeout(()=>r(),0):requestAnimationFrame(()=>r())}),await e(),delete this.frame}async renderPageSnapshot(e,r){await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(e),async()=>{await this.view.renderPage(e,r,this.willRender,this),this.performScroll()})}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function fa(t){return t>=200&&t<300}var Xn=class{progressBar=new zn;constructor(e){this.session=e}visitProposedToLocation(e,r){Pt(e,this.navigator.rootLocation)?this.navigator.startVisit(e,r?.restorationIdentifier||It(),r):window.location.href=e.toString()}visitStarted(e){this.location=e.location,e.loadCachedSnapshot(),e.issueRequest(),e.goToSamePageAnchor()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,r){switch(r){case Cr.networkFailure:case Cr.timeoutFailure:case Cr.contentTypeMismatch:return this.reload({reason:"request_failed",context:{statusCode:r}});default:return e.loadResponse()}}visitRequestFinished(e){}visitCompleted(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}pageInvalidated(e){this.reload(e)}visitFailed(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitRendered(e){}linkPrefetchingIsEnabledForLocation(e){return!0}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}showProgressBar=()=>{this.progressBar.show()};reload(e){le("turbo:reload",{detail:e}),window.location.href=this.location?.toString()||window.location.href}get navigator(){return this.session.navigator}},Jn=class{selector="[data-turbo-temporary]";deprecatedSelector="[data-turbo-cache=false]";started=!1;start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeTemporaryElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeTemporaryElements,!1))}removeTemporaryElements=e=>{for(let r of this.temporaryElements)r.remove()};get temporaryElements(){return[...document.querySelectorAll(this.selector),...this.temporaryElementsWithDeprecation]}get temporaryElementsWithDeprecation(){let e=document.querySelectorAll(this.deprecatedSelector);return e.length&&console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`),[...e]}},Gn=class{constructor(e,r){this.session=e,this.element=r,this.linkInterceptor=new Di(this,r),this.formSubmitObserver=new Jr(this,r)}start(){this.linkInterceptor.start(),this.formSubmitObserver.start()}stop(){this.linkInterceptor.stop(),this.formSubmitObserver.stop()}shouldInterceptLinkClick(e,r,i){return this.#t(e)}linkClickIntercepted(e,r,i){let n=this.#r(e);n&&n.delegate.linkClickIntercepted(e,r,i)}willSubmitForm(e,r){return e.closest("turbo-frame")==null&&this.#e(e,r)&&this.#t(e,r)}formSubmitted(e,r){let i=this.#r(e,r);i&&i.delegate.formSubmitted(e,r)}#e(e,r){let i=gs(e,r),n=this.element.ownerDocument.querySelector('meta[name="turbo-root"]'),s=_e(n?.content??"/");return this.#t(e,r)&&Pt(i,s)}#t(e,r){if(e instanceof HTMLFormElement?this.session.submissionIsNavigatable(e,r):this.session.elementIsNavigatable(e)){let n=this.#r(e,r);return n?n!=e.closest("turbo-frame"):!1}else return!1}#r(e,r){let i=r?.getAttribute("data-turbo-frame")||e.getAttribute("data-turbo-frame");if(i&&i!="_top"){let n=this.element.querySelector(`#${i}:not([disabled])`);if(n instanceof Ue)return n}}},Zn=class{location;restorationIdentifier=It();restorationData={};started=!1;pageLoaded=!1;currentIndex=0;constructor(e){this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.currentIndex=history.state?.turbo?.restorationIndex||0,this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,r){this.update(history.pushState,e,r)}replace(e,r){this.update(history.replaceState,e,r)}update(e,r,i=It()){e===history.pushState&&++this.currentIndex;let n={turbo:{restorationIdentifier:i,restorationIndex:this.currentIndex}};e.call(history,n,"",r.href),this.location=r,this.restorationIdentifier=i}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:r}=this,i=this.restorationData[r];this.restorationData[r]={...i,...e}}assumeControlOfScrollRestoration(){this.previousScrollRestoration||(this.previousScrollRestoration=history.scrollRestoration??"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}onPopState=e=>{if(this.shouldHandlePopState()){let{turbo:r}=e.state||{};if(r){this.location=new URL(window.location.href);let{restorationIdentifier:i,restorationIndex:n}=r;this.restorationIdentifier=i;let s=n>this.currentIndex?"forward":"back";this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location,i,s),this.currentIndex=n}}};onPageLoad=async e=>{await Uu(),this.pageLoaded=!0};shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},Qn=class{started=!1;#e=null;constructor(e,r){this.delegate=e,this.eventTarget=r}start(){this.started||(this.eventTarget.readyState==="loading"?this.eventTarget.addEventListener("DOMContentLoaded",this.#t,{once:!0}):this.#t())}stop(){this.started&&(this.eventTarget.removeEventListener("mouseenter",this.#r,{capture:!0,passive:!0}),this.eventTarget.removeEventListener("mouseleave",this.#n,{capture:!0,passive:!0}),this.eventTarget.removeEventListener("turbo:before-fetch-request",this.#o,!0),this.started=!1)}#t=()=>{this.eventTarget.addEventListener("mouseenter",this.#r,{capture:!0,passive:!0}),this.eventTarget.addEventListener("mouseleave",this.#n,{capture:!0,passive:!0}),this.eventTarget.addEventListener("turbo:before-fetch-request",this.#o,!0),this.started=!0};#r=e=>{if(Pi("turbo-prefetch")==="false")return;let r=e.target;if(r.matches&&r.matches("a[href]:not([target^=_]):not([download])")&&this.#l(r)){let n=r,s=_a(n);if(this.delegate.canPrefetchRequestToLocation(n,s)){this.#e=n;let o=new Dt(this,je.get,s,new URLSearchParams,r);xr.setLater(s.toString(),o,this.#s)}}};#n=e=>{e.target===this.#e&&this.#i()};#i=()=>{xr.clear(),this.#e=null};#o=e=>{if(e.target.tagName!=="FORM"&&e.detail.fetchOptions.method==="GET"){let r=xr.get(e.detail.url.toString());r&&(e.detail.fetchRequest=r),xr.clear()}};prepareRequest(e){let r=e.target;e.headers["X-Sec-Purpose"]="prefetch";let i=r.closest("turbo-frame"),n=r.getAttribute("data-turbo-frame")||i?.getAttribute("target")||i?.id;n&&n!=="_top"&&(e.headers["Turbo-Frame"]=n)}requestSucceededWithResponse(){}requestStarted(e){}requestErrored(e){}requestFinished(e){}requestPreventedHandlingResponse(e,r){}requestFailedWithResponse(e,r){}get#s(){return Number(Pi("turbo-prefetch-cache-time"))||fh}#l(e){return!(!e.getAttribute("href")||Fh(e)||Nh(e)||Bh(e)||Vh(e)||qh(e))}},Fh=t=>t.origin!==document.location.origin||!["http:","https:"].includes(t.protocol)||t.hasAttribute("target"),Nh=t=>t.pathname+t.search===document.location.pathname+document.location.search||t.href.startsWith("#"),Bh=t=>{if(t.getAttribute("data-turbo-prefetch")==="false"||t.getAttribute("data-turbo")==="false")return!0;let e=Or(t,"[data-turbo-prefetch]");return!!(e&&e.getAttribute("data-turbo-prefetch")==="false")},Vh=t=>{let e=t.getAttribute("data-turbo-method");return!!(e&&e.toLowerCase()!=="get"||Hh(t)||t.hasAttribute("data-turbo-confirm")||t.hasAttribute("data-turbo-stream"))},Hh=t=>t.hasAttribute("data-remote")||t.hasAttribute("data-behavior")||t.hasAttribute("data-confirm")||t.hasAttribute("data-method"),qh=t=>le("turbo:before-prefetch",{target:t,cancelable:!0}).defaultPrevented,es=class{constructor(e){this.delegate=e}proposeVisit(e,r={}){this.delegate.allowsVisitingLocationWithAction(e,r.action)&&this.delegate.visitProposedToLocation(e,r)}startVisit(e,r,i={}){this.stop(),this.currentVisit=new Yn(this,_e(e),r,{referrer:this.location,...i}),this.currentVisit.start()}submitForm(e,r){this.stop(),this.formSubmission=new ki(this,e,r,!0),this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get rootLocation(){return this.view.snapshot.rootLocation}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,r){if(e==this.formSubmission){let i=await r.responseHTML;if(i){let n=e.isSafe;n||this.view.clearSnapshotCache();let{statusCode:s,redirected:o}=r,u={action:this.#e(e,r),shouldCacheSnapshot:n,response:{statusCode:s,responseHTML:i,redirected:o}};this.proposeVisit(r.location,u)}}}async formSubmissionFailedWithResponse(e,r){let i=await r.responseHTML;if(i){let n=ze.fromHTMLString(i);r.serverError?await this.view.renderError(n,this.currentVisit):await this.view.renderPage(n,!1,!0,this.currentVisit),n.shouldPreserveScrollPosition||this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,r){console.error(r)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}linkPrefetchingIsEnabledForLocation(e){return typeof this.adapter.linkPrefetchingIsEnabledForLocation=="function"?this.adapter.linkPrefetchingIsEnabledForLocation(e):!0}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e),delete this.currentVisit}locationWithActionIsSamePage(e,r){let i=ir(e),n=ir(this.view.lastRenderedLocation),s=r==="restore"&&typeof i>"u";return r!=="replace"&&Bn(e)===Bn(this.view.lastRenderedLocation)&&(s||i!=null&&i!==n)}visitScrolledToSamePageLocation(e,r){this.delegate.visitScrolledToSamePageLocation(e,r)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}#e(e,r){let{submitter:i,formElement:n}=e;return rr(i,n)||this.#t(r)}#t(e){return e.redirected&&e.location.href===this.location?.href?"replace":"advance"}},er={initial:0,loading:1,interactive:2,complete:3},ts=class{stage=er.initial;started=!1;constructor(e){this.delegate=e}start(){this.started||(this.stage==er.initial&&(this.stage=er.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}interpretReadyState=()=>{let{readyState:e}=this;e=="interactive"?this.pageIsInteractive():e=="complete"&&this.pageIsComplete()};pageIsInteractive(){this.stage==er.loading&&(this.stage=er.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==er.interactive&&(this.stage=er.complete,this.delegate.pageLoaded())}pageWillUnload=()=>{this.delegate.pageWillUnload()};get readyState(){return document.readyState}},rs=class{started=!1;constructor(e){this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})};updatePosition(e){this.delegate.scrollPositionChanged(e)}},is=class{render({fragment:e}){Bi.preservingPermanentElements(this,jh(e),()=>{$h(e,()=>{Wh(()=>{document.documentElement.appendChild(e)})})})}enteringBardo(e,r){r.replaceWith(e.cloneNode(!0))}leavingBardo(){}};function jh(t){let e=ka(document.documentElement),r={};for(let i of e){let{id:n}=i;for(let s of t.querySelectorAll("turbo-stream")){let o=Pa(s.templateElement.content,n);o&&(r[n]=[i,o])}}return r}async function $h(t,e){let r=`turbo-stream-autofocus-${It()}`,i=t.querySelectorAll("turbo-stream"),n=zh(i),s=null;if(n&&(n.id?s=n.id:s=r,n.id=s),e(),await Yr(),(document.activeElement==null||document.activeElement==document.body)&&s){let l=document.getElementById(s);ms(l)&&l.focus(),l&&l.id==r&&l.removeAttribute("id")}}async function Wh(t){let[e,r]=await Zu(t,()=>document.activeElement),i=e&&e.id;if(i){let n=document.getElementById(i);ms(n)&&n!=r&&n.focus()}}function zh(t){for(let e of t){let r=xa(e.templateElement.content);if(r)return r}return null}var ns=class{sources=new Set;#e=!1;constructor(e){this.delegate=e}start(){this.#e||(this.#e=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.#e&&(this.#e=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}inspectFetchResponse=e=>{let r=Uh(e);r&&Kh(r)&&(e.preventDefault(),this.receiveMessageResponse(r))};receiveMessageEvent=e=>{this.#e&&typeof e.data=="string"&&this.receiveMessageHTML(e.data)};async receiveMessageResponse(e){let r=await e.responseHTML;r&&this.receiveMessageHTML(r)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(Ft.wrap(e))}};function Uh(t){let e=t.detail?.fetchResponse;if(e instanceof _r)return e}function Kh(t){return(t.contentType??"").startsWith(Ft.contentType)}var ss=class extends Gr{static renderElement(e,r){let{documentElement:i,body:n}=document;i.replaceChild(r,n)}async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:r}=document;e.replaceChild(this.newHead,r),this.renderElement(this.currentElement,this.newElement)}activateScriptElements(){for(let e of this.scriptElements){let r=e.parentNode;if(r){let i=Xr(e);r.replaceChild(i,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return document.documentElement.querySelectorAll("script")}},Rr=class extends Gr{static renderElement(e,r){document.body&&r instanceof HTMLBodyElement?document.body.replaceWith(r):document.documentElement.appendChild(r)}get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}get reloadReason(){if(!this.newSnapshot.isVisitable)return{reason:"turbo_visit_control_is_reload"};if(!this.trackedElementsAreIdentical)return{reason:"tracked_element_mismatch"}}async prepareToRender(){this.#e(),await this.mergeHead()}async render(){this.willRender&&await this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}#e(){let{documentElement:e}=this.currentSnapshot,{lang:r}=this.newSnapshot;r?e.setAttribute("lang",r):e.removeAttribute("lang")}async mergeHead(){let e=this.mergeProvisionalElements(),r=this.copyNewHeadStylesheetElements();this.copyNewHeadScriptElements(),await e,await r,this.willRender&&this.removeUnusedDynamicStylesheetElements()}async replaceBody(){await this.preservingPermanentElements(async()=>{this.activateNewBody(),await this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}async copyNewHeadStylesheetElements(){let e=[];for(let r of this.newHeadStylesheetElements)e.push(Xu(r)),document.head.appendChild(r);await Promise.all(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(Xr(e))}removeUnusedDynamicStylesheetElements(){for(let e of this.unusedDynamicStylesheetElements)document.head.removeChild(e)}async mergeProvisionalElements(){let e=[...this.newHeadProvisionalElements];for(let r of this.currentHeadProvisionalElements)this.isCurrentElementInElementList(r,e)||document.head.removeChild(r);for(let r of e)document.head.appendChild(r)}isCurrentElementInElementList(e,r){for(let[i,n]of r.entries()){if(e.tagName=="TITLE"){if(n.tagName!="TITLE")continue;if(e.innerHTML==n.innerHTML)return r.splice(i,1),!0}if(n.isEqualNode(e))return r.splice(i,1),!0}return!1}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let r=Xr(e);e.replaceWith(r)}}async assignNewBody(){await this.renderElement(this.currentElement,this.newElement)}get unusedDynamicStylesheetElements(){return this.oldHeadStylesheetElements.filter(e=>e.getAttribute("data-turbo-track")==="dynamic")}get oldHeadStylesheetElements(){return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},os=class extends Rr{static renderElement(e,r){bs(e,r,{callbacks:{beforeNodeMorphed:i=>!pa(i)}});for(let i of e.querySelectorAll("turbo-frame"))pa(i)&&i.reload();le("turbo:morph",{detail:{currentElement:e,newElement:r}})}async preservingPermanentElements(e){return await e()}get renderMethod(){return"morph"}get shouldAutofocus(){return!1}};function pa(t){return t instanceof Ue&&t.src&&t.refresh==="morph"&&!t.closest("[data-turbo-permanent]")}var as=class{keys=[];snapshots={};constructor(e){this.size=e}has(e){return Ci(e)in this.snapshots}get(e){if(this.has(e)){let r=this.read(e);return this.touch(e),r}}put(e,r){return this.write(e,r),this.touch(e),r}clear(){this.snapshots={}}read(e){return this.snapshots[Ci(e)]}write(e,r){this.snapshots[Ci(e)]=r}touch(e){let r=Ci(e),i=this.keys.indexOf(r);i>-1&&this.keys.splice(i,1),this.keys.unshift(r),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},ls=class extends Ii{snapshotCache=new as(10);lastRenderedLocation=new URL(location.href);forceReloaded=!1;shouldTransitionTo(e){return this.snapshot.prefersViewTransitions&&e.prefersViewTransitions}renderPage(e,r=!1,i=!0,n){let o=this.isPageRefresh(n)&&this.snapshot.shouldMorphPage?os:Rr,l=new o(this.snapshot,e,r,i);return l.shouldRender?n?.changeHistory():this.forceReloaded=!0,this.render(l)}renderError(e,r){r?.changeHistory();let i=new ss(this.snapshot,e,!1);return this.render(i)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(e=this.snapshot){if(e.isCacheable){this.delegate.viewWillCacheSnapshot();let{lastRenderedLocation:r}=this;await wa();let i=e.clone();return this.snapshotCache.put(r,i),i}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}isPageRefresh(e){return!e||this.lastRenderedLocation.pathname===e.location.pathname&&e.action==="replace"}shouldPreserveScrollPosition(e){return this.isPageRefresh(e)&&this.snapshot.shouldPreserveScrollPosition}get snapshot(){return ze.fromElement(this.element)}},cs=class{selector="a[data-turbo-preload]";constructor(e,r){this.delegate=e,this.snapshotCache=r}start(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",this.#e):this.preloadOnLoadLinksForView(document.body)}stop(){document.removeEventListener("DOMContentLoaded",this.#e)}preloadOnLoadLinksForView(e){for(let r of e.querySelectorAll(this.selector))this.delegate.shouldPreloadLink(r)&&this.preloadURL(r)}async preloadURL(e){let r=new URL(e.href);if(this.snapshotCache.has(r))return;await new Dt(this,je.get,r,new URLSearchParams,e).perform()}prepareRequest(e){e.headers["X-Sec-Purpose"]="prefetch"}async requestSucceededWithResponse(e,r){try{let i=await r.responseHTML,n=ze.fromHTMLString(i);this.snapshotCache.put(e.url,n)}catch{}}requestStarted(e){}requestErrored(e){}requestFinished(e){}requestPreventedHandlingResponse(e,r){}requestFailedWithResponse(e,r){}#e=()=>{this.preloadOnLoadLinksForView(document.body)}},us=class{constructor(e){this.session=e}clear(){this.session.clearCache()}resetCacheControl(){this.#e("")}exemptPageFromCache(){this.#e("no-cache")}exemptPageFromPreview(){this.#e("no-preview")}#e(e){Gu("turbo-cache-control",e)}},hs=class{navigator=new es(this);history=new Zn(this);view=new ls(this,document.documentElement);adapter=new Xn(this);pageObserver=new ts(this);cacheObserver=new Jn;linkPrefetchObserver=new Qn(this,document);linkClickObserver=new Fi(this,window);formSubmitObserver=new Jr(this,document);scrollObserver=new rs(this);streamObserver=new ns(this);formLinkClickObserver=new Ni(this,document.documentElement);frameRedirector=new Gn(this,document.documentElement);streamMessageRenderer=new is;cache=new us(this);enabled=!0;started=!1;#e=150;constructor(e){this.recentRequests=e,this.preloader=new cs(this,this.view.snapshotCache),this.debouncedRefresh=this.refresh,this.pageRefreshDebouncePeriod=this.pageRefreshDebouncePeriod}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkPrefetchObserver.start(),this.formLinkClickObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.preloader.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkPrefetchObserver.stop(),this.formLinkClickObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.preloader.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,r={}){let i=r.frame?document.getElementById(r.frame):null;if(i instanceof Ue){let n=r.action||rr(i);i.delegate.proposeVisitIfNavigatedWithAction(i,n),i.src=e.toString()}else this.navigator.proposeVisit(_e(e),r)}refresh(e,r){let i=r&&this.recentRequests.has(r),n=e===document.baseURI;!i&&!this.navigator.currentVisit&&n&&this.visit(e,{action:"replace",shouldCacheSnapshot:!1})}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){this.streamMessageRenderer.render(Ft.wrap(e))}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){console.warn("Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`"),this.progressBarDelay=e}set progressBarDelay(e){Ae.drive.progressBarDelay=e}get progressBarDelay(){return Ae.drive.progressBarDelay}set drive(e){Ae.drive.enabled=e}get drive(){return Ae.drive.enabled}set formMode(e){Ae.forms.mode=e}get formMode(){return Ae.forms.mode}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}get pageRefreshDebouncePeriod(){return this.#e}set pageRefreshDebouncePeriod(e){this.refresh=Qu(this.debouncedRefresh.bind(this),e),this.#e=e}shouldPreloadLink(e){let r=e.hasAttribute("data-turbo-method"),i=e.hasAttribute("data-turbo-stream"),n=e.getAttribute("data-turbo-frame"),s=n=="_top"?null:document.getElementById(n)||Or(e,"turbo-frame:not([disabled])");if(r||i||s instanceof Ue)return!1;{let o=new URL(e.href);return this.elementIsNavigatable(e)&&Pt(o,this.snapshot.rootLocation)}}historyPoppedToLocationWithRestorationIdentifierAndDirection(e,r,i){this.enabled?this.navigator.startVisit(e,r,{action:"restore",historyChanged:!0,direction:i}):this.adapter.pageInvalidated({reason:"turbo_disabled"})}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willSubmitFormLinkToLocation(e,r){return this.elementIsNavigatable(e)&&Pt(r,this.snapshot.rootLocation)}submittedFormLinkToLocation(){}canPrefetchRequestToLocation(e,r){return this.elementIsNavigatable(e)&&Pt(r,this.snapshot.rootLocation)&&this.navigator.linkPrefetchingIsEnabledForLocation(r)}willFollowLinkToLocation(e,r,i){return this.elementIsNavigatable(e)&&Pt(r,this.snapshot.rootLocation)&&this.applicationAllowsFollowingLinkToLocation(e,r,i)}followedLinkToLocation(e,r){let i=this.getActionForLink(e),n=e.hasAttribute("data-turbo-stream");this.visit(r.href,{action:i,acceptsStreamResponse:n})}allowsVisitingLocationWithAction(e,r){return this.locationWithActionIsSamePage(e,r)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,r){ma(e),this.adapter.visitProposedToLocation(e,r)}visitStarted(e){e.acceptsStreamResponse||(Mi(document.documentElement),this.view.markVisitDirection(e.direction)),ma(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.view.unmarkVisitDirection(),Ri(document.documentElement),this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,r){return this.navigator.locationWithActionIsSamePage(e,r)}visitScrolledToSamePageLocation(e,r){this.notifyApplicationAfterVisitingSamePageLocation(e,r)}willSubmitForm(e,r){let i=gs(e,r);return this.submissionIsNavigatable(e,r)&&Pt(_e(i),this.snapshot.rootLocation)}formSubmitted(e,r){this.navigator.submitForm(e,r)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){this.navigator.currentVisit?.silent||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},r){let i=this.notifyApplicationBeforeRender(e,r),{defaultPrevented:n,detail:{render:s}}=i;return this.view.renderer&&s&&(this.view.renderer.renderElement=s),!n}viewRenderedSnapshot(e,r,i){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender(i)}preloadOnLoadLinksForView(e){this.preloader.preloadOnLoadLinksForView(e)}viewInvalidated(e){this.adapter.pageInvalidated(e)}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,r){this.notifyApplicationAfterFrameRender(e,r)}applicationAllowsFollowingLinkToLocation(e,r,i){return!this.notifyApplicationAfterClickingLinkToLocation(e,r,i).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,r,i){return le("turbo:click",{target:e,detail:{url:r.href,originalEvent:i},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return le("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,r){return le("turbo:visit",{detail:{url:e.href,action:r}})}notifyApplicationBeforeCachingSnapshot(){return le("turbo:before-cache")}notifyApplicationBeforeRender(e,r){return le("turbo:before-render",{detail:{newBody:e,...r},cancelable:!0})}notifyApplicationAfterRender(e){return le("turbo:render",{detail:{renderMethod:e}})}notifyApplicationAfterPageLoad(e={}){return le("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,r){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:r.toString()}))}notifyApplicationAfterFrameLoad(e){return le("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,r){return le("turbo:frame-render",{detail:{fetchResponse:e},target:r,cancelable:!0})}submissionIsNavigatable(e,r){if(Ae.forms.mode=="off")return!1;{let i=r?this.elementIsNavigatable(r):!0;return Ae.forms.mode=="optin"?i&&e.closest('[data-turbo="true"]')!=null:i&&this.elementIsNavigatable(e)}}elementIsNavigatable(e){let r=Or(e,"[data-turbo]"),i=Or(e,"turbo-frame");return Ae.drive.enabled||i?r?r.getAttribute("data-turbo")!="false":!0:r?r.getAttribute("data-turbo")=="true":!1}getActionForLink(e){return rr(e)||"advance"}get snapshot(){return this.view.snapshot}};function ma(t){Object.defineProperties(t,Yh)}var Yh={absoluteURL:{get(){return this.toString()}}},de=new hs(La),{cache:Da,navigator:Fa}=de;function ys(){de.start()}function Na(t){de.registerAdapter(t)}function Ba(t,e){de.visit(t,e)}function ws(t){de.connectStreamSource(t)}function Es(t){de.disconnectStreamSource(t)}function Va(t){de.renderStreamMessage(t)}function Ha(){console.warn("Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`"),de.clearCache()}function qa(t){console.warn("Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`"),Ae.drive.progressBarDelay=t}function ja(t){console.warn("Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`"),Ae.forms.confirm=t}function $a(t){console.warn("Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`"),Ae.forms.mode=t}var Xh=Object.freeze({__proto__:null,navigator:Fa,session:de,cache:Da,PageRenderer:Rr,PageSnapshot:ze,FrameRenderer:Mr,fetch:vs,config:Ae,start:ys,registerAdapter:Na,visit:Ba,connectStreamSource:ws,disconnectStreamSource:Es,renderStreamMessage:Va,clearCache:Ha,setProgressBarDelay:qa,setConfirmMethod:ja,setFormMode:$a}),ds=class extends Error{},fs=class{fetchResponseLoaded=e=>Promise.resolve();#e=null;#t=()=>{};#r=!1;#n=!1;#i=new Set;#o=!1;action=null;constructor(e){this.element=e,this.view=new jn(this,this.element),this.appearanceObserver=new Hn(this,this.element),this.formLinkClickObserver=new Ni(this,this.element),this.linkInterceptor=new Di(this,this.element),this.restorationIdentifier=It(),this.formSubmitObserver=new Jr(this,this.element)}connect(){this.#r||(this.#r=!0,this.loadingStyle==tr.lazy?this.appearanceObserver.start():this.#s(),this.formLinkClickObserver.start(),this.linkInterceptor.start(),this.formSubmitObserver.start())}disconnect(){this.#r&&(this.#r=!1,this.appearanceObserver.stop(),this.formLinkClickObserver.stop(),this.linkInterceptor.stop(),this.formSubmitObserver.stop())}disabledChanged(){this.loadingStyle==tr.eager&&this.#s()}sourceURLChanged(){this.#b("src")||(this.element.isConnected&&(this.complete=!1),(this.loadingStyle==tr.eager||this.#n)&&this.#s())}sourceURLReloaded(){let{refresh:e,src:r}=this.element;return this.#o=r&&e==="morph",this.element.removeAttribute("complete"),this.element.src=null,this.element.src=r,this.element.loaded}loadingStyleChanged(){this.loadingStyle==tr.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.#s())}async#s(){this.enabled&&this.isActive&&!this.complete&&this.sourceURL&&(this.element.loaded=this.#h(_e(this.sourceURL)),this.appearanceObserver.stop(),await this.element.loaded,this.#n=!0)}async loadResponse(e){(e.redirected||e.succeeded&&e.isHTML)&&(this.sourceURL=e.response.url);try{let r=await e.responseHTML;if(r){let i=Ea(r);ze.fromDocument(i).isVisitable?await this.#l(e,i):await this.#f(e)}}finally{this.#o=!1,this.fetchResponseLoaded=()=>Promise.resolve()}}elementAppearedInViewport(e){this.proposeVisitIfNavigatedWithAction(e,rr(e)),this.#s()}willSubmitFormLinkToLocation(e){return this.#c(e)}submittedFormLinkToLocation(e,r,i){let n=this.#a(e);n&&i.setAttribute("data-turbo-frame",n.id)}shouldInterceptLinkClick(e,r,i){return this.#c(e)}linkClickIntercepted(e,r){this.#d(e,r)}willSubmitForm(e,r){return e.closest("turbo-frame")==this.element&&this.#c(e,r)}formSubmitted(e,r){this.formSubmission&&this.formSubmission.stop(),this.formSubmission=new ki(this,e,r);let{fetchRequest:i}=this.formSubmission;this.prepareRequest(i),this.formSubmission.start()}prepareRequest(e){e.headers["Turbo-Frame"]=this.id,this.currentNavigationElement?.hasAttribute("data-turbo-stream")&&e.acceptResponseType(Ft.contentType)}requestStarted(e){Mi(this.element)}requestPreventedHandlingResponse(e,r){this.#t()}async requestSucceededWithResponse(e,r){await this.loadResponse(r),this.#t()}async requestFailedWithResponse(e,r){await this.loadResponse(r),this.#t()}requestErrored(e,r){console.error(r),this.#t()}requestFinished(e){Ri(this.element)}formSubmissionStarted({formElement:e}){Mi(e,this.#a(e))}formSubmissionSucceededWithResponse(e,r){let i=this.#a(e.formElement,e.submitter);i.delegate.proposeVisitIfNavigatedWithAction(i,rr(e.submitter,e.formElement,i)),i.delegate.loadResponse(r),e.isSafe||de.clearCache()}formSubmissionFailedWithResponse(e,r){this.element.delegate.loadResponse(r),de.clearCache()}formSubmissionErrored(e,r){console.error(r)}formSubmissionFinished({formElement:e}){Ri(e,this.#a(e))}allowsImmediateRender({element:e},r){let i=le("turbo:before-frame-render",{target:this.element,detail:{newFrame:e,...r},cancelable:!0}),{defaultPrevented:n,detail:{render:s}}=i;return this.view.renderer&&s&&(this.view.renderer.renderElement=s),!n}viewRenderedSnapshot(e,r,i){}preloadOnLoadLinksForView(e){de.preloadOnLoadLinksForView(e)}viewInvalidated(){}willRenderFrame(e,r){this.previousFrameElement=e.cloneNode(!0)}visitCachedSnapshot=({element:e})=>{let r=e.querySelector("#"+this.element.id);r&&this.previousFrameElement&&r.replaceChildren(...this.previousFrameElement.children),delete this.previousFrameElement};async#l(e,r){let i=await this.extractForeignFrameElement(r.body),n=this.#o?Wn:Mr;if(i){let s=new Lr(i),o=new n(this,this.view.snapshot,s,!1,!1);this.view.renderPromise&&await this.view.renderPromise,this.changeHistory(),await this.view.render(o),this.complete=!0,de.frameRendered(e,this.element),de.frameLoaded(this.element),await this.fetchResponseLoaded(e)}else this.#p(e)&&this.#m(e)}async#h(e){let r=new Dt(this,je.get,e,new URLSearchParams,this.element);return this.#e?.cancel(),this.#e=r,new Promise(i=>{this.#t=()=>{this.#t=()=>{},this.#e=null,i()},r.perform()})}#d(e,r,i){let n=this.#a(e,i);n.delegate.proposeVisitIfNavigatedWithAction(n,rr(i,e,n)),this.#w(e,()=>{n.src=r})}proposeVisitIfNavigatedWithAction(e,r=null){if(this.action=r,this.action){let i=ze.fromElement(e).clone(),{visitCachedSnapshot:n}=e.delegate;e.delegate.fetchResponseLoaded=async s=>{if(e.src){let{statusCode:o,redirected:l}=s,u=await s.responseHTML,m={response:{statusCode:o,redirected:l,responseHTML:u},visitCachedSnapshot:n,willRender:!1,updateHistory:!1,restorationIdentifier:this.restorationIdentifier,snapshot:i};this.action&&(m.action=this.action),de.visit(e.src,m)}}}}changeHistory(){if(this.action){let e=Aa(this.action);de.history.update(e,_e(this.element.src||""),this.restorationIdentifier)}}async#f(e){console.warn(`The response (${e.statusCode}) from is performing a full page visit due to turbo-visit-control.`),await this.#u(e.response)}#p(e){this.element.setAttribute("complete","");let r=e.response,i=async(s,o)=>{s instanceof Response?this.#u(s):de.visit(s,o)};return!le("turbo:frame-missing",{target:this.element,detail:{response:r,visit:i},cancelable:!0}).defaultPrevented}#m(e){this.view.missing(),this.#g(e)}#g(e){let r=`The response (${e.statusCode}) did not contain the expected and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;throw new ds(r)}async#u(e){let r=new _r(e),i=await r.responseHTML,{location:n,redirected:s,statusCode:o}=r;return de.visit(n,{response:{redirected:s,statusCode:o,responseHTML:i}})}#a(e,r){let i=Li("data-turbo-frame",r,e)||this.element.getAttribute("target");return ga(i)??this.element}async extractForeignFrameElement(e){let r,i=CSS.escape(this.id);try{if(r=va(e.querySelector(`turbo-frame#${i}`),this.sourceURL),r)return r;if(r=va(e.querySelector(`turbo-frame[src][recurse~=${i}]`),this.sourceURL),r)return await r.loaded,await this.extractForeignFrameElement(r)}catch(n){return console.error(n),new Ue}return null}#v(e,r){let i=gs(e,r);return Pt(_e(i),this.rootLocation)}#c(e,r){let i=Li("data-turbo-frame",r,e)||this.element.getAttribute("target");if(e instanceof HTMLFormElement&&!this.#v(e,r)||!this.enabled||i=="_top")return!1;if(i){let n=ga(i);if(n)return!n.disabled}return!(!de.elementIsNavigatable(e)||r&&!de.elementIsNavigatable(r))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}set sourceURL(e){this.#y("src",()=>{this.element.src=e??null})}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.#t()!==void 0}get complete(){return this.element.hasAttribute("complete")}set complete(e){e?this.element.setAttribute("complete",""):this.element.removeAttribute("complete")}get isActive(){return this.element.isActive&&this.#r}get rootLocation(){let r=this.element.ownerDocument.querySelector('meta[name="turbo-root"]')?.content??"/";return _e(r)}#b(e){return this.#i.has(e)}#y(e,r){this.#i.add(e),r(),this.#i.delete(e)}#w(e,r){this.currentNavigationElement=e,r(),delete this.currentNavigationElement}};function ga(t){if(t!=null){let e=document.getElementById(t);if(e instanceof Ue)return e}}function va(t,e){if(t){let r=t.getAttribute("src");if(r!=null&&e!=null&&nh(r,e))throw new Error(`Matching element has a source URL which references itself`);if(t.ownerDocument!==document&&(t=document.importNode(t,!0)),t instanceof Ue)return t.connectedCallback(),t.disconnectedCallback(),t}}var Ss={after(){this.targetElements.forEach(t=>t.parentElement?.insertBefore(this.templateContent,t.nextSibling))},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.append(this.templateContent))},before(){this.targetElements.forEach(t=>t.parentElement?.insertBefore(this.templateContent,t))},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.prepend(this.templateContent))},remove(){this.targetElements.forEach(t=>t.remove())},replace(){let t=this.getAttribute("method");this.targetElements.forEach(e=>{t==="morph"?bs(e,this.templateContent):e.replaceWith(this.templateContent)})},update(){let t=this.getAttribute("method");this.targetElements.forEach(e=>{t==="morph"?Ia(e,this.templateContent):(e.innerHTML="",e.append(this.templateContent))})},refresh(){de.refresh(this.baseURI,this.requestId)}},Vi=class t extends HTMLElement{static async renderElement(e){await e.performAction()}async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){return this.renderPromise??=(async()=>{let e=this.beforeRenderEvent;this.dispatchEvent(e)&&(await Yr(),await e.detail.render(this))})()}disconnect(){try{this.remove()}catch{}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){let e=this.targetElements.flatMap(i=>[...i.children]).filter(i=>!!i.getAttribute("id")),r=[...this.templateContent?.children||[]].filter(i=>!!i.getAttribute("id")).map(i=>i.getAttribute("id"));return e.filter(i=>r.includes(i.getAttribute("id")))}get performAction(){if(this.action){let e=Ss[this.action];if(e)return e;this.#e("unknown action")}this.#e("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.#e("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild===null){let e=this.ownerDocument.createElement("template");return this.appendChild(e),e}else if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.#e("first child element must be a + diff --git a/templates/index.docs.liquid b/templates/index.docs.liquid index 54975cc7dbb11d4be581e8a173609ccdc2bf08eb..6ec0261782ee5869c3ad0ef8489dcbe3af09bc9d 100644 --- a/templates/index.docs.liquid +++ b/templates/index.docs.liquid @@ -1,284 +1,369 @@ -{% assign screen_width = site.settings.screen_width.value | default: 'max-w-screen-xl' %} -{% assign card_pages = site.pages['/'].children_in_nav_menu | limit: 24 %} - - -
-
-
- - - -{% if site.settings.features_one %} -
- {{ site.settings.features_one }} -
-{% endif %} - -
- {% if page.settings.bg_type.value == '1' %} +
+ {% if page.settings.hero_bg_type.value == '1' %} - {% else %} -
+ {% elsif page.settings.hero_bg_type.value == '2' %} + {% assign default_hero_image = 'images/hero.jpg' | asset_url %} + {% assign bg_image_url = page.settings.hero_image_url | escape_once | default: default_hero_image %} + +
{% endif %} - -
-
-
-

- {{ page.settings.description }} -

-
- {% form_tag 'search', class: 'w-full' %} -
- - -
- {% endform_tag %} - - {% if page.settings.tags.size > 0 %} - +
+
+ +
+ {{ site.settings.features_one }} +
+ +
+
+ {% assign hero_slogan = page.settings.hero_slogan | presence %} + {% if hero_slogan %} +

+ {{ hero_slogan }} +

{% endif %} +
+ {% form_tag 'search', class: 'w-full' %} +
+ + +
+ {% endform_tag %} -
-
-
-
+
+ {% # 自定义标签搜索 %} + {% assign search_hot_tags = page.settings.search_hot_tags %} + {% if search_hot_tags.size > 0 %} +
+
+ {{ 'layout.theme.search_tags_label' | t }}: + {% for tag in search_hot_tags %} + + {{ tag.name }} + + {% endfor %} +
+
+ {% endif %} - -
-
- - - {% if site.settings.show_channel_section %} -
-
-
-

{{ page.settings.channel_two_name | default: '栏目导航' }}

+
-
+ {% endif %} - - {% if site.settings.show_newest_section %} - {% assign newest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 10 %} -
-
+ {% endif %} + + + {% if page.settings.show_newest_section %} + {% assign newest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 10 %} +
+
+
+ {{ page.settings.newest_section_title }} +
+ + + {% endfor %} +
+
+ {% endif %} - - - - - {% endfor %} -
- - -
- {% endif %} + + {% if page.settings.show_hottest_section %} + {% assign hottest_pages = site.pages['/'].pages_in_list | order_by: '-visits_count' | limit: 10 %} +
+
+
+ {{ page.settings.hottest_section_title }} +
+ - + +
+ {{ site.settings.features_two }} +
- {% endif %} - - - {% if site.settings.features_two %} -
- {{ site.settings.features_two }} -
- {% endif %} - - - -{% render 'footer', settings: site.settings %} + + {% schema %} { - "name": "Docs Center", - "description": "Ideal for feature-rich product user manuals", - "thumb_url": "images/theme/index-docs.png", + "name": "t:schema.templates.index.docs.name", + "description": "t:schema.templates.index.docs.description", + "thumb_url": "images/schema/index-docs.png", "preview_image_urls": [ - "images/theme/index-docs.png" + "images/schema/index-docs.png" ], "sub_page_templates": ["page"], "settings": [ - { - "id": "hero_image_url", - "type": "image_picker", - "ratio": "19:6", - "width": 900, - "label": "t:settings_schema.generic.settings.hero_image_url.label", - "info": "t:settings_schema.generic.settings.hero_image_url.info" - }, - { - "id": "bg_type", - "type": "radio", - "label": "背景颜色样式", - "choices": [{"label":"primary主色渐变","value":"0"},{"label":"primary+secondary变体渐变","value":"1"}], - "default": "0", - "info": "* 跟随站点【主题颜色】设置的 primary/secondary 颜色" - }, - { - "id": "description", - "type": "text", - "label": "t:settings_schema.generic.settings.description.label", - "default": "👋 What Can We Help?" - }, - { - "id": "tags", - "type": "tag_picker", - "multiple": true, - "label": "t:settings_schema.page.settings.tags.label", - "info": "设置以后,标签列表会显示在首页搜索栏下方" - }, - { - "id": "channel_one_name", - "type": "text", - "label": "版块一名称", - "default": "新手入门", - "info": "版块一显示前 3 个栏目 Card" - }, - { - "id": "channel_two_name", - "type": "text", - "label": "版块二名称", - "default": "专题推荐", - "info": "版块二显示剩下的所有栏目 Card" - } - ] + { + "id": "hero_bg_type", + "type": "radio", + "label": "t:schema.templates.index.docs.settings.hero_bg_type.label", + "choices": [ + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.none", "value": "0" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.color", "value": "1" }, + {"label": "t:schema.templates.index.docs.settings.hero_bg_type.choices.image", "value": "2" } + ], + "default": "1", + "info": "t:schema.templates.index.docs.settings.hero_bg_type.info" + }, + { + "id": "hero_height", + "type": "range", + "label": "t:schema.templates.index.docs.settings.hero_height.label", + "info": "t:schema.templates.index.docs.settings.hero_height.info", + "min": 100, + "max": 600, + "step": 10, + "unit": "px", + "default": 360 + }, + { + "id": "hero_image_url", + "type": "image_picker", + "ratio": "4:1", + "width": 900, + "label": "t:schema.templates.index.docs.settings.hero_image_url.label", + "info": "t:schema.templates.index.docs.settings.hero_image_url.info" + }, + { + "id": "hero_bg_color", + "type": "color", + "label": "t:schema.templates.index.docs.settings.hero_bg_color.label", + "info": "t:schema.templates.index.docs.settings.hero_bg_color.info", + "default": "#20466D" + }, + { + "id": "hero_slogan", + "type": "text", + "default": "t:schema.templates.index.docs.settings.hero_slogan.default", + "label": "t:schema.templates.index.docs.settings.hero_slogan.label", + "info": "t:schema.templates.index.docs.settings.hero_slogan.info" + }, + { + "id": "search_hot_tags", + "type": "tag_picker", + "multiple": true, + "label": "t:schema.templates.index.docs.settings.search_hot_tags.label", + "info": "t:schema.templates.index.docs.settings.search_hot_tags.info" + }, + { + "id": "search_hot_keywords", + "type": "textarea", + "label": "t:schema.templates.index.docs.settings.search_hot_keywords.label", + "info": "t:schema.templates.index.docs.settings.search_hot_keywords.info" + }, + { + "id": "show_channels_section", + "label": "t:schema.templates.index.docs.settings.show_channels_section.label", + "type": "checkbox", + "default": true, + "info": "t:schema.templates.index.docs.settings.show_channels_section.info" + }, + { + "id": "channels_section_title", + "label": "t:schema.templates.index.docs.settings.channels_section_title.label", + "type": "text", + "default": "t:schema.templates.index.docs.settings.channels_section_title.default" + }, + { + "id": "show_topic_channel", + "label": "t:schema.templates.index.docs.settings.show_topic_channel.label", + "type": "checkbox", + "default": false, + "info": "t:schema.templates.index.docs.settings.show_topic_channel.info" + }, + { + "id": "topic_channel_title", + "label": "t:schema.templates.index.docs.settings.topic_channel_title.label", + "type": "text", + "default": "t:schema.templates.index.docs.settings.topic_channel_title.default" + }, + { + "id": "show_newest_section", + "label": "t:schema.templates.index.docs.settings.show_newest_section.label", + "type": "checkbox", + "default": true, + "info": "t:schema.templates.index.docs.settings.show_newest_section.info" + }, + { + "id": "newest_section_title", + "label": "t:schema.templates.index.docs.settings.newest_section_title.label", + "type": "text", + "default": "t:schema.templates.index.docs.settings.newest_section_title.default" + }, + { + "id": "show_hottest_section", + "label": "t:schema.templates.index.docs.settings.show_hottest_section.label", + "type": "checkbox", + "default": true, + "info": "t:schema.templates.index.docs.settings.show_hottest_section.info" + }, + { + "id": "hottest_section_title", + "label": "t:schema.templates.index.docs.settings.hottest_section_title.label", + "type": "text", + "default": "t:schema.templates.index.docs.settings.hottest_section_title.default" + } + ] } -{% endschema %} \ No newline at end of file +{% endschema %} diff --git a/templates/index.help_center.liquid b/templates/index.help_center.liquid index e4ce16294814b66d2d201728cdb088493e32417a..bebb6f10df6d9d10ddc0e7cfed28b60e98bfabc5 100644 --- a/templates/index.help_center.liquid +++ b/templates/index.help_center.liquid @@ -1,60 +1,78 @@ -{% assign default_hero_image = 'images/hero.jpg' | asset_url %} {% assign default_icon = 'images/icon.svg' | asset_url %} -{% assign hot_tags = page.settings.hot_tags | split: ',' %} -{% assign screen_width = site.settings.screen_width.value | default: 'max-w-screen-xl' %} -{% assign card_pages = site.pages['/'].children_in_nav_menu | limit: 24 %} - -
-
-
- -{% if site.settings.features_one %} -
- {{ site.settings.features_one }} -
-{% endif %} +
+ {% comment %} 背景 {% endcomment %} + {% if page.settings.hero_bg_type.value == '1' %} + + {% elsif page.settings.hero_bg_type.value == '2' %} + {% assign default_hero_image = 'images/hero.jpg' | asset_url %} + {% assign bg_image_url = page.settings.hero_image_url | escape_once | default: default_hero_image %} + +
+ {% else %} +
+ {% endif %} -
- -
-
-
-
-

+
+ +
+ {{ site.settings.features_one }} +
+ + +
+
+ {% assign hero_slogan = page.settings.hero_slogan %} +
+

{{ site.name }}

-

{{ page.settings.description }}

+ {% if hero_slogan %} +

{{ hero_slogan }}

+ {% endif %} +
-
- {% form_tag 'search', class: 'w-full' %} -
- - -
- {% endform_tag %} +
+ {% form_tag 'search', class: 'w-full' %} +
+ + +
+ {% endform_tag %} - - {% if page.settings.tags.size > 0 %} -

- - {% if site.settings.show_channel_section %} - {% assign channel_pages = site.pages['/'].children_in_list | limit: 50 %} -
-
- {% if page.settings.channel_one_name %} -
-
- {{ page.settings.channel_one_name }} -
+
+
+ + {% if page.settings.show_channels_section %} + {% assign channel_pages = site.pages['/'].children_in_list | order_by: '-created_at' %} +
+
+
+ {{ page.settings.channels_section_title }} +
+ +
{% endif %} - -
-
- {% endif %} - - - {% if site.settings.show_newest_section %} - {% assign newest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 10 %} -
-
-
-
-
- {{ 'generic.newest_pages' | t }} -
- -
- {% for sub_page in newest_pages %} - -
- - - -
- {{ sub_page.link_text }} -
-
- - - - -
- {% endfor %} -
-
-
-
- {% endif %} - -
-
- {% # 列表指南- Guide %} - {% if page.settings.channel_two_name %} -
-
- {{ page.settings.channel_two_name }} -
- {% endif %} -
- {% for card_page in card_pages %} - -
- - -
- -
- -
-
- {% if site.settings.show_card_icon %} - {% if card_page.settings.icon %} - - {% else %} - - - - - + + {% if page.settings.show_topic_channel %} +
+ {% query topic_channels from site.pages %} + { + "where": { + "settings.is_topic_channel_eq": true + } + } + {% endquery %} +
+
+ {{ page.settings.topic_channel_title }} +
+
+ {% for card_page in topic_channels %} + +
+ + +
+ +
+ +
+
+ {% if site.settings.show_card_icon %} + {% if card_page.settings.icon %} + + {% else %} + + + + + + {% endif %} {% endif %} - {% endif %} - -

{{ card_page.link_text }}

-
+ +

{{ card_page.link_text }}

+
+
+
+ +
+
    + {% assign limit_page_count = page.settings.topic_section_card_list_count | default: 5 %} + {% assign sub_pages = card_page.children_in_list | limit: limit_page_count %} + {% for sub_page in sub_pages %} +
  • + + + {{ sub_page.link_text }} + +
  • + {% endfor %} +
-
- -
-
    - {% assign limit_page_count = page.settings.index_card_page_count | default: 5 %} - {% assign sub_pages = card_page.children_in_list | limit: limit_page_count %} - {% for sub_page in sub_pages %} -
  • - - - {{ sub_page.link_text }} - -
  • - {% endfor %} -
+ + +
- - + {% endfor %}
-
- {% endfor %} -
-
- + + {% endif %} - - {% if site.settings.show_hottest_section %} - {% assign hottest_pages = site.pages['/'].pages_in_list | order_by: '-visits_count' | limit: 10 %} -
-
-
+ + {% if page.settings.show_newest_section %} + {% assign newest_pages = site.pages['/'].pages_in_list | order_by: '-created_at' | limit: 10 %} +
+
+
+ {{ page.settings.newest_section_title }} +
-
-
- {{ 'generic.hot_pages' | t }} -
-
+ {% endif %} - - - - - {% endfor %} -
-
- -
- {% endif %} - - {% if site.settings.features_two %} -
- {{ site.settings.features_two }} -
- {% endif %} + + {% if page.settings.show_hottest_section %} + {% assign hottest_pages = site.pages['/'].pages_in_list | order_by: '-visits_count' | limit: 10 %} +
+
+
+ {{ page.settings.hottest_section_title }} +
+
+ {% for page in hottest_pages %} + +
+ + + +
+ {{ page.link_text }} +
+
-
+ + + + + {% endfor %} + + + {% endif %} -{% render 'footer', settings: site.settings %} + +
+ {{ site.settings.features_two }} +
+ + + + {% schema %} { - "name": "Help Center", - "description": "Ideal for feature-rich product user manuals", - "thumb_url": "images/theme/index-help-center.png", + "name": "t:schema.templates.index.help_center.name", + "description": "t:schema.templates.index.help_center.description", + "thumb_url": "images/schema/index-help-center.png", "preview_image_urls": [ - "images/theme/index-help-center.png" + "images/schema/index-help-center.png" ], "sub_page_templates": ["page"], "settings": [ - { - "id": "hero_image_url", - "type": "image_picker", - "ratio": "19:6", - "width": 900, - "label": "t:settings_schema.generic.settings.hero_image_url.label", - "info": "t:settings_schema.generic.settings.hero_image_url.info" - }, - { - "id": "description", - "type": "text", - "label": "t:settings_schema.generic.settings.description.label", - "default": "👋 What Can We Help?" - }, - { - "id": "hot_tags", - "label": "t:settings_schema.generic.settings.hot_tags.label", - "type": "text", - "placeholder": "sign in,install,account,how to" - }, - { - "id": "tags", - "type": "tag_picker", - "multiple": true, - "label": "t:settings_schema.page.settings.tags.label" - }, - { - "id": "index_card_page_count", - "type": "number", - "min": 1, - "max": 20, - "step": 1, - "default": 5, - "label": "首页列表展示页面数量", - "info": "" - }, - { - "id": "channel_one_name", - "type": "text", - "label": "版块一名称", - "default": "栏目导览", - "info": "版块一显示所有栏目快捷方式" - }, - { - "id": "channel_two_name", - "type": "text", - "label": "版块二名称", - "default": "专题推荐", - "info": "版块二显示所有栏目 Card" - } - ] + { + "id": "hero_bg_type", + "type": "radio", + "label": "t:schema.templates.index.help_center.settings.hero_bg_type.label", + "choices": [ + {"label": "t:schema.templates.index.help_center.settings.hero_bg_type.choices.none", "value": "0" }, + {"label": "t:schema.templates.index.help_center.settings.hero_bg_type.choices.color", "value": "1" }, + {"label": "t:schema.templates.index.help_center.settings.hero_bg_type.choices.image", "value": "2" } + ], + "default": "1", + "info": "t:schema.templates.index.help_center.settings.hero_bg_type.info" + }, + { + "id": "hero_height", + "type": "range", + "label": "t:schema.templates.index.help_center.settings.hero_height.label", + "info": "t:schema.templates.index.help_center.settings.hero_height.info", + "min": 100, + "max": 600, + "step": 10, + "unit": "px", + "default": 360 + }, + { + "id": "hero_image_url", + "type": "image_picker", + "ratio": "4:1", + "width": 900, + "label": "t:schema.templates.index.help_center.settings.hero_image_url.label", + "info": "t:schema.templates.index.help_center.settings.hero_image_url.info" + }, + { + "id": "hero_bg_color", + "type": "color", + "label": "t:schema.templates.index.help_center.settings.hero_bg_color.label", + "info": "t:schema.templates.index.help_center.settings.hero_bg_color.info", + "default": "#20466D" + }, + { + "id": "hero_slogan", + "type": "text", + "default": "t:schema.templates.index.help_center.settings.hero_slogan.default", + "label": "t:schema.templates.index.help_center.settings.hero_slogan.label", + "info": "t:schema.templates.index.help_center.settings.hero_slogan.info" + }, + { + "id": "search_hot_tags", + "type": "tag_picker", + "multiple": true, + "label": "t:schema.templates.index.help_center.settings.search_hot_tags.label", + "info": "t:schema.templates.index.help_center.settings.search_hot_tags.info" + }, + { + "id": "search_hot_keywords", + "type": "textarea", + "label": "t:schema.templates.index.help_center.settings.search_hot_keywords.label", + "info": "t:schema.templates.index.help_center.settings.search_hot_keywords.info" + }, + { + "id": "show_channels_section", + "label": "t:schema.templates.index.help_center.settings.show_channels_section.label", + "type": "checkbox", + "default": false, + "info": "t:schema.templates.index.help_center.settings.show_channels_section.info" + }, + { + "id": "channels_section_title", + "label": "t:schema.templates.index.help_center.settings.channels_section_title.label", + "type": "text", + "default": "t:schema.templates.index.help_center.settings.channels_section_title.default" + }, + { + "id": "show_topic_channel", + "label": "t:schema.templates.index.help_center.settings.show_topic_channel.label", + "type": "checkbox", + "default": false, + "info": "t:schema.templates.index.help_center.settings.show_topic_channel.info" + }, + { + "id": "topic_channel_title", + "label": "t:schema.templates.index.help_center.settings.topic_channel_title.label", + "type": "text", + "default": "t:schema.templates.index.help_center.settings.topic_channel_title.default" + }, + { + "id": "show_newest_section", + "label": "t:schema.templates.index.help_center.settings.show_newest_section.label", + "type": "checkbox", + "default": true, + "info": "t:schema.templates.index.help_center.settings.show_newest_section.info" + }, + { + "id": "newest_section_title", + "label": "t:schema.templates.index.help_center.settings.newest_section_title.label", + "type": "text", + "default": "t:schema.templates.index.help_center.settings.newest_section_title.default" + }, + { + "id": "show_hottest_section", + "label": "t:schema.templates.index.help_center.settings.show_hottest_section.label", + "type": "checkbox", + "default": true, + "info": "t:schema.templates.index.help_center.settings.show_hottest_section.info" + }, + { + "id": "hottest_section_title", + "label": "t:schema.templates.index.help_center.settings.hottest_section_title.label", + "type": "text", + "default": "t:schema.templates.index.help_center.settings.hottest_section_title.default" + } + ] } {% endschema %} diff --git a/templates/index.list.liquid b/templates/index.list.liquid index f162b5edad696feb187b540ba344108f2c1d24ab..cb933dcceae3179cbfcbd26d7c870ebe091c3a28 100644 --- a/templates/index.list.liquid +++ b/templates/index.list.liquid @@ -1,152 +1,28 @@ -
- {%# 分类 %} -
-
-
-
-

{{ site.name }}

-

{{ site.settings.description }}

- - {%# 内容 %} -
-
- - - - -
-
- +
+
+
+
+

{{ site.name }}

+

{{ site.settings.description }}

+ + {%# 内容 %} +
+ + {% render 'index_list_tree', nav_tree: site.nav_tree %}
- {% render 'footer', settings: site.settings %} -
+ {% schema %} { - "name": "Product manual", - "description": "home like list dictionary style", - "thumb_url": "images/theme/index-list.png", + "name": "t:schema.templates.index.list.name", + "description": "t:schema.templates.index.list.description", + "thumb_url": "images/schema/index-list.png", "preview_image_urls": [ - "images/theme/index-list.png" + "images/schema/index-list.png" ], "sub_page_templates": ["page"], - "settings": [ - { - "id": "description", - "type": "text", - "label": "t:settings_schema.generic.settings.description.label", - "default": "👋 What Can We Help?" - }, - { - "id": "copyright_info", - "type": "text", - "label": "t:settings_schema.generic.settings.copyright_info.label", - "default": "t:settings_schema.generic.settings.copyright_info.default" - } - ] + "settings": [] } {% endschema %} diff --git a/templates/nav_tree.liquid b/templates/nav_tree.liquid deleted file mode 100644 index 2d9efcca394bf46f6f5e8479c1c7e23351d941ac..0000000000000000000000000000000000000000 --- a/templates/nav_tree.liquid +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/templates/page.export.liquid b/templates/page.export.liquid index 04edccc4f9e63896e162a50de4be189b58412bad..a49811576e7725b0725fe78ae8f3d8482a0c9b7a 100644 --- a/templates/page.export.liquid +++ b/templates/page.export.liquid @@ -6,7 +6,6 @@ {%# templates/page.export.liquid %} {% layout none %} -{% assign pages = page.children_in_list | limit: 200 %} @@ -14,15 +13,16 @@ {% meta_tags %} - {{ 'javascripts/main.js' | asset_url | script_tag: defer: true, data-turbo-track: 'reload' }} - {{ 'css/main.css' | asset_url | stylesheet_tag: data-turbo-track: 'reload' }} + {{ 'stylesheets/application.css' | asset_url | stylesheet_tag: data-turbo-track: 'reload' }} + {{ 'baklib/shared/main.css' | asset_url | stylesheet_tag: data-turbo-track: 'reload' }} + {{ 'javascripts/application.js' | asset_url | script_tag: defer: true, data-turbo-track: 'reload' }} {%# TIPS:在低代码平台开发时,请打开下一行代码注释 %} {% if true %}{{ 'javascripts/cdn.tailwindcss.js' | asset_url | script_tag: data-turbo-track: 'reload' }} {% endif %} {{ site.settings.head_html }} - {% paginate_tag pages, per: 200 %} + {% paginate_tag page.children_in_list, per: 200, as: 'items' %}
@@ -32,41 +32,41 @@
@@ -85,7 +85,7 @@
- + {% endpaginate_tag %} @@ -93,51 +93,29 @@ {% schema %} { - "name": "Export Page", - "description": "The export page template", - "thumb_url": "images/theme/page.png", + "name": "t:schema.templates.page.export.name", + "description": "t:schema.templates.page.export.description", + "thumb_url": "images/schema/page-export.png", "sub_page_templates": ["page"], "settings": [ - { - "id": "show_list", - "type": "checkbox", - "default": "false", - "label": "栏目", - "info": "作为栏目页面,只显示子页面列表" - }, { "id": "title", "type": "text", "readonly": true, - "label": "标题", - "info": "知识库同步,不可编辑" - }, - { - "id": "tags", - "type": "tag_picker", - "multiple": true, - "label": "t:settings_schema.page.settings.tags.label" + "label": "t:schema.templates.page.settings.title.label", + "info": "t:schema.templates.page.settings.title.info" }, { "id": "description", "type": "textarea", - "label": "t:settings_schema.page.settings.description.label" - }, - { - "id": "icon", - "type": "image_picker", - "ratio": "1:1", - "width": 100, - "label": "t:settings_schema.page.settings.icon.label", - // "required": true, 如果必填就用这个参数 - "info": "t:settings_schema.page.settings.icon.info" + "label": "t:schema.templates.page.settings.description.label" }, { "id": "content", "type": "richtext", - "label": "t:settings_schema.page.settings.content.label", + "label": "t:schema.templates.page.settings.content.label", "readonly": true, - "info": "t:settings_schema.page.settings.content.info" + "info": "t:schema.templates.page.settings.content.info" } ] } diff --git a/templates/page.liquid b/templates/page.liquid index ba61a0ceac829c8366ed07bec3979033c9c7a91e..adc2d7b87bf37337450b8532081b240b77f308ab 100644 --- a/templates/page.liquid +++ b/templates/page.liquid @@ -1,181 +1,95 @@ -{% comment %} 2024072管家婆需求: 新设计,左侧导航fixed固定 {% endcomment %} +
+
+ + + +
+ {% render 'breadcrumb', breadcrumb: page.breadcrumb %} -{% comment %} 左侧 NavBar只显示当前父级栏目,具体做法: nav_tree_path 添加一个 parent 参数即可。 {% endcomment %} -{% unless page.parent.path == '/' %} - {% assign parent = page.parent %} -{% else %} - {% assign parent = page %} -{% endunless %} + {% if page.settings.show_list %} + {% assign sub_pages = page.children_in_list %} + {% render 'page_list', page: page, pages: sub_pages %} + {% else %} + {% render 'page', page: page %} + {% endif %} -{% assign sub_pages = page.children_in_list %} -{% assign sub_pages_size = sub_pages | size %} -{% assign screen_width = site.settings.screen_width.value | default: 'max-w-screen-xl' %} -{% assign default_avatar_url = 'images/avatar.svg' | asset_url %} - -{% comment %} 页面内容部分 {% endcomment %} -
- - - {% if site.settings.page_bg_type.value == '1' %} - - {% elsif site.settings.page_bg_type.value == '2' %} -
- {% endif %} - -
- {% # 侧边栏 %} - {% # render 'sidebar', current_page: page %} -
- - {% # header中的树形菜单 %} - -
- {% # 打开侧边栏 %} -
- - - -
- {%# page_list 内页列表点击 URL 不改变,需要添加 data-turbo-action="advance" %} - -
- {% # 面包屑导航 %} -
- {% render 'breadcrumb', breadcrumb: page.breadcrumb %} -
- {% if page.settings.show_list %} - {% render 'page_list', page: page, pages: sub_pages %} - {% else %} - {% render 'page', page: page, default_avatar_url: default_avatar_url %} - {% endif %} -
- {% render 'footer', settings: site.settings %} -
-
-
+
+ + +
+
{% schema %} - { - "name": "Page", - "description": "The content page template", - "thumb_url": "images/theme/page.png", - "sub_page_templates": ["page"], - "settings": [ - { - "id": "show_list", - "type": "checkbox", - "default": "false", - "label": "栏目", - "info": "作为栏目页面,只显示子页面列表" - }, - { - "id": "title", - "type": "text", - "readonly": true, - "label": "标题", - "info": "知识库同步,不可编辑" - }, - { - "id": "tags", - "type": "tag_picker", - "multiple": true, - "label": "t:settings_schema.page.settings.tags.label" - }, - { - "id": "description", - "type": "textarea", - "label": "t:settings_schema.page.settings.description.label" - }, - { - "id": "icon", - "type": "image_picker", - "ratio": "1:1", - "width": 100, - "label": "t:settings_schema.page.settings.icon.label", - // "required": true, 如果必填就用这个参数 - "info": "t:settings_schema.page.settings.icon.info" - }, - { - "id": "content", - "type": "richtext", - "label": "t:settings_schema.page.settings.content.label", - "readonly": true, - "info": "t:settings_schema.page.settings.content.info" - } - ] - } +{ + "name": "t:schema.templates.page.name", + "description": "t:schema.templates.page.description", + "thumb_url": "images/schema/page.png", + "sub_page_templates": ["page"], + "settings": [ + { + "id": "show_list", + "type": "checkbox", + "default": "false", + "label": "t:schema.templates.page.settings.show_list.label", + "info": "t:schema.templates.page.settings.show_list.info" + }, + { + "id": "is_topic_channel", + "type": "checkbox", + "default": "false", + "label": "t:schema.templates.page.settings.is_topic_channel.label", + "info": "t:schema.templates.page.settings.is_topic_channel.info", + "query_enabled": true + }, + { + "id": "tags", + "type": "tag_picker", + "multiple": true, + "label": "t:schema.templates.page.settings.tags.label" + }, + { + "id": "icon", + "type": "image_picker", + "ratio": "1:1", + "width": 100, + "label": "t:schema.templates.page.settings.icon.label", + "info": "t:schema.templates.page.settings.icon.info" + }, + { + "id": "title", + "type": "text", + "readonly": true, + "label": "t:schema.templates.page.settings.title.label", + "info": "t:schema.templates.page.settings.title.info" + }, + { + "id": "description", + "type": "textarea", + "label": "t:schema.templates.page.settings.description.label" + }, + { + "id": "content", + "type": "richtext", + "label": "t:schema.templates.page.settings.content.label", + "readonly": true, + "info": "t:schema.templates.page.settings.content.info" + } + ] +} {% endschema %} diff --git a/templates/page.video.liquid b/templates/page.video.liquid new file mode 100644 index 0000000000000000000000000000000000000000..c8b14d6aa38da3f68a85ff18392e514a47393f7c --- /dev/null +++ b/templates/page.video.liquid @@ -0,0 +1,74 @@ + +{% assign pages = page.children_in_list | limit: 200 %} +{% assign default_avatar_url = 'images/avatar.svg' | asset_url %} + +
+
+ + + + +
+ {% if page.settings.is_video_list %} + {% render 'page_video_list', page: page %} + {% else %} + {% render 'page', page: page %} + {% endif %} +
+
+
+{% schema %} + { + "name": "t:schema.templates.page.video.name", + "description": "t:schema.templates.page.video.description", + "thumb_url": "images/schema/page-videos.png", + "sub_page_templates": ["page"], + "settings": [ + { + "id": "is_video_list", + "type": "checkbox", + "default": "false", + "label": "t:schema.templates.page.video.settings.is_video_list.label", + "info": "t:schema.templates.page.video.settings.is_video_list.info" + }, + { + "id": "video_url", + "type": "video_picker", + "label": "t:schema.templates.page.video.settings.video_url.label", + "info": "t:schema.templates.page.video.settings.video_url.info" + }, + { + "id": "tags", + "type": "tag_picker", + "multiple": true, + "label": "t:schema.templates.page.settings.tags.label" + }, + { + "id": "title", + "type": "text", + "readonly": true, + "label": "t:schema.templates.page.settings.title.label", + "info": "t:schema.templates.page.settings.title.info" + }, + { + "id": "description", + "type": "textarea", + "label": "t:schema.templates.page.settings.description.label" + }, + { + "id": "content", + "type": "richtext", + "label": "t:schema.templates.page.settings.content.label", + "readonly": true, + "info": "t:schema.templates.page.settings.content.info" + } + ] + } +{% endschema %} diff --git a/templates/search.liquid b/templates/search.liquid index be1cf7895d81d502b8eaa25b681aa4ed9f3b75f1..f4e587d8c4e670bb5266397f4f924e44f35e061f 100644 --- a/templates/search.liquid +++ b/templates/search.liquid @@ -1,54 +1,213 @@ - -{% assign screen_width = site.settings.screen_width.value | default: 'max-w-screen-xl' %} +
+
+
+ {% form_tag 'search', data-turbo-frame: 'frame--search-results', data-turbo-action: 'advance' %} +
+ + +
+ {% endform_tag %} - -
- -
- - -
+
+ {% # 自定义标签搜索 %} + {% assign index_page = site.pages['/'] %} + {% assign search_hot_tags = index_page.settings.search_hot_tags %} + {% if search_hot_tags.size > 0 %} +
+
+ {{ 'layout.theme.search_tags_label' | t }}: + {% for tag in search_hot_tags %} + + {{ tag.name }} + + {% endfor %} +
+
+ {% endif %} - -
- - - - - {{ "generic.back" | t }} - -
+ {% # 热门搜索 %} + {% assign hot_keywords = index_page.settings.search_hot_keywords | reg_split: "/\n/" %} + {% if hot_keywords.size > 0 %} +
+
+ {{ 'layout.theme.search_keywords_label' | t: '热门搜索' }}: + {% for hot_keyword in hot_keywords %} + + {{ hot_keyword }} + + {% endfor %} +
+
+ {% endif %}
+
-
- {% if search.page_number == 1 %} - {% for link in search.extends %} -
- {{ link.link_text }} -

{{ link.url }}

+ {% comment %} 使用turbo-frame,可以使光标一直在输入框中 {% endcomment %} + + {% if search.tag %} +
+ {{ search.tag.name }} +
+ {% endif %} + + {% if search.keywords or search.tag %} + {% paginate_tag search.pages, as: 'items', per: 20 %} + {% assign extends_size = search.extends | size %} + {% assign items_size = items | size %} + {% assign total_size = extends_size | plus: items_size %} + {% assign top_5_paths = items | map: 'path' | limit: 5 | join: ',' %} +
+
+ + {% if total_size > 0 %} +
    + {% if search.page_number == 1 and extends_size > 0 %} + {% for link in search.extends %} +
  • + + +
  • + {% endfor %} + {% endif %} + {% for page in items %} +
  • +
    +
    +
    +
    + {{ forloop.index }} +
    +
    + + {{ page.highlighted_search_title }} + + {{ page.url }} + {% unless page.highlighted_search_content == empty %} +

    {{ page.highlighted_search_content }}

    + {% endunless %} +
    + +
    +
    +
    +
    +
    +
  • + {% endfor %} +
+
+ {% render 'paginate', paginate: paginate %} +
+ + {% else %} +
+ {% assign message = "templates.search.no_results" | t: '没有搜索到内容' %} + {% render 'empty', message: message %} + +
+ {% endif %} +
- {% endfor %} - {% endif %} - {% paginate_tag search.pages, as: 'pages', per: 10 %} - {% for page in pages %} -
- {{ page.highlighted_search_title }} -

{{ page.highlighted_search_content }}

-
- - {% else %} -
{{ "search.no_results" | t: 'No results found' }}
- {% endfor %} - {% render 'paginate', paginate: paginate %} + {% endif %} +
{% endpaginate_tag %} -
- -
+ + {% else %} +
+ {% assign message = "templates.search.no_results" | t: '没有搜索到内容' %} + {% render 'empty', message: message %} + +
+ {% endif %} +
- {% render 'footer', settings: site.settings %}
diff --git a/templates/tag.liquid b/templates/tag.liquid index 21619df7b793367bc16a854196c426ee9513a3f1..87bb61b347d1e3bd0ba17c8b7c3130f20825ea4c 100644 --- a/templates/tag.liquid +++ b/templates/tag.liquid @@ -1,70 +1,54 @@ - - -
- -
- - -
- - -
- - - - - {{ "generic.back" | t }} - -
+
+
+ +
+
+
+ # {{ tag.name }}
+
-
- - -
- - -
-
-

- - # {{ tag.name }} - -

-
-
- -
- {% paginate_tag tag.pages, as: 'pages' %} - {% for page in pages %} -
- {{ page.link_text | highlight: tag.name }} -

{{ page.settings.content | strip_html | highlight: search.keywords }}

-
- - - - -
- -
- +
+
+ + {% endfor %} + {% render 'paginate', paginate: paginate %} + + {% endpaginate_tag %} + {% else %} +
+ {% assign message = "templates.search.no_results" | t: '没有搜索到内容' %} + {% render 'empty', message: message %} +
+ {% endif %}
- {% render 'footer', settings: site.settings %} -
+ \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index 55091fef9618e50294974ea26b533495a472b2ff..0000000000000000000000000000000000000000 --- a/yarn-error.log +++ /dev/null @@ -1,54 +0,0 @@ -Arguments: - /home/song/.asdf/installs/nodejs/18.12.1/bin/node /home/song/.asdf/installs/nodejs/18.12.1/bin/yarn - -PATH: - /home/song/.asdf/plugins/nodejs/shims:/home/song/.asdf/installs/nodejs/18.12.1/bin:/home/song/.bun/bin:/home/song/.asdf/shims:/home/song/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/Microsoft VS Code/bin:/mnt/c/Users/song/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/song/AppData/Local/atom/bin:/mnt/c/Users/song/AppData/Local/Microsoft/WindowsApps:/usr/local/go/bin - -Yarn version: - 1.22.19 - -Node version: - 18.12.1 - -Platform: - linux x64 - -Trace: - Error: Client network socket disconnected before secure TLS connection was established - at connResetException (node:internal/errors:711:14) - at TLSSocket.onConnectEnd (node:_tls_wrap:1593:19) - at TLSSocket.emit (node:events:525:35) - at endReadableNT (node:internal/streams/readable:1359:12) - at process.processTicksAndRejections (node:internal/process/task_queues:82:21) - -npm manifest: - { - "name": "blog", - "version": "1.0.0", - "license": "MIT", - "scripts": { - "build": "npm-run-all --parallel build:css build:js", - "build:css": "npx tailwindcss -i ./src/main.css -o ./assets/css/main.css", - "build:js": "npx esbuild ./src/main.js --bundle --minify --outfile=./assets/javascripts/main.js", - "dev": "npm-run-all --parallel 'build:css -- --watch' 'build:js -- --watch'" - }, - "devDependencies": { - "esbuild": "^0.19.3", - "npm-run-all": "^4.1.5", - "tailwindcss": "^3.3.3", - "viewerjs": "^1.11.6" - }, - "dependencies": { - "@alpinejs/collapse": "^3.13.0", - "@hotwired/stimulus": "^3.2.2", - "@hotwired/turbo": "^7.3.0", - "alpinejs": "^3.13.0", - "stimulus-dropdown": "^2.1.0" - } - } - -yarn manifest: - No manifest - -Lockfile: - No lockfile diff --git a/yarn.lock b/yarn.lock index e9fb09bf3332ce649641c562f9cfc846205410ad..8858c679e0fa02d405d25febf6f1f5b5830186d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,32 @@ # yarn lockfile v1 -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== +"@alpinejs/collapse@^3.14.9": + version "3.14.9" + resolved "https://registry.yarnpkg.com/@alpinejs/collapse/-/collapse-3.14.9.tgz#90b3b0c35543ce2cc8380a8d941dfed4536def4a" + integrity sha512-cUjbBVo4KR/CfFg0cLB+Q7a8SnjmD4MdxmtZvFjh25Dlf/ZWYPSPx/28b+aAykuX/SUoDPQRmdFiVVvq+iILHw== -"@alpinejs/collapse@^3.13.0": - version "3.13.8" - resolved "https://registry.yarnpkg.com/@alpinejs/collapse/-/collapse-3.13.8.tgz#f71523fe93d0fd729886134e08b30ef29a6e9a72" - integrity sha512-NsYiidTJ/AOFE8xUMxnXIe5LbRYcfw3UjxI6VUlDw3st4XwzaeCNyqBbZVRt9Ac7wfdrODy0qTHA+iCHSF0atQ== +"@emnapi/core@^1.4.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2", "@emnapi/wasi-threads@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" "@esbuild/aix-ppc64@0.19.12": version "0.19.12" @@ -129,88 +146,231 @@ "@hotwired/stimulus@^3.2.2": version "3.2.2" - resolved "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608" integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A== -"@hotwired/turbo@^7.3.0": - version "7.3.0" - resolved "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz" - integrity sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@stimulus-components/clipboard@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@stimulus-components/clipboard/-/clipboard-5.0.0.tgz#1d119c4ba8827c6c11c2e1b9214d0de79bc0cc87" - integrity sha512-gbwU1sVBiKfMGGCt6oyXx9mGD+cEcHBSqaz//5UVepoQqzl2jYEUWQGFIO0f48LMOamEQwR1azQKfHq6llv6oA== +"@hotwired/turbo@^8.0.13": + version "8.0.13" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.13.tgz#ab35fda9d358432c8a872a833844b38cccb8c25b" + integrity sha512-M7qXUqcGab6G5PKOiwhgbByTtrPgKPFCTMNQ52QhzUEXEqmp0/ApEguUesh/FPiUjrmFec+3lq98KsWnYY2C7g== + +"@napi-rs/wasm-runtime@^0.2.8": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz#7278122cf94f3b36d8170a8eee7d85356dfa6a96" + integrity sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg== + dependencies: + "@emnapi/core" "^1.4.0" + "@emnapi/runtime" "^1.4.0" + "@tybys/wasm-util" "^0.9.0" + +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + +"@popperjs/core@^2.9.0": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@tailwindcss/cli@^4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/cli/-/cli-4.1.4.tgz#d7fce8043013fc31ca04756db41d3988377b7173" + integrity sha512-gP05Qihh+cZ2FqD5fa0WJXx3KEk2YWUYv/RBKAyiOg0V4vYVDr/xlLc0sacpnVEXM45BVUR9U2hsESufYs6YTA== + dependencies: + "@parcel/watcher" "^2.5.1" + "@tailwindcss/node" "4.1.4" + "@tailwindcss/oxide" "4.1.4" + enhanced-resolve "^5.18.1" + mri "^1.2.0" + picocolors "^1.1.1" + tailwindcss "4.1.4" + +"@tailwindcss/node@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.4.tgz#cfabbbcd53cbbae8a175dc744e6fe31e8ad43d3e" + integrity sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw== + dependencies: + enhanced-resolve "^5.18.1" + jiti "^2.4.2" + lightningcss "1.29.2" + tailwindcss "4.1.4" + +"@tailwindcss/oxide-android-arm64@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz#5cee1085f6c856f0da2c182e29d115af1f1118e8" + integrity sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA== + +"@tailwindcss/oxide-darwin-arm64@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz#878c0ea38fa277f058084bb1a91a4891d9049945" + integrity sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg== + +"@tailwindcss/oxide-darwin-x64@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz#ffde947581f7eaa7e1df2be222255ccff063de8a" + integrity sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA== + +"@tailwindcss/oxide-freebsd-x64@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz#894dbe0155afe924071198c44635663d3d9c967a" + integrity sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz#7b5d7de6a88613e5c908a68f1ed84ac675fd9351" + integrity sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg== + +"@tailwindcss/oxide-linux-arm64-gnu@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz#9d77b37c0ad52c370de3573240993d43d6e82141" + integrity sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww== + +"@tailwindcss/oxide-linux-arm64-musl@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz#a1839425aaa7a42a465d58017f53c3817d98ac3d" + integrity sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw== + +"@tailwindcss/oxide-linux-x64-gnu@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz#bf11a9bf2191d964bb8f696d2ea904b55140b800" + integrity sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ== + +"@tailwindcss/oxide-linux-x64-musl@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz#11c7429543951cfa308016d4a957ab6a4192b37f" + integrity sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ== + +"@tailwindcss/oxide-wasm32-wasi@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz#2c6b1aba1f086c3337625cdb3372c3955832768c" + integrity sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q== + dependencies: + "@emnapi/core" "^1.4.0" + "@emnapi/runtime" "^1.4.0" + "@emnapi/wasi-threads" "^1.0.1" + "@napi-rs/wasm-runtime" "^0.2.8" + "@tybys/wasm-util" "^0.9.0" + tslib "^2.8.0" + +"@tailwindcss/oxide-win32-arm64-msvc@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz#ffdfed3d61203428d448f52e35185f85a0ef9856" + integrity sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng== + +"@tailwindcss/oxide-win32-x64-msvc@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz#0abb7920564bcf5dafabc56914eeea38547a32c9" + integrity sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw== + +"@tailwindcss/oxide@4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.4.tgz#bf3bce61310b64bd47f61f12083ae4903a91ba8e" + integrity sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ== + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.1.4" + "@tailwindcss/oxide-darwin-arm64" "4.1.4" + "@tailwindcss/oxide-darwin-x64" "4.1.4" + "@tailwindcss/oxide-freebsd-x64" "4.1.4" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.4" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.4" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.4" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.4" + "@tailwindcss/oxide-linux-x64-musl" "4.1.4" + "@tailwindcss/oxide-wasm32-wasi" "4.1.4" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.4" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.4" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" "@vue/reactivity@~3.1.1": version "3.1.5" @@ -224,23 +384,13 @@ resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz" integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA== -alpinejs@^3.13.0: - version "3.13.8" - resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.13.8.tgz#23f280a886af296e16302a79e01ba51c0d86f67e" - integrity sha512-XolbBJryCndomtaHd/KHQjQeD/L72FJxy/YhLLFD4Lr7zzGcpcbg+UgXteMR2pYg1KhRUr6V4O3GfN1zJAmRWw== +alpinejs@^3.14.9: + version "3.14.9" + resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.14.9.tgz#381a050152acb221b2209d9398935d5cd4c18afc" + integrity sha512-gqSOhTEyryU9FhviNqiHBHzgjkvtukq9tevew29fTj+ofZtfsYriw4zPirHHOAy9bw8QoL3WGhyk7QqCh5AYlw== dependencies: "@vue/reactivity" "~3.1.1" -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -248,36 +398,6 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" @@ -312,11 +432,6 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -325,19 +440,12 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" @@ -350,11 +458,6 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -364,21 +467,6 @@ chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -386,28 +474,11 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -424,19 +495,10 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +daisyui@^5.0.27: + version "5.0.27" + resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-5.0.27.tgz#33240a60a0d01bdaddd2b50d7a8cb76fa0bdb835" + integrity sha512-XrpqgfpGaZJvTPg9pS9Rq6xbYpmMnR0a7AKqyVPZceJzjAs5HH3rfkRkiuGin0+KC2Adnu+WLHU7UDxAtCMyAw== data-view-buffer@^1.0.1: version "1.0.1" @@ -483,30 +545,23 @@ define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +detect-libc@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +enhanced-resolve@^5.18.1: + version "5.18.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" error-ex@^1.3.1: version "1.3.2" @@ -638,28 +693,10 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -670,19 +707,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -723,31 +747,6 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^10.3.10: - version "10.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - globalthis@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" @@ -762,7 +761,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -818,11 +817,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hotkeys-js@>=3: - version "3.13.7" - resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.13.7.tgz#0188d8e2fca16a3f1d66541b48de0bb9df613726" - integrity sha512-ygFIdTqqwG4fFP7kkiYlvayZppeIQX2aPpirsngkv1xM1lP0piDY5QEh68nQnIKvz64hfocxhBaD/uK3sSK1yQ== - internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -852,13 +846,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" @@ -895,17 +882,12 @@ is-date-object@^1.0.1: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -924,7 +906,7 @@ is-number-object@^1.0.4: is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-regex@^1.1.4: @@ -987,39 +969,83 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -jackspeak@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jiti@^1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lightningcss-darwin-arm64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz#6ceff38b01134af48e859394e1ca21e5d49faae6" + integrity sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA== + +lightningcss-darwin-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz#891b6f9e57682d794223c33463ca66d3af3fb038" + integrity sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w== + +lightningcss-freebsd-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz#8a95f9ab73b2b2b0beefe1599fafa8b058938495" + integrity sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg== + +lightningcss-linux-arm-gnueabihf@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz#5c60bbf92b39d7ed51e363f7b98a7111bf5914a1" + integrity sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg== + +lightningcss-linux-arm64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz#e73d7608c4cce034c3654e5e8b53be74846224de" + integrity sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ== + +lightningcss-linux-arm64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz#a95a18d5a909831c092e0a8d2de4b9ac1a8db151" + integrity sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ== + +lightningcss-linux-x64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz#551ca07e565394928642edee92acc042e546cb78" + integrity sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg== + +lightningcss-linux-x64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz#2fd164554340831bce50285b57101817850dd258" + integrity sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w== + +lightningcss-win32-arm64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz#da43ea49fafc5d2de38e016f1a8539d5eed98318" + integrity sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw== + +lightningcss-win32-x64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz#ddefaa099a39b725b2f5bbdcb9fc718435cc9797" + integrity sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA== + +lightningcss@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.29.2.tgz#f5f0fd6e63292a232697e6fe709da5b47624def3" + integrity sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.29.2" + lightningcss-darwin-x64 "1.29.2" + lightningcss-freebsd-x64 "1.29.2" + lightningcss-linux-arm-gnueabihf "1.29.2" + lightningcss-linux-arm64-gnu "1.29.2" + lightningcss-linux-arm64-musl "1.29.2" + lightningcss-linux-x64-gnu "1.29.2" + lightningcss-linux-x64-musl "1.29.2" + lightningcss-win32-arm64-msvc "1.29.2" + lightningcss-win32-x64-msvc "1.29.2" load-json-file@^4.0.0: version "4.0.0" @@ -1031,27 +1057,17 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -lru-cache@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" minimatch@^3.0.4: @@ -1061,37 +1077,21 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +mri@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== nice-try@^1.0.4: version "1.0.5" resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" @@ -1102,11 +1102,6 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" @@ -1122,16 +1117,6 @@ npm-run-all@^4.1.5: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -1165,24 +1150,11 @@ path-key@^2.0.1: resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" @@ -1190,14 +1162,14 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pidtree@^0.3.0: @@ -1205,90 +1177,25 @@ pidtree@^0.3.0: resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - pify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-selector-parser@^6.0.11: - version "6.0.16" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" - integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.4.23: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" +prettier-plugin-tailwindcss@^0.6.11: + version "0.6.11" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz#cfacd60c4f81997353ee913e589037f796df0f5f" + integrity sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" +prettier@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== read-pkg@^3.0.0: version "3.0.0" @@ -1299,13 +1206,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" @@ -1316,7 +1216,7 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.2: +resolve@^1.10.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -1325,18 +1225,6 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -1390,23 +1278,11 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - shell-quote@^1.6.1: version "1.8.1" resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" @@ -1422,16 +1298,6 @@ side-channel@^1.0.4: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" @@ -1458,47 +1324,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== -stimulus-dropdown@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/stimulus-dropdown/-/stimulus-dropdown-2.1.0.tgz" - integrity sha512-p4Bs56/ilB2E0lfFaNajKIHZK1PMUUDnhDl74f97bn087fxIfRB7WQekVtTTWJdRlf3EIgSsDX7K1TsaLiIcLg== - dependencies: - stimulus-use "^0.51.1" - -stimulus-use@^0.51.1: - version "0.51.3" - resolved "https://registry.npmjs.org/stimulus-use/-/stimulus-use-0.51.3.tgz" - integrity sha512-V4YETxMFL4/bpmcqlwFtaOaJg9sLF+XlWsvXrsoWVA5jffsqe7uAvV6gGPPQta7Hgx01vovA0yNsWUe2eU9Jmw== - dependencies: - hotkeys-js ">=3" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string.prototype.padend@^3.0.0: version "3.1.5" resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz" @@ -1536,45 +1361,11 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -sucrase@^3.32.0: - version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -1587,59 +1378,34 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tailwindcss@^3.3.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" - integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.21.0" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" +tailwindcss@4.1.4, tailwindcss@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.4.tgz#27b3c910c6f1a47f4540451f3faf7cdd6d977a69" + integrity sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A== + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +tslib@^2.4.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== typed-array-buffer@^1.0.2: version "1.0.2" @@ -1695,11 +1461,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" @@ -1741,33 +1502,3 @@ which@^1.2.9: integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -yaml@^2.3.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" - integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==