@turnipxenon/pineapple 3.0.0 → 3.1.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +103 -0
  2. package/dist/components/RandomizedBackground.svelte +4 -0
  3. package/dist/components/RandomizedBackground.svelte.d.ts +1 -0
  4. package/dist/components/blog_template/BlogTemplate.svelte +15 -18
  5. package/dist/components/blog_template/BlogTemplate.svelte.d.ts +3 -2
  6. package/dist/components/blog_template/BlogTemplateInner.svelte +1 -1
  7. package/dist/components/blog_template/BlogTemplateInner.svelte.d.ts +1 -1
  8. package/dist/components/dialog_manager/DialogManager.d.ts +3 -2
  9. package/dist/components/dialog_manager/DialogManager.js +6 -4
  10. package/dist/components/dialog_manager/DialogProcessor.d.ts +4 -2
  11. package/dist/components/dialog_manager/DialogProcessor.js +23 -18
  12. package/dist/components/dialog_manager/IDialogManager.d.ts +1 -2
  13. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +2 -2
  14. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +4 -5
  15. package/dist/components/dialog_overlay/DialogOverlay.svelte +149 -51
  16. package/dist/components/layouts/SeaweedBaseLayout.svelte +0 -6
  17. package/dist/components/pineapple/PineappleBaseLayout.svelte +3 -23
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +2 -2
  20. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +1 -2
  21. package/dist/styles/app.css +11 -14
  22. package/dist/styles/turnip-theme.css +17 -7
  23. package/dist/ui/components/ModalBase.svelte +74 -74
  24. package/dist/ui/components/SocialSection.svelte +2 -1
  25. package/dist/ui/components/accordion/PinyaAccordion.svelte +20 -20
  26. package/dist/ui/components/accordion/PinyaAccordionItem.svelte +28 -28
  27. package/dist/ui/components/randomized-background/RandomizedBackground.svelte +9 -1
  28. package/dist/ui/elements/CodeBlock/CodeBlock.svelte +65 -64
  29. package/dist/ui/elements/CodeBlock/CodeBlockProps.d.ts +1 -1
  30. package/dist/ui/elements/ImageIcon.svelte +53 -53
  31. package/dist/ui/elements/ImageIcon.svelte.d.ts +1 -1
  32. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte +25 -0
  33. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButton.svelte.d.ts +4 -0
  34. package/dist/ui/elements/PinyaAnchorButton/PinyaAnchorButtonProps.d.ts +4 -0
  35. package/dist/ui/elements/PinyaAnchorButton/index.d.ts +2 -0
  36. package/dist/ui/elements/PinyaAnchorButton/index.js +2 -0
  37. package/dist/ui/elements/PinyaButton/PinyaButton.svelte +8 -31
  38. package/dist/ui/elements/PinyaButton/PinyaButton.svelte.d.ts +1 -1
  39. package/dist/ui/elements/PinyaButton/PinyaButtonProps.d.ts +4 -14
  40. package/dist/ui/elements/PinyaButton/PinyaButtonProps.js +1 -6
  41. package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.d.ts +5 -0
  42. package/dist/ui/elements/PinyaButtonCommon/ButtonVariant.js +6 -0
  43. package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.d.ts +8 -0
  44. package/dist/ui/elements/PinyaButtonCommon/PinyaButtonCommonProps.js +2 -0
  45. package/dist/ui/elements/PinyaButtonCommon/createButtonClass.d.ts +2 -0
  46. package/dist/ui/elements/PinyaButtonCommon/createButtonClass.js +31 -0
  47. package/dist/ui/elements/PinyaButtonCommon/index.d.ts +3 -0
  48. package/dist/ui/elements/PinyaButtonCommon/index.js +3 -0
  49. package/dist/ui/elements/PinyaCard/PinyaCard.svelte +30 -0
  50. package/dist/ui/elements/PinyaCard/PinyaCard.svelte.d.ts +7 -0
  51. package/dist/ui/elements/{pinya-card/props.d.ts → PinyaCard/PinyaCardProps.d.ts} +1 -0
  52. package/dist/ui/elements/PinyaCard/PinyaCardProps.js +1 -0
  53. package/dist/ui/elements/PinyaCard/index.d.ts +2 -0
  54. package/dist/ui/elements/PinyaCard/index.js +2 -0
  55. package/dist/ui/elements/Placeholder.svelte +17 -17
  56. package/dist/ui/elements/TextLink.svelte +16 -16
  57. package/dist/ui/elements/index.d.ts +7 -5
  58. package/dist/ui/elements/index.js +9 -5
  59. package/dist/ui/elements/pinya-combobox/PinyaCombobox.svelte +34 -34
  60. package/dist/ui/elements/text-chip/TextChip.svelte +14 -14
  61. package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte +24 -20
  62. package/dist/{components/navigation_component/NavigationComponent.svelte → ui/modules/NavigationMenu/NavigationMenu.svelte} +69 -43
  63. package/dist/{components/navigation_component/NavigationComponent.svelte.d.ts → ui/modules/NavigationMenu/NavigationMenu.svelte.d.ts} +6 -6
  64. package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.d.ts +4 -4
  65. package/dist/ui/modules/NavigationMenu/index.d.ts +2 -0
  66. package/dist/ui/modules/NavigationMenu/index.js +2 -0
  67. package/dist/ui/modules/index.d.ts +1 -1
  68. package/dist/ui/modules/index.js +1 -1
  69. package/dist/ui/modules/modals/general-settings/GeneralSettingsModal.svelte +109 -109
  70. package/dist/ui/modules/modals/general-settings/LanguagePicker.svelte +42 -42
  71. package/dist/ui/modules/projects/Hepcat.svelte +1 -1
  72. package/dist/ui/modules/projects/Pengi.svelte +61 -61
  73. package/dist/ui/modules/projects/Soulwork.svelte +1 -1
  74. package/dist/ui/modules/projects/ThisWebpage.svelte +11 -9
  75. package/dist/ui/templates/PinyaPageLayout/PinyaPageLayout.svelte +7 -3
  76. package/dist/ui/templates/PinyaPageLayout/runes.svelte.d.ts +3 -0
  77. package/dist/ui/templates/PinyaPageLayout/runes.svelte.js +1 -0
  78. package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte +1 -1
  79. package/dist/ui/templates/SeaweedLayout/EntryGroup.svelte +65 -88
  80. package/dist/ui/templates/SeaweedLayout/ProjectComponentProps.d.ts +1 -0
  81. package/dist/ui/templates/SeaweedLayout/ProjectGroupConfig.svelte +316 -316
  82. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.md +3 -3
  83. package/dist/ui/templates/SeaweedLayout/SeaweedLayout.svelte +278 -276
  84. package/dist/ui/templates/SeaweedLayout/props.d.ts +2 -2
  85. package/dist/ui/templates/confirmation-modal/component.svelte +46 -46
  86. package/package.json +1 -1
  87. package/src/lib/styles/app.css +11 -14
  88. package/dist/components/dialog_manager/DialogMangerInit.d.ts +0 -2
  89. package/dist/components/dialog_manager/DialogMangerInit.js +0 -21
  90. package/dist/components/navigation_component/index.d.ts +0 -2
  91. package/dist/components/navigation_component/index.js +0 -3
  92. package/dist/ui/elements/pinya-card/component.svelte +0 -21
  93. package/dist/ui/elements/pinya-card/component.svelte.d.ts +0 -7
  94. package/dist/ui/elements/pinya-card/index.d.ts +0 -2
  95. package/dist/ui/elements/pinya-card/index.js +0 -2
  96. package/dist/ui/modules/seaweed/index.d.ts +0 -3
  97. package/dist/ui/modules/seaweed/index.js +0 -4
  98. /package/dist/ui/elements/{pinya-card/props.js → PinyaAnchorButton/PinyaAnchorButtonProps.js} +0 -0
  99. /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/NavigationControl.svelte.d.ts +0 -0
  100. /package/dist/{components/navigation_component → ui/modules/NavigationMenu}/PageMeta.js +0 -0
  101. /package/dist/ui/{modules/seaweed → templates/SeaweedLayout}/ChumBucket.svelte.d.ts +0 -0
