@steedos/service-plugin-amis 3.0.0-beta.15 → 3.0.0-beta.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,10 +30,7 @@ const draftsApiAdaptor = `
30
30
  }
31
31
  }
32
32
  var instance = payload.inserts[0];
33
- var url = Steedos.absoluteUrl("/app/" + FlowRouter.current().params.app_id + "/instances/view/" + instance._id + "?display=" + (Steedos.Page.getDisplay('instances') || '') + "&side_object=instances&side_listview_id=draft");
34
- // 这里不可以直接openWindow,因为手机浏览器上打不开新窗口,迁移到下面的afterDrafts脚本中,在custom动作单独执行openWindow才行
35
- // Steedos.openWindow(url);
36
- // if(!Steedos.isMobile()){ FlowRouter.reload();}
33
+ var url = Steedos.absoluteUrl("/app/" + context.app_id + "/instances/view/" + instance._id + "?display=" + (Steedos.Page.getDisplay('instances') || '') + "&side_object=instances&side_listview_id=draft");
37
34
  payload.draftUrl = url;
38
35
  return payload;
39
36
  `;
@@ -41,7 +38,7 @@ const draftsApiAdaptor = `
41
38
  const afterDrafts = `
42
39
  var url = event.data.draftUrl;
43
40
  Steedos.openWindow(url);
44
- if(!Steedos.isMobile()){ FlowRouter.reload();}
41
+ window.navigate(0);
45
42
  `;
46
43
 
47
44
  amisLib.registerAction('steedos_actions_standard_approve', {
@@ -49,7 +46,7 @@ amisLib.registerAction('steedos_actions_standard_approve', {
49
46
  return amisLib.runActions([
50
47
  {
51
48
  "actionType": "custom",
52
- "script": "var objectName = event.data.objectName || event.data.object_name;const flows = lodash.filter(Creator.object_workflows, (item) => { return item.object_name == objectName && (!item.sync_direction || item.sync_direction == 'both' || item.sync_direction == 'obj_to_ins') })\n\nevent.setData({ ...event.data, ...{ flows: flows, flowCount: flows.length } })\n\n"
49
+ "script": "var objectName = event.data.objectName || event.data.object_name;const flows = lodash.filter(Steedos.object_workflows, (item) => { return item.object_name == objectName && (!item.sync_direction || item.sync_direction == 'both' || item.sync_direction == 'obj_to_ins') })\n\nevent.setData({ ...event.data, ...{ flows: flows, flowCount: flows.length } })\n\n"
53
50
  },
54
51
  {
55
52
  "actionType": "ajax",
@@ -132,7 +129,7 @@ amisLib.registerAction('steedos_actions_standard_approve', {
132
129
  "url": "${context.rootUrl}/api/object/workflow/drafts",
133
130
  "method": "post",
134
131
  "requestAdaptor":"api.data = {\n \'Instances\': [{\n \'flow\': api.body.flowId,\n \'applicant\': api.body.context.userId,\n \'space\': api.body.context.tenantId,\n \'record_ids\': [{ o: api.body.objectName, ids: [api.body.recordId] }]\n }]\n}\n\nreturn api;",
135
- "adaptor":"\nif (payload.error) { \n return {\n status: 2,\n msg: payload.error\n }\n}\nconst instance = payload.inserts[0];\nSteedos.openWindow(Steedos.absoluteUrl(\'/app/\' + FlowRouter.current().params.app_id + \'/instances/view/\' + instance._id + \'?display=\' + (Steedos.Page.getDisplay('instances') || '') + \'&side_object=instances&side_listview_id=draft\'))\nFlowRouter.reload();\nreturn payload;",
132
+ "adaptor":"\nif (payload.error) { \n return {\n status: 2,\n msg: payload.error\n }\n}\nconst instance = payload.inserts[0];\nSteedos.openWindow(Steedos.absoluteUrl(\'/app/\' + context.app_id + \'/instances/view/\' + instance._id + \'?display=\' + (Steedos.Page.getDisplay('instances') || '') + \'&side_object=instances&side_listview_id=draft\'))\nwindow.navigate(0);\nreturn payload;",
136
133
  "messages": {},
137
134
  "headers": {
138
135
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
@@ -29,11 +29,6 @@
29
29
 
30
30
  return true;
31
31
  }
32
-
33
- // 加载Amis SDK: 如果直接放到body中会导致 meteor 编译后的 cordova.js 加载报错
34
- // let amisSDKScript = document.createElement("script");
35
- // amisSDKScript.setAttribute("src", Steedos.absoluteUrl('/unpkg.com/amis/sdk/sdk.js'));
36
- // document.getElementsByTagName("head")[0].appendChild(amisSDKScript);
37
32
  } catch (error) {
38
33
  console.error(error)
39
34
  };
@@ -257,13 +252,8 @@
257
252
 
258
253
  // 主要是支持 nav 中的跳转
259
254
  if (action && to && action.target) {
260
- if(Meteor.isCordova && to.indexOf('http') != 0){
261
- window.open(Steedos.absoluteUrl(to), action.target);
262
- return;
263
- }else{
264
- window.open(to, action.target);
265
- return;
266
- }
255
+ window.open(to, action.target);
256
+ return;
267
257
  }
268
258
 
269
259
  if (/^https?:\/\//.test(to)) {
@@ -281,10 +271,6 @@
281
271
  }
282
272
  // url是相对路径
283
273
  if(config.url && (!/^http[s]?:\/\//i.test(config.url))){
284
- if(Meteor.isCordova){
285
- config.url = Meteor.absoluteUrl(config.url)
286
- }
287
-
288
274
  if(!config.headers){
289
275
  config.headers = {}
290
276
  }
@@ -292,17 +278,6 @@
292
278
  if(!config.headers.Authorization && Builder.settings.context && Builder.settings.context.tenantId && Builder.settings.context.authToken){
293
279
  config.headers.Authorization = `Bearer ${Builder.settings.context.tenantId},${Builder.settings.context.authToken}`;
294
280
  }
295
- }else if(config.url && Meteor.isCordova && Builder.settings.context && Builder.settings.context.rootUrl && config.url.startsWith(Builder.settings.context.rootUrl)){
296
- // 是绝对路径,且是cordova环境, 且以root url开头, 则自动处理认证
297
- if(Meteor.isCordova){
298
- if(!config.headers){
299
- config.headers = {}
300
- }
301
-
302
- if(!config.headers.Authorization && Builder.settings.context && Builder.settings.context.tenantId && Builder.settings.context.authToken){
303
- config.headers.Authorization = `Bearer ${Builder.settings.context.tenantId},${Builder.settings.context.authToken}`;
304
- }
305
- }
306
281
  }
307
282
  return config;
308
283
  },
@@ -418,23 +393,6 @@
418
393
  };
419
394
 
420
395
  const initMonaco = ()=>{
421
-
422
- // const { detect } = require('detect-browser');
423
-
424
- // const browser = detect();
425
-
426
- // // 低于86版的chrome 不支持code类型字段及功能
427
- // if (browser && browser.name === 'chrome' && Number(browser.version.split(".")[0]) < 86) {
428
- // return Promise.resolve(true)
429
- // }
430
-
431
- // // 手机版暂不支持code类型字段.
432
- // if(Meteor.isCordova){
433
- // return Promise.resolve(true)
434
- // }else{
435
- // return Builder.initMonaco()
436
- // }
437
-
438
396
  return Promise.resolve(true)
439
397
  }
440
398
  //Amis SDK 中已清理了monaco, 所以这里需要提前注册,否则会导致amis code类型报错
@@ -141,16 +141,19 @@
141
141
  "multiple": false
142
142
  },
143
143
  {
144
- "name": "formula",
145
- "label": "${'action_field_updates.action_field_updates_form.formula' | t}",
146
- "required": false,
147
- "type": "textarea",
148
- "tpl": "<b><%=data.formula%></b>",
144
+ "type": "service",
145
+ "schemaApi": {
146
+ "method": "get",
147
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${target_object}/fields/options",
148
+ "cache": 30000,
149
+ "adaptor": "const field = {label: t('action_field_updates.action_field_updates_form.formula')}; const variables = SteedosUI.getFormulaVariables(payload.data.options);\n var fieldSchema={label: field.label, type:'input-formula', name: 'formula', 'evalMode': false, variableMode: 'tabs', variables: variables, labelRemark: field.inlineHelpText, description: field.description } \n return {...payload, data:fieldSchema};",
150
+ "trackExpression": "${target_object}",
151
+ "sendOn": "${target_object}"
152
+ },
153
+ "dsType": "api",
154
+ "id": "u:508198dbfac7",
149
155
  "className": "col-span-2 m-1",
150
156
  "labelClassName": "text-left",
151
- "clearValueOnHidden": true,
152
- "fieldName": "formula",
153
- "id": "u:20766a86a9f4",
154
157
  "hiddenOn": "this.operation != 'formula'"
155
158
  },
156
159
  {
@@ -76,7 +76,6 @@
76
76
  ],
77
77
  "data": {
78
78
  "context": {
79
- "rootUrl": "http://127.0.0.1:5800"
80
79
  }
81
80
  },
82
81
  "id": "u:3b0de7e88def",
@@ -289,7 +289,7 @@
289
289
  }
290
290
  },
291
291
  "initApiAdaptor": "\nvar data;\nif (recordId) {\n data = payload.data || { _filters_type_controller: 'conditions' };\n //数据格式转换\n if (data) {\n data.sort = lodash.map(data.sort, (item) => {\n return item.field_name + \":\" + item.order;\n });\n data.searchable_fields = lodash.map(data.searchable_fields, 'field');\n\n if (data.filters && lodash.isString(data.filters)) {\n try {\n data.filters = JSON.parse(data.filters);\n } catch (e) { }\n }\n\n if (data.filters && lodash.isString(data.filters)) {\n data._filters_type_controller = 'function';\n } else {\n data._filters_type_controller = 'conditions'\n }\n\n if (data._filters_type_controller === 'conditions') {\n data._filters_conditions = window.amisConvert.filtersToConditions(data.filters || []);\n } else {\n data._filters_function = data.filters;\n }\n }\n} else {\n const uiSchema = api.body.uiSchema;\n const contextDefaultData = context && context.data && context.data.defaultData; const defaultData = api.body.defaultData || contextDefaultData;\n let defaultValues = {};\n _.each(uiSchema && uiSchema.fields, function (field) {\n var value = SteedosUI.getFieldDefaultValue(field, api.body.global);\n if (!_.isNil(value)) {\n defaultValues[field.name] = value;\n }\n });\n if (defaultData && _.isObject(defaultData) && !_.isArray(defaultData)) {\n data = Object.assign({}, defaultValues, defaultData); \n }else{data = Object.assign({}, defaultValues) } \n}\nfor (key in data) {\n if (data[key] === null) {\n delete data[key];\n }\n}\npayload.data = data;\ndelete payload.extensions; if (data.is_enable != false) { data.is_enable = true; };\nreturn payload;",
292
- "apiRequestAdaptor": "delete formData.created;\ndelete formData.created_by;\ndelete formData.modified;\ndelete formData.modified_by;\ndelete formData._display;\n\n//数据格式转换\nformData.sort = lodash.map(formData.sort, (item) => {\n const arr = item.split(':');\n return { field_name: arr[0], order: arr[1] };\n});\n\nformData.searchable_fields = lodash.map(formData.searchable_fields, (item) => {\n return { field: item };\n});\n\nif (!formData._filters_type_controller) {\n formData._filters_type_controller = 'conditions';\n}\n\nif (formData._filters_type_controller === 'conditions' && formData._filters_conditions) {\n formData.filters = window.amisConvert.conditionsToFilters(formData._filters_conditions);\n // formData.filters = JSON.stringify(window.amisConvert.conditionsToFilters(formData._filters_conditions), null, 4);\n} else {\n formData.filters = formData._filters_function || null;\n}\n\ndelete formData._filters_type_controller;\ndelete formData._filters_conditions;\ndelete formData._filters_function;\n\nquery = `mutation{record: object_listviews__insert(doc: {__saveData}){_id}}`;\nif (formData.recordId) {\n query = `mutation{record: object_listviews__update(id: \"` + formData._id + `\", doc: {__saveData}){_id}}`;\n};\n__saveData = JSON.stringify(JSON.stringify(formData));\n\napi.data = { query: query.replace('{__saveData}', __saveData) };\nreturn api;",
292
+ "apiRequestAdaptor": "delete formData.created;\ndelete formData.created_by;\ndelete formData.modified;\ndelete formData.modified_by;\ndelete formData._display;\n\n//数据格式转换\nformData.sort = lodash.map(formData.sort, (item) => {\n const arr = item.split(':');\n return { field_name: arr[0], order: arr[1] };\n});\n\nformData.searchable_fields = lodash.map(formData.searchable_fields, (item) => {\n return { field: item };\n});\n\nif (!formData._filters_type_controller) {\n formData._filters_type_controller = 'conditions';\n}\n\nif (formData._filters_type_controller === 'conditions' && formData._filters_conditions) {\n formData.filters = window.amisConvert.conditionsToFilters(formData._filters_conditions);\n // formData.filters = JSON.stringify(window.amisConvert.conditionsToFilters(formData._filters_conditions), null, 4);\n} else {\n formData.filters = formData._filters_function || null;\n}\n\ndelete formData._filters_type_controller;\ndelete formData._filters_conditions;\ndelete formData._filters_function;\n\nquery = `mutation{record: object_listviews__insert(doc: {__saveData}){_id}}`;\nif (formData.recordId) {\n query = `mutation{record: object_listviews__update(id: \"` + api.body.recordId + `\", doc: {__saveData}){_id}}`;\n};\n__saveData = JSON.stringify(JSON.stringify(formData));\n\napi.data = { query: query.replace('{__saveData}', __saveData) };\nreturn api;",
293
293
  "id": "u:ce9e3fcc411a"
294
294
  }
295
295
  ],