@@ -1,316 +1,316 @@
1
- <script lang="ts">
2
- import CloseIcon from "../../../assets/icons/close.svg";
3
- import UpwardIcon from "../../../assets/icons/arrow-upward.svg";
4
- import type { ProjectGroup, SnippetMeta } from "../index";
5
- import { getContext, onMount } from "svelte";
6
- import { PinyaCard } from "../../elements/index";
7
- import PinyaCombobox from "../../elements/pinya-combobox/PinyaCombobox.svelte";
8
- import { PinyaButton } from "../../elements/index.js";
9
- import { type ToastContext } from "@skeletonlabs/skeleton-svelte";
10
-
11
- export const toast: ToastContext = getContext("toast");
12
-
13
- interface Props {
14
- layout: ProjectGroup[];
15
- orderUrl: string;
16
- allEntries: SnippetMeta[];
17
- group: ProjectGroup;
18
- groupIndex: number;
19
- }
20
-
21
- let {
22
- layout = $bindable(),
23
- orderUrl = $bindable(),
24
- allEntries,
25
- group,
26
- groupIndex
27
- }: Props = $props();
28
-
29
- const updateOrderQuery = () => {
30
- orderUrl = "order=" + layout.map(g => {
31
- const groupUrl = g.entryList.map(e => e.key).join("|");
32
- // the last item after : is a grid class but we're keeping it here for legacy reason
33
- return `${g.title}:${groupUrl}:`;
34
- }).join(",");
35
- };
36
-
37
- const swapEntry = (index: number, group: ProjectGroup, shouldDecrement: boolean): (() => void) => {
38
- return () => {
39
- let newIndex = index;
40
- if (shouldDecrement && index >= 1) {
41
- newIndex--;
42
- } else if (!shouldDecrement && index <= group.entryList.length - 2) {
43
- newIndex++;
44
- } else {
45
- return;
46
- }
47
-
48
- const tempVar = group.entryList[newIndex];
49
- group.entryList[newIndex] = group.entryList[index];
50
- group.entryList[index] = tempVar;
51
- layout = layout;
52
- updateOrderQuery();
53
- };
54
- };
55
- const swapGroups = (index: number, shouldDecrement: boolean): (() => void) => {
56
- return () => {
57
- let newIndex = index;
58
- if (shouldDecrement && index >= 1) {
59
- newIndex--;
60
- } else if (!shouldDecrement && index <= layout.length - 2) {
61
- newIndex++;
62
- } else {
63
- return;
64
- }
65
-
66
- const tempVar = layout[newIndex];
67
- layout[newIndex] = layout[index];
68
- layout[index] = tempVar;
69
- layout = layout;
70
- updateOrderQuery();
71
- };
72
- };
73
-
74
- const removeGroup = (group: ProjectGroup): (() => void) => {
75
- return () => {
76
- const index = layout.indexOf(group);
77
- if (index === -1) {
78
- return;
79
- }
80
-
81
- layout.splice(index, 1);
82
- layout = layout;
83
- updateOrderQuery();
84
- };
85
- };
86
- const removeEntry = (entry: SnippetMeta, group: ProjectGroup): (() => void) => {
87
- return () => {
88
- for (let i = group.entryList.length - 1; i >= 0; i--) {
89
- if (group.entryList[i].key === entry.key) {
90
- group.entryList.splice(i, 1);
91
- layout = layout;
92
- updateOrderQuery();
93
- break;
94
- }
95
- }
96
- };
97
- };
98
-
99
- const comboboxData = allEntries.map(entry => {
100
- return {
101
- label: entry.key,
102
- value: entry.key
103
- };
104
- });
105
-
106
- let comboboxValue = $state([comboboxData[0].value]);
107
-
108
- const addEntry = () => {
109
- const c = allEntries.find(e => e.key === comboboxValue[0]);
110
-
111
- if (!c) {
112
- console.warn(`Unknown key: ${comboboxValue}`);
113
- return;
114
- }
115
-
116
- if (group.entryList.includes(c)) {
117
- toast.create({
118
- title: "Duplicate entry",
119
- description: `The entry ${comboboxValue} is already in ${group.title}`,
120
- type: "error"
121
- });
122
- return;
123
- }
124
-
125
- group.entryList.push(c);
126
- layout = layout;
127
- updateOrderQuery();
128
- };
129
- </script>
130
-
131
- <PinyaCard
132
- widthClass="max-w-2xl"
133
- borderClass="border-[2px] border-primary-500"
134
- marginClass="mt-4 mb-4"
135
- paddingClass=""
136
- >
137
-
138
- <div class="m-4 flex flex-row gap-2">
139
- <button title={`Remove ${group.title}`}
140
- onclick={removeGroup(group)}>
141
- <img class="img-icon" src={CloseIcon} alt={`Remove ${group.title}`}>
142
- </button>
143
-
144
- <button title={`Move group ${group.title} upwards`}
145
- onclick={swapGroups(groupIndex, true)}
146
- disabled="{groupIndex === 0}">
147
- <img class="img-icon" src={UpwardIcon} alt={`Move group ${group.title} upwards`}>
148
- </button>
149
-
150
- <button title={`Move group ${group.title} downwards`}
151
- disabled={groupIndex === layout.length - 1}
152
- onclick={swapGroups(groupIndex, false)}>
153
- <img
154
- class="img-icon flipped-vertically"
155
- src={UpwardIcon}
156
- alt={`Move group ${group.title} downwards`}
157
- >
158
- </button>
159
-
160
- <div class="fake-h3 ml-2">Group title: {group.title}</div>
161
- </div>
162
-
163
- <hr class="border-primary-500 border-1">
164
-
165
- <table class="table">
166
- <thead>
167
- <tr>
168
- <th class="fake-h4">Entries</th>
169
- </tr>
170
- </thead>
171
- <tbody>
172
- {#each group.entryList as entry, entryIndex (entry)}
173
- <tr class="entry-row">
174
- <td class="entry-data">
175
-
176
- <button title={`Remove ${entry.key}`}
177
- onclick={removeEntry(entry, group)}>
178
- <img class="img-icon" src={CloseIcon} alt={`Remove ${entry.key}`}>
179
- </button>
180
-
181
- <button title={`Move ${entry.key} upwards`}
182
- onclick={swapEntry(entryIndex, group, true)}
183
- disabled="{entryIndex === 0}">
184
- <img class="img-icon" src={UpwardIcon} alt={`Move ${entry.key} upwards`}>
185
- </button>
186
-
187
- <button title={`Move ${entry.key} downwards`}
188
- disabled={entryIndex === group.key.length - 1}
189
- onclick={swapEntry(entryIndex, group, false)}>
190
- <img class="img-icon flipped-vertically" src={UpwardIcon} alt={`Move ${entry.key} downwards`}>
191
- </button>
192
- <div class="entry-name">
193
- {entry.key}
194
- </div>
195
- </td>
196
- </tr>
197
- {/each}
198
- </tbody>
199
-
200
- <tfoot>
201
- <tr>
202
- <td class="combobox-container">
203
- <PinyaButton onclick={addEntry}>Add Entry
204
- </PinyaButton>
205
- <PinyaCombobox
206
- data={comboboxData}
207
- defaultValue={comboboxValue}
208
- bind:value={comboboxValue}
209
- label="New entry"
210
- placeholder="Add new entry"
211
- contentZIndex="10"
212
- />
213
- </td>
214
- </tr>
215
- </tfoot>
216
- </table>
217
-
218
-
219
- </PinyaCard>
220
-
221
-
222
- <style>
223
-
224
-
225
- .advanced-setting-list {
226
- display: flex;
227
- flex-direction: column;
228
- }
229
-
230
- .btn-group-header {
231
- @apply preset-filled-tertiary-500;
232
- display: flex;
233
- align-items: center;
234
- margin-bottom: 0.5lh;
235
- }
236
-
237
- .btn-group-entry {
238
- @apply ;
239
- display: flex;
240
- padding: 0;
241
- }
242
-
243
- .btn-group-entry > div {
244
- padding: 1em;
245
- }
246
-
247
- .flipped-vertically {
248
- transform: rotate(180deg);
249
- }
250
-
251
- .entry-group {
252
- border-radius: var(--theme-rounded-container);
253
- background-color: rgb(var(--color-surface-600));
254
- margin-top: 1.5lh;
255
- margin-bottom: 0.5lh;
256
- padding: 0.5lh 0.5em;
257
- }
258
-
259
- .entry-name {
260
- grow: 1;
261
- }
262
-
263
- tr, td, th, table {
264
- width: 100%;
265
- }
266
-
267
- table {
268
- margin-bottom: 1lh;
269
- }
270
-
271
- tfoot > tr {
272
- display: flex;
273
- }
274
-
275
- .btn-group > button {
276
- padding: 0.3em 0.75em;
277
- }
278
-
279
- .btn-group-header > h2 {
280
- font-weight: bolder;
281
- padding-top: 1lh;
282
- padding-bottom: 1lh;
283
- margin-bottom: 0;
284
- padding-inline-start: 1em;
285
- }
286
-
287
- .dark .btn-group-header > h2 {
288
- color: rgb(var(--theme-font-color-dark));
289
- }
290
-
291
- .dark .entry-group {
292
- background-color: rgb(var(--color-surface-800));
293
- }
294
-
295
-
296
- tbody tr:nth-child(odd) {
297
- background-color: var(--color-surface-100-900);
298
- }
299
-
300
- tbody tr:nth-child(even), thead {
301
- background-color: var(--color-surface-300-700);
302
- }
303
-
304
- .entry-data {
305
- display: flex;
306
- flex-direction: row;
307
- gap: 1rem;
308
- align-items: center;
309
- }
310
-
311
- .combobox-container {
312
- display: flex;
313
- flex-direction: row;
314
- gap: 1em;
315
- }
316
- </style>
1
+ <script lang="ts">
2
+ import CloseIcon from "../../../assets/icons/close.svg";
3
+ import UpwardIcon from "../../../assets/icons/arrow-upward.svg";
4
+ import type { ProjectGroup, SnippetMeta } from "../index";
5
+ import { getContext, onMount } from "svelte";
6
+ import { PinyaCard } from "../../elements/index";
7
+ import PinyaCombobox from "../../elements/pinya-combobox/PinyaCombobox.svelte";
8
+ import { PinyaButton } from "../../elements/index.js";
9
+ import { type ToastContext } from "@skeletonlabs/skeleton-svelte";
10
+
11
+ export const toast: ToastContext = getContext("toast");
12
+
13
+ interface Props {
14
+ layout: ProjectGroup[];
15
+ orderUrl: string;
16
+ allEntries: SnippetMeta[];
17
+ group: ProjectGroup;
18
+ groupIndex: number;
19
+ }
20
+
21
+ let {
22
+ layout = $bindable(),
23
+ orderUrl = $bindable(),
24
+ allEntries,
25
+ group,
26
+ groupIndex
27
+ }: Props = $props();
28
+
29
+ const updateOrderQuery = () => {
30
+ orderUrl = "order=" + layout.map(g => {
31
+ const groupUrl = g.entryList.map(e => e.key).join("|");
32
+ // the last item after : is a grid class but we're keeping it here for legacy reason
33
+ return `${g.title}:${groupUrl}:`;
34
+ }).join(",");
35
+ };
36
+
37
+ const swapEntry = (index: number, group: ProjectGroup, shouldDecrement: boolean): (() => void) => {
38
+ return () => {
39
+ let newIndex = index;
40
+ if (shouldDecrement && index >= 1) {
41
+ newIndex--;
42
+ } else if (!shouldDecrement && index <= group.entryList.length - 2) {
43
+ newIndex++;
44
+ } else {
45
+ return;
46
+ }
47
+
48
+ const tempVar = group.entryList[newIndex];
49
+ group.entryList[newIndex] = group.entryList[index];
50
+ group.entryList[index] = tempVar;
51
+ layout = layout;
52
+ updateOrderQuery();
53
+ };
54
+ };
55
+ const swapGroups = (index: number, shouldDecrement: boolean): (() => void) => {
56
+ return () => {
57
+ let newIndex = index;
58
+ if (shouldDecrement && index >= 1) {
59
+ newIndex--;
60
+ } else if (!shouldDecrement && index <= layout.length - 2) {
61
+ newIndex++;
62
+ } else {
63
+ return;
64
+ }
65
+
66
+ const tempVar = layout[newIndex];
67
+ layout[newIndex] = layout[index];
68
+ layout[index] = tempVar;
69
+ layout = layout;
70
+ updateOrderQuery();
71
+ };
72
+ };
73
+
74
+ const removeGroup = (group: ProjectGroup): (() => void) => {
75
+ return () => {
76
+ const index = layout.indexOf(group);
77
+ if (index === -1) {
78
+ return;
79
+ }
80
+
81
+ layout.splice(index, 1);
82
+ layout = layout;
83
+ updateOrderQuery();
84
+ };
85
+ };
86
+ const removeEntry = (entry: SnippetMeta, group: ProjectGroup): (() => void) => {
87
+ return () => {
88
+ for (let i = group.entryList.length - 1; i >= 0; i--) {
89
+ if (group.entryList[i].key === entry.key) {
90
+ group.entryList.splice(i, 1);
91
+ layout = layout;
92
+ updateOrderQuery();
93
+ break;
94
+ }
95
+ }
96
+ };
97
+ };
98
+
99
+ const comboboxData = allEntries.map(entry => {
100
+ return {
101
+ label: entry.key,
102
+ value: entry.key
103
+ };
104
+ });
105
+
106
+ let comboboxValue = $state([comboboxData[0].value]);
107
+
108
+ const addEntry = () => {
109
+ const c = allEntries.find(e => e.key === comboboxValue[0]);
110
+
111
+ if (!c) {
112
+ console.warn(`Unknown key: ${comboboxValue}`);
113
+ return;
114
+ }
115
+
116
+ if (group.entryList.includes(c)) {
117
+ toast.create({
118
+ title: "Duplicate entry",
119
+ description: `The entry ${comboboxValue} is already in ${group.title}`,
120
+ type: "error"
121
+ });
122
+ return;
123
+ }
124
+
125
+ group.entryList.push(c);
126
+ layout = layout;
127
+ updateOrderQuery();
128
+ };
129
+ </script>
130
+
131
+ <PinyaCard
132
+ widthClass="max-w-2xl"
133
+ borderClass="border-[2px] border-primary-500"
134
+ marginClass="mt-4 mb-4"
135
+ paddingClass=""
136
+ >
137
+
138
+ <div class="m-4 flex flex-row gap-2">
139
+ <button title={`Remove ${group.title}`}
140
+ onclick={removeGroup(group)}>
141
+ <img class="img-icon" src={CloseIcon} alt={`Remove ${group.title}`}>
142
+ </button>
143
+
144
+ <button title={`Move group ${group.title} upwards`}
145
+ onclick={swapGroups(groupIndex, true)}
146
+ disabled="{groupIndex === 0}">
147
+ <img class="img-icon" src={UpwardIcon} alt={`Move group ${group.title} upwards`}>
148
+ </button>
149
+
150
+ <button title={`Move group ${group.title} downwards`}
151
+ disabled={groupIndex === layout.length - 1}
152
+ onclick={swapGroups(groupIndex, false)}>
153
+ <img
154
+ class="img-icon flipped-vertically"
155
+ src={UpwardIcon}
156
+ alt={`Move group ${group.title} downwards`}
157
+ >
158
+ </button>
159
+
160
+ <div class="fake-h3 ml-2">Group title: {group.title}</div>
161
+ </div>
162
+
163
+ <hr class="border-primary-500 border-1">
164
+
165
+ <table class="table">
166
+ <thead>
167
+ <tr>
168
+ <th class="fake-h4">Entries</th>
169
+ </tr>
170
+ </thead>
171
+ <tbody>
172
+ {#each group.entryList as entry, entryIndex (entry)}
173
+ <tr class="entry-row">
174
+ <td class="entry-data">
175
+
176
+ <button title={`Remove ${entry.key}`}
177
+ onclick={removeEntry(entry, group)}>
178
+ <img class="img-icon" src={CloseIcon} alt={`Remove ${entry.key}`}>
179
+ </button>
180
+
181
+ <button title={`Move ${entry.key} upwards`}
182
+ onclick={swapEntry(entryIndex, group, true)}
183
+ disabled="{entryIndex === 0}">
184
+ <img class="img-icon" src={UpwardIcon} alt={`Move ${entry.key} upwards`}>
185
+ </button>
186
+
187
+ <button title={`Move ${entry.key} downwards`}
188
+ disabled={entryIndex === group.key.length - 1}
189
+ onclick={swapEntry(entryIndex, group, false)}>
190
+ <img class="img-icon flipped-vertically" src={UpwardIcon} alt={`Move ${entry.key} downwards`}>
191
+ </button>
192
+ <div class="entry-name">
193
+ {entry.key}
194
+ </div>
195
+ </td>
196
+ </tr>
197
+ {/each}
198
+ </tbody>
199
+
200
+ <tfoot>
201
+ <tr>
202
+ <td class="combobox-container">
203
+ <PinyaButton onclick={addEntry}>Add Entry
204
+ </PinyaButton>
205
+ <PinyaCombobox
206
+ data={comboboxData}
207
+ defaultValue={comboboxValue}
208
+ bind:value={comboboxValue}
209
+ label="New entry"
210
+ placeholder="Add new entry"
211
+ contentZIndex="10"
212
+ />
213
+ </td>
214
+ </tr>
215
+ </tfoot>
216
+ </table>
217
+
218
+
219
+ </PinyaCard>
220
+
221
+
222
+ <style>
223
+
224
+
225
+ .advanced-setting-list {
226
+ display: flex;
227
+ flex-direction: column;
228
+ }
229
+
230
+ .btn-group-header {
231
+ @apply preset-filled-tertiary-500;
232
+ display: flex;
233
+ align-items: center;
234
+ margin-bottom: 0.5lh;
235
+ }
236
+
237
+ .btn-group-entry {
238
+ @apply ;
239
+ display: flex;
240
+ padding: 0;
241
+ }
242
+
243
+ .btn-group-entry > div {
244
+ padding: 1em;
245
+ }
246
+
247
+ .flipped-vertically {
248
+ transform: rotate(180deg);
249
+ }
250
+
251
+ .entry-group {
252
+ border-radius: var(--theme-rounded-container);
253
+ background-color: rgb(var(--color-surface-600));
254
+ margin-top: 1.5lh;
255
+ margin-bottom: 0.5lh;
256
+ padding: 0.5lh 0.5em;
257
+ }
258
+
259
+ .entry-name {
260
+ grow: 1;
261
+ }
262
+
263
+ tr, td, th, table {
264
+ width: 100%;
265
+ }
266
+
267
+ table {
268
+ margin-bottom: 1lh;
269
+ }
270
+
271
+ tfoot > tr {
272
+ display: flex;
273
+ }
274
+
275
+ .btn-group > button {
276
+ padding: 0.3em 0.75em;
277
+ }
278
+
279
+ .btn-group-header > h2 {
280
+ font-weight: bolder;
281
+ padding-top: 1lh;
282
+ padding-bottom: 1lh;
283
+ margin-bottom: 0;
284
+ padding-inline-start: 1em;
285
+ }
286
+
287
+ .dark .btn-group-header > h2 {
288
+ color: rgb(var(--theme-font-color-dark));
289
+ }
290
+
291
+ .dark .entry-group {
292
+ background-color: rgb(var(--color-surface-800));
293
+ }
294
+
295
+
296
+ tbody tr:nth-child(odd) {
297
+ background-color: var(--color-surface-100-900);
298
+ }
299
+
300
+ tbody tr:nth-child(even), thead {
301
+ background-color: var(--color-surface-300-700);
302
+ }
303
+
304
+ .entry-data {
305
+ display: flex;
306
+ flex-direction: row;
307
+ gap: 1rem;
308
+ align-items: center;
309
+ }
310
+
311
+ .combobox-container {
312
+ display: flex;
313
+ flex-direction: row;
314
+ gap: 1em;
315
+ }
316
+ </style>
@@ -1,4 +1,4 @@
1
- # Query format
2
-
3
- - ?order=title:entry 1|entry 2:layout-type,title2:entry 3:layout-type
1
+ # Query format
2
+
3
+ - ?order=title:entry 1|entry 2:layout-type,title2:entry 3:layout-type
4
4
  - &qt=js,vue,ts,java,android,react,go,aws,observability,infra,unity,cs,rpgmaker,python,django,heroku,svelte,c,foundation,valgrind,google,firebase