@@ -304,16 +304,5 @@
304
304
  "initApi": null,
305
305
  "initFetch": null,
306
306
  "id": "u:6ada123f9d4a",
307
- "onEvent": {
308
- "init": {
309
- "weight": 0,
310
- "actions": [
311
- {
312
- "actionType": "custom",
313
- "script": "//初始化时给外层dialog加上类名,使过滤组件popover正常显示\n$('.steedos-object-listview-form-page').closest('.amis-dialog-widget.antd-Modal').addClass('steedos-overflow-visible-dialog');"
314
- }
315
- ]
316
- }
317
- },
318
307
  "className": "steedos-object-listview-form-page"
319
308
  }
@@ -302,8 +302,9 @@ module.exports = {
302
302
  fields: 1
303
303
  }
304
304
  };
305
+ const forceUnHiddenObjectNames = ["cms_files", "tasks", "notes", "events", "instances", "approvals", "process_instance_history", "audit_records"];
305
306
  let objects = _.map(_.filter((allObjects), (obj)=>{
306
- return obj.hidden != true;
307
+ return obj.hidden != true || forceUnHiddenObjectNames.includes(obj.name);
307
308
  }), (obj)=>{
308
309
  return {
309
310
  name: obj.name,
@@ -146,7 +146,8 @@ const getDateTimeOperators = (lng)=>{
146
146
  }
147
147
 
148
148
 
149
- const getFieldOperators = (type, lng)=>{
149
+ const getFieldOperators = (type, lng, ctx = {})=>{
150
+ let { multiple } = ctx;
150
151
  switch (type) {
151
152
  case 'text':
152
153
  return ['equal', 'not_equal', 'like', 'not_like', 'starts_with', 'ends_with']
@@ -162,6 +163,9 @@ const getFieldOperators = (type, lng)=>{
162
163
  case 'lookup':
163
164
  case 'master_detail':
164
165
  case 'select':
166
+ if (multiple){
167
+ return ['select_any_in', 'select_not_any_in']
168
+ }
165
169
  return [ 'select_equals', 'select_not_equals', 'select_any_in', 'select_not_any_in' ]
166
170
  default:
167
171
  return ;
@@ -169,7 +173,7 @@ const getFieldOperators = (type, lng)=>{
169
173
 
170
174
  }
171
175
 
172
- const getField = (objectName, fieldName, type, lng)=>{
176
+ const getField = (objectName, fieldName, type, lng, ctx = {})=>{
173
177
  let field = null;
174
178
  switch (type) {
175
179
  case 'textarea':
@@ -195,7 +199,7 @@ const getField = (objectName, fieldName, type, lng)=>{
195
199
  case 'date':
196
200
  // 华炎魔方中日期字段存的是utc的0点
197
201
  field = {
198
- type: "date",
202
+ type: "text",
199
203
  format: "YYYY-MM-DDT00:00:00+00:00",
200
204
  operators: getFieldOperators("date", lng)
201
205
  };
@@ -203,7 +207,7 @@ const getField = (objectName, fieldName, type, lng)=>{
203
207
  case 'datetime':
204
208
  // 即amis中日期时间控件的format默认值为"YYYY-MM-DDTHH:mm+08:00"正好满足需求
205
209
  field = {
206
- type: "datetime",
210
+ type: "text",
207
211
  operators: getFieldOperators("datetime", lng)
208
212
  };
209
213
  break;
@@ -217,6 +221,11 @@ const getField = (objectName, fieldName, type, lng)=>{
217
221
  break;
218
222
  case 'lookup':
219
223
  case 'master_detail':
224
+ field = {
225
+ type: 'text',
226
+ operators: getFieldOperators("select", lng, ctx)
227
+ };
228
+ break;
220
229
  case 'select':
221
230
  field = {
222
231
  type: 'select',
@@ -230,7 +239,7 @@ const getField = (objectName, fieldName, type, lng)=>{
230
239
  }
231
240
  ,
232
241
  searchable: true,
233
- operators: getFieldOperators("select", lng)
242
+ operators: getFieldOperators("select", lng, ctx)
234
243
  };
235
244
  break;
236
245
  case 'boolean':
@@ -361,7 +370,7 @@ module.exports = {
361
370
  fields.push({
362
371
  label: field.label,
363
372
  name: field.name,
364
- ...getField(objectName, field.name, field.type, lng)
373
+ ...getField(objectName, field.name, field.type, lng, { multiple: field.multiple})
365
374
  })
366
375
  break;
367
376
  }
@@ -41,7 +41,7 @@ const getListPageInitSchema = function (objectApiName) {
41
41
  return {
42
42
  type: 'page',
43
43
  name: getScopeId(objectApiName, "list"),
44
- bodyClassName: '',
44
+ bodyClassName: 'p-0',
45
45
  regions: [
46
46
  "body"
47
47
  ],
@@ -88,7 +88,7 @@ const getRecordPageInitSchema = async function (objectApiName, userSession) {
88
88
  }
89
89
  const content = {
90
90
  "type": "tabs",
91
- "className": "steedos-record-tabs bg-white p-4 sm:m-2 sm:border sm:rounded",
91
+ "className": "steedos-record-tabs bg-white p-4 sm:m-4 sm:shadow sm:rounded",
92
92
  "tabs": [
93
93
  detailed
94
94
  ]
@@ -112,7 +112,7 @@ const getRecordPageInitSchema = async function (objectApiName, userSession) {
112
112
  name: getScopeId(objectApiName, "record_detail"),
113
113
  objectApiName: "${objectName}",
114
114
  bodyClassName: '',
115
- className: "object-detail-page steedos-record-content overflow-y-auto p-0 m-0 flex-1 h-full bg-gray-100",
115
+ className: "object-detail-page steedos-record-content overflow-y-auto p-0 m-0 flex-1 h-full",
116
116
  regions: [
117
117
  "body"
118
118
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-plugin-amis",
3
- "version": "3.0.0-beta.15",
3
+ "version": "3.0.0-beta.151",
4
4
  "main": "package.service.js",
5
5
  "scripts": {
6
6
  "build": "yarn build:tailwind-base && yarn build:tailwind",
@@ -9,12 +9,11 @@
9
9
  "build:tailwind": "tailwindcss -i ./src/styles/tailwind.css -o ./public/tailwind/tailwind-steedos.css"
10
10
  },
11
11
  "license": "MIT",
12
- "private": false,
13
12
  "publishConfig": {
14
13
  "access": "public"
15
14
  },
16
- "gitHead": "9abbe903c15c867571f99d946479bff387862e3f",
15
+ "gitHead": "bd9248bbec1c66e9b2ed1e958f3dba6b70b1476a",
17
16
  "devDependencies": {
18
- "tailwindcss": "3.2.4"
17
+ "tailwindcss": "^3.4.17"
19
18
  }
20
19
  }
@@ -36,7 +36,7 @@ module.exports = {
36
36
  /**
37
37
  * Dependencies
38
38
  */
39
- dependencies: ['~packages-@steedos/service-pages'],
39
+ dependencies: ['@steedos/service-pages'],
40
40
 
41
41
  /**
42
42
  * Actions
@@ -1,5 +1,113 @@
1
+ *, ::before, ::after {
2
+ --tw-border-spacing-x: 0;
3
+ --tw-border-spacing-y: 0;
4
+ --tw-translate-x: 0;
5
+ --tw-translate-y: 0;
6
+ --tw-rotate: 0;
7
+ --tw-skew-x: 0;
8
+ --tw-skew-y: 0;
9
+ --tw-scale-x: 1;
10
+ --tw-scale-y: 1;
11
+ --tw-pan-x: ;
12
+ --tw-pan-y: ;
13
+ --tw-pinch-zoom: ;
14
+ --tw-scroll-snap-strictness: proximity;
15
+ --tw-gradient-from-position: ;
16
+ --tw-gradient-via-position: ;
17
+ --tw-gradient-to-position: ;
18
+ --tw-ordinal: ;
19
+ --tw-slashed-zero: ;
20
+ --tw-numeric-figure: ;
21
+ --tw-numeric-spacing: ;
22
+ --tw-numeric-fraction: ;
23
+ --tw-ring-inset: ;
24
+ --tw-ring-offset-width: 0px;
25
+ --tw-ring-offset-color: #fff;
26
+ --tw-ring-color: rgb(59 130 246 / 0.5);
27
+ --tw-ring-offset-shadow: 0 0 #0000;
28
+ --tw-ring-shadow: 0 0 #0000;
29
+ --tw-shadow: 0 0 #0000;
30
+ --tw-shadow-colored: 0 0 #0000;
31
+ --tw-blur: ;
32
+ --tw-brightness: ;
33
+ --tw-contrast: ;
34
+ --tw-grayscale: ;
35
+ --tw-hue-rotate: ;
36
+ --tw-invert: ;
37
+ --tw-saturate: ;
38
+ --tw-sepia: ;
39
+ --tw-drop-shadow: ;
40
+ --tw-backdrop-blur: ;
41
+ --tw-backdrop-brightness: ;
42
+ --tw-backdrop-contrast: ;
43
+ --tw-backdrop-grayscale: ;
44
+ --tw-backdrop-hue-rotate: ;
45
+ --tw-backdrop-invert: ;
46
+ --tw-backdrop-opacity: ;
47
+ --tw-backdrop-saturate: ;
48
+ --tw-backdrop-sepia: ;
49
+ --tw-contain-size: ;
50
+ --tw-contain-layout: ;
51
+ --tw-contain-paint: ;
52
+ --tw-contain-style: ;
53
+ }
54
+
55
+ ::backdrop {
56
+ --tw-border-spacing-x: 0;
57
+ --tw-border-spacing-y: 0;
58
+ --tw-translate-x: 0;
59
+ --tw-translate-y: 0;
60
+ --tw-rotate: 0;
61
+ --tw-skew-x: 0;
62
+ --tw-skew-y: 0;
63
+ --tw-scale-x: 1;
64
+ --tw-scale-y: 1;
65
+ --tw-pan-x: ;
66
+ --tw-pan-y: ;
67
+ --tw-pinch-zoom: ;
68
+ --tw-scroll-snap-strictness: proximity;
69
+ --tw-gradient-from-position: ;
70
+ --tw-gradient-via-position: ;
71
+ --tw-gradient-to-position: ;
72
+ --tw-ordinal: ;
73
+ --tw-slashed-zero: ;
74
+ --tw-numeric-figure: ;
75
+ --tw-numeric-spacing: ;
76
+ --tw-numeric-fraction: ;
77
+ --tw-ring-inset: ;
78
+ --tw-ring-offset-width: 0px;
79
+ --tw-ring-offset-color: #fff;
80
+ --tw-ring-color: rgb(59 130 246 / 0.5);
81
+ --tw-ring-offset-shadow: 0 0 #0000;
82
+ --tw-ring-shadow: 0 0 #0000;
83
+ --tw-shadow: 0 0 #0000;
84
+ --tw-shadow-colored: 0 0 #0000;
85
+ --tw-blur: ;
86
+ --tw-brightness: ;
87
+ --tw-contrast: ;
88
+ --tw-grayscale: ;
89
+ --tw-hue-rotate: ;
90
+ --tw-invert: ;
91
+ --tw-saturate: ;
92
+ --tw-sepia: ;
93
+ --tw-drop-shadow: ;
94
+ --tw-backdrop-blur: ;
95
+ --tw-backdrop-brightness: ;
96
+ --tw-backdrop-contrast: ;
97
+ --tw-backdrop-grayscale: ;
98
+ --tw-backdrop-hue-rotate: ;
99
+ --tw-backdrop-invert: ;
100
+ --tw-backdrop-opacity: ;
101
+ --tw-backdrop-saturate: ;
102
+ --tw-backdrop-sepia: ;
103
+ --tw-contain-size: ;
104
+ --tw-contain-layout: ;
105
+ --tw-contain-paint: ;
106
+ --tw-contain-style: ;
107
+ }
108
+
1
109
  /*
2
- ! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
110
+ ! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com
3
111
  */
4
112
 
5
113
  /*
@@ -31,9 +139,12 @@
31
139
  3. Use a more readable tab size.
32
140
  4. Use the user's configured `sans` font-family by default.
33
141
  5. Use the user's configured `sans` font-feature-settings by default.
142
+ 6. Use the user's configured `sans` font-variation-settings by default.
143
+ 7. Disable tap highlights on iOS
34
144
  */
35
145
 
36
- html {
146
+ html,
147
+ :host {
37
148
  line-height: 1.5;
38
149
  /* 1 */
39
150
  -webkit-text-size-adjust: 100%;
@@ -43,10 +154,14 @@ html {
43
154
  -o-tab-size: 4;
44
155
  tab-size: 4;
45
156
  /* 3 */
46
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
157
+ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
47
158
  /* 4 */
48
159
  font-feature-settings: normal;
49
160
  /* 5 */
161
+ font-variation-settings: normal;
162
+ /* 6 */
163
+ -webkit-tap-highlight-color: transparent;
164
+ /* 7 */
50
165
  }
51
166
 
52
167
  /*
@@ -118,8 +233,10 @@ strong {
118
233
  }
119
234
 
120
235
  /*
121
- 1. Use the user's configured `mono` font family by default.
122
- 2. Correct the odd `em` font sizing in all browsers.
236
+ 1. Use the user's configured `mono` font-family by default.
237
+ 2. Use the user's configured `mono` font-feature-settings by default.
238
+ 3. Use the user's configured `mono` font-variation-settings by default.
239
+ 4. Correct the odd `em` font sizing in all browsers.
123
240
  */
124
241
 
125
242
  code,
@@ -128,8 +245,12 @@ samp,
128
245
  pre {
129
246
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
130
247
  /* 1 */
131
- font-size: 1em;
248
+ font-feature-settings: normal;
132
249
  /* 2 */
250
+ font-variation-settings: normal;
251
+ /* 3 */
252
+ font-size: 1em;
253
+ /* 4 */
133
254
  }
134
255
 
135
256
  /*
@@ -188,12 +309,18 @@ select,
188
309
  textarea {
189
310
  font-family: inherit;
190
311
  /* 1 */
312
+ font-feature-settings: inherit;
313
+ /* 1 */
314
+ font-variation-settings: inherit;
315
+ /* 1 */
191
316
  font-size: 100%;
192
317
  /* 1 */
193
318
  font-weight: inherit;
194
319
  /* 1 */
195
320
  line-height: inherit;
196
321
  /* 1 */
322
+ letter-spacing: inherit;
323
+ /* 1 */
197
324
  color: inherit;
198
325
  /* 1 */
199
326
  margin: 0;
@@ -217,9 +344,9 @@ select {
217
344
  */
218
345
 
219
346
  button,
220
- [type='button'],
221
- [type='reset'],
222
- [type='submit'] {
347
+ input:where([type='button']),
348
+ input:where([type='reset']),
349
+ input:where([type='submit']) {
223
350
  -webkit-appearance: button;
224
351
  /* 1 */
225
352
  background-color: transparent;
@@ -338,6 +465,14 @@ menu {
338
465
  padding: 0;
339
466
  }
340
467
 
468
+ /*
469
+ Reset default styling for dialogs.
470
+ */
471
+
472
+ dialog {
473
+ padding: 0;
474
+ }
475
+
341
476
  /*
342
477
  Prevent resizing textareas horizontally by default.
343
478
  */
@@ -415,100 +550,6 @@ video {
415
550
 
416
551
  /* Make elements with the HTML hidden attribute stay hidden by default */
417
552
 
418
- [hidden] {
553
+ [hidden]:where(:not([hidden="until-found"])) {
419
554
  display: none;
420
- }
421
-
422
- *, ::before, ::after {
423
- --tw-border-spacing-x: 0;
424
- --tw-border-spacing-y: 0;
425
- --tw-translate-x: 0;
426
- --tw-translate-y: 0;
427
- --tw-rotate: 0;
428
- --tw-skew-x: 0;
429
- --tw-skew-y: 0;
430
- --tw-scale-x: 1;
431
- --tw-scale-y: 1;
432
- --tw-pan-x: ;
433
- --tw-pan-y: ;
434
- --tw-pinch-zoom: ;
435
- --tw-scroll-snap-strictness: proximity;
436
- --tw-ordinal: ;
437
- --tw-slashed-zero: ;
438
- --tw-numeric-figure: ;
439
- --tw-numeric-spacing: ;
440
- --tw-numeric-fraction: ;
441
- --tw-ring-inset: ;
442
- --tw-ring-offset-width: 0px;
443
- --tw-ring-offset-color: #fff;
444
- --tw-ring-color: rgb(59 130 246 / 0.5);
445
- --tw-ring-offset-shadow: 0 0 #0000;
446
- --tw-ring-shadow: 0 0 #0000;
447
- --tw-shadow: 0 0 #0000;
448
- --tw-shadow-colored: 0 0 #0000;
449
- --tw-blur: ;
450
- --tw-brightness: ;
451
- --tw-contrast: ;
452
- --tw-grayscale: ;
453
- --tw-hue-rotate: ;
454
- --tw-invert: ;
455
- --tw-saturate: ;
456
- --tw-sepia: ;
457
- --tw-drop-shadow: ;
458
- --tw-backdrop-blur: ;
459
- --tw-backdrop-brightness: ;
460
- --tw-backdrop-contrast: ;
461
- --tw-backdrop-grayscale: ;
462
- --tw-backdrop-hue-rotate: ;
463
- --tw-backdrop-invert: ;
464
- --tw-backdrop-opacity: ;
465
- --tw-backdrop-saturate: ;
466
- --tw-backdrop-sepia: ;
467
- }
468
-
469
- ::backdrop {
470
- --tw-border-spacing-x: 0;
471
- --tw-border-spacing-y: 0;
472
- --tw-translate-x: 0;
473
- --tw-translate-y: 0;
474
- --tw-rotate: 0;
475
- --tw-skew-x: 0;
476
- --tw-skew-y: 0;
477
- --tw-scale-x: 1;
478
- --tw-scale-y: 1;
479
- --tw-pan-x: ;
480
- --tw-pan-y: ;
481
- --tw-pinch-zoom: ;
482
- --tw-scroll-snap-strictness: proximity;
483
- --tw-ordinal: ;
484
- --tw-slashed-zero: ;
485
- --tw-numeric-figure: ;
486
- --tw-numeric-spacing: ;
487
- --tw-numeric-fraction: ;
488
- --tw-ring-inset: ;
489
- --tw-ring-offset-width: 0px;
490
- --tw-ring-offset-color: #fff;
491
- --tw-ring-color: rgb(59 130 246 / 0.5);
492
- --tw-ring-offset-shadow: 0 0 #0000;
493
- --tw-ring-shadow: 0 0 #0000;
494
- --tw-shadow: 0 0 #0000;
495
- --tw-shadow-colored: 0 0 #0000;
496
- --tw-blur: ;
497
- --tw-brightness: ;
498
- --tw-contrast: ;
499
- --tw-grayscale: ;
500
- --tw-hue-rotate: ;
501
- --tw-invert: ;
502
- --tw-saturate: ;
503
- --tw-sepia: ;
504
- --tw-drop-shadow: ;
505
- --tw-backdrop-blur: ;
506
- --tw-backdrop-brightness: ;
507
- --tw-backdrop-contrast: ;
508
- --tw-backdrop-grayscale: ;
509
- --tw-backdrop-hue-rotate: ;
510
- --tw-backdrop-invert: ;
511
- --tw-backdrop-opacity: ;
512
- --tw-backdrop-saturate: ;
513
- --tw-backdrop-sepia: ;
514
555
  